From a57a595ffe3f1f44c9b5efd3f60657fb888f55da Mon Sep 17 00:00:00 2001 From: Jakub Grzegorzewski <25271819+jakewski@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:18:38 +0000 Subject: [PATCH 01/13] Start 2.85.0-rc1 --- src/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.js b/src/config.js index 31df969a..afe16524 100644 --- a/src/config.js +++ b/src/config.js @@ -1,6 +1,6 @@ export var Config = { DEBUG: false, - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules From 31d9a18f1da32bea559a9b3bacf6f1a5d846a8d9 Mon Sep 17 00:00:00 2001 From: Udit Malik <256210184+awakebutstillinbed@users.noreply.github.com> Date: Wed, 14 Oct 2026 17:49:20 +0000 Subject: [PATCH 02/13] gdpr: one opt-out status check for track() and has_opted_out_tracking() (#499) --- src/gdpr-utils.js | 89 +++--- src/mixpanel-core.js | 40 ++- src/recorder/session-recording.js | 13 +- tests/browser/client/index.js | 4 +- tests/browser/client/suites/gdpr.js | 71 +++++ tests/unit/gdpr-instance.js | 72 +++++ tests/unit/gdpr-utils.js | 353 +++++---------------- tests/unit/session-recording.js | 8 +- tests/unit/test-utils/mock-mixpanel-lib.js | 4 + 9 files changed, 309 insertions(+), 345 deletions(-) create mode 100644 tests/browser/client/suites/gdpr.js create mode 100644 tests/unit/gdpr-instance.js diff --git a/src/gdpr-utils.js b/src/gdpr-utils.js index 9aa78ef7..8767da42 100644 --- a/src/gdpr-utils.js +++ b/src/gdpr-utils.js @@ -103,8 +103,8 @@ export function hasOptedOut(token, options) { * @returns {M} the wrapped method */ export function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); + return _addOptOutCheck(method, function() { + return this; }); } @@ -117,9 +117,7 @@ export function addOptOutCheckMixpanelLib(method) { * @returns {M} the wrapped method */ export function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); + return _addOptOutCheck(method, _getOwningMixpanelInstance); } /** @@ -131,9 +129,40 @@ export function addOptOutCheckMixpanelPeople(method) { * @returns {M} the wrapped method */ export function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); + return _addOptOutCheck(method, _getOwningMixpanelInstance); +} + +/** + * Wrap a SessionRecording method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token + * If the user has opted out, return early instead of executing the method. + * If a callback argument was provided, execute it passing the 0 error code. + * @template {Function} M + * @param {M} method - wrapped method to be executed if the user has not opted out + * @returns {M} the wrapped method + */ +export function addOptOutCheckSessionRecording(method) { + return _addOptOutCheck(method, _getOwningMixpanelInstance); +} + +/** + * Get the persistence type to read the opt-in/out flag from. MixpanelLib._gdpr_call_func writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ +export function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; } /** @@ -157,6 +186,10 @@ export function clearOptInOut(token, options) { /** Private **/ +function _getOwningMixpanelInstance() { + return this._mixpanel; +} + /** * Get storage util * @param {Object} [options] @@ -191,27 +224,6 @@ function _getStorageValue(token, options) { return _getStorage(options).get(_getStorageKey(token, options)); } -/** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read - */ -function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; - } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; -} - /** * Check whether the user has set the DNT/doNotTrack setting to true in their browser * @param {Object} [options] @@ -285,28 +297,15 @@ function _optInOut(optValue, token, options) { * If the user has opted out, return early instead of executing the method. * If a callback argument was provided, execute it passing the 0 error code. * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check + * @param {function} getMixpanelInstance - getter for the MixpanelLib instance whose opt-out status gates the method * @returns {*} the result of executing method OR undefined if the user has opted out */ -function _addOptOutCheck(method, getConfigValue) { +function _addOptOutCheck(method, getMixpanelInstance) { return function() { var optedOut = false; try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } + optedOut = getMixpanelInstance.call(this).has_opted_out_tracking(); } catch(err) { console.error('Unexpected error when checking tracking opt-out status: ' + err); } diff --git a/src/mixpanel-core.js b/src/mixpanel-core.js index e1691f55..b493faa8 100644 --- a/src/mixpanel-core.js +++ b/src/mixpanel-core.js @@ -20,7 +20,8 @@ import { hasOptedIn, hasOptedOut, clearOptInOut, - addOptOutCheckMixpanelLib + addOptOutCheckMixpanelLib, + getOptOutCheckPersistenceType } from './gdpr-utils'; /* @@ -2160,10 +2161,10 @@ MixpanelLib.prototype._gdpr_init = function() { // try to convert opt-in/out cookies to localStorage if possible if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { + if (!this.has_opted_in_tracking({'persistence_type': 'localStorage'}) && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { this.opt_in_tracking({'enable_persistence': false}); } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { + if (!this.has_opted_out_tracking({'persistence_type': 'localStorage'}) && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { this.opt_out_tracking({'clear_persistence': false}); } this.clear_opt_in_out_tracking({ @@ -2255,6 +2256,31 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { }); }; +// check an opt-in/out status, reading the store that holds the flag unless options name one +MixpanelLib.prototype._gdpr_check_status = function(func, options) { + options = _.extend({ + 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), + 'ignore_dnt': this.get_config('ignore_dnt') + }, options); + + var token = this.get_config('token'); + var persistence_type = options['persistence_type']; + if (!persistence_type) { + persistence_type = getOptOutCheckPersistenceType( + token, this.get_config('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistence_type = 'cookie'; + } + + return func(token, { + persistenceType: persistence_type, + persistencePrefix: options['cookie_prefix'], + ignoreDnt: options['ignore_dnt'], + window: this.get_config('window') // used to override window during browser tests + }); +}; + /** * Opt the user in to data tracking and cookies/localstorage for this Mixpanel instance * @@ -2348,12 +2374,12 @@ MixpanelLib.prototype.opt_out_tracking = function(options) { * ``` * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._gdpr_check_status(hasOptedIn, options); }; /** @@ -2366,12 +2392,12 @@ MixpanelLib.prototype.has_opted_in_tracking = function(options) { * ``` * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._gdpr_check_status(hasOptedOut, options); }; /** diff --git a/src/recorder/session-recording.js b/src/recorder/session-recording.js index 6e35ab1a..4b28ba36 100644 --- a/src/recorder/session-recording.js +++ b/src/recorder/session-recording.js @@ -11,7 +11,7 @@ import { RECORDING_EVENTS_STORE_NAME, RECORDER_VERSION_DATA } from './idb-config'; -import { addOptOutCheckMixpanelLib } from '../gdpr-utils'; +import { addOptOutCheckSessionRecording } from '../gdpr-utils'; import { RequestBatcher } from '../request-batcher'; import { Config } from '../config'; @@ -186,13 +186,6 @@ SessionRecording.prototype.getConfig = function(configVar) { return this._mixpanel.get_config(configVar); }; -// Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which -// reaches into this class instance and expects the snake case version of the function. -// eslint-disable-next-line camelcase -SessionRecording.prototype.get_config = function(configVar) { - return this.getConfig(configVar); -}; - SessionRecording.prototype.startRecording = function (shouldStopBatcher) { if (this._rrwebRecord === null) { this.reportError('rrweb record function not provided. '); @@ -372,7 +365,7 @@ SessionRecording.prototype.isRrwebStopped = function () { */ SessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) { var onOptOut = function (code) { - // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out + // addOptOutCheckSessionRecording invokes this function with code=0 when the user has opted out if (code === 0) { this.stopRecording(); cb({error: 'Tracking has been opted out, stopping recording.'}); @@ -472,7 +465,7 @@ SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, r }); }; -SessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) { +SessionRecording.prototype._flushEvents = addOptOutCheckSessionRecording(function (data, options, callback) { var numEvents = data.length; if (numEvents > 0) { diff --git a/tests/browser/client/index.js b/tests/browser/client/index.js index 4688163d..1934e840 100644 --- a/tests/browser/client/index.js +++ b/tests/browser/client/index.js @@ -6,8 +6,9 @@ import {remoteSettingsTests} from './suites/remoteSettings'; import {bundleCompatTests} from './suites/bundleCompat'; import {autocaptureTests} from './suites/autocapture'; import {domTrackersTests} from './suites/domTrackers'; +import {gdprTests} from './suites/gdpr'; -export {trackTests, batchRequestsTests, recorderTests, flagsTests, remoteSettingsTests, bundleCompatTests, domTrackersTests}; +export {trackTests, batchRequestsTests, recorderTests, flagsTests, remoteSettingsTests, bundleCompatTests, domTrackersTests, gdprTests}; export const ALL_TESTS = [ trackTests, @@ -18,4 +19,5 @@ export const ALL_TESTS = [ remoteSettingsTests, bundleCompatTests, domTrackersTests, + gdprTests, ]; diff --git a/tests/browser/client/suites/gdpr.js b/tests/browser/client/suites/gdpr.js new file mode 100644 index 00000000..4ef8e64f --- /dev/null +++ b/tests/browser/client/suites/gdpr.js @@ -0,0 +1,71 @@ +/* global chai, sinon */ + +const { expect } = chai; +import { randName, clearAllLibInstances, clearMixpanelCookies } from "../utils"; + +export function gdprTests(mixpanel) { + describe(`opt-out status`, function() { + let token, optInOutKey; + + beforeEach(() => { + token = randName(); + optInOutKey = `__mp_opt_in_out_${token}`; + }); + + afterEach(async () => { + await clearAllLibInstances(mixpanel); + localStorage.removeItem(optInOutKey); + clearMixpanelCookies(); + }); + + function initInstance() { + mixpanel.init(token, { + opt_out_tracking_persistence_type: `localStorage`, + batch_requests: false, + }, `gdprtest`); + return mixpanel.gdprtest; + } + + function expectOptedOut(instance, expected) { + const callback = sinon.spy(); + instance.track(`event`, {}, callback); + + expect(instance.has_opted_out_tracking()).to.equal(expected); + expect(callback.calledWith(0)).to.equal(expected); + } + + it(`is opted out everywhere if the opt-out is only in a cookie`, () => { + const instance = initInstance(); + document.cookie = `${optInOutKey}=0; path=/`; + + expectOptedOut(instance, true); + }); + + it(`is opted in everywhere if localStorage holds an opt-in over a cookie opt-out`, () => { + const instance = initInstance(); + document.cookie = `${optInOutKey}=0; path=/`; + localStorage.setItem(optInOutKey, `1`); + + expectOptedOut(instance, false); + }); + + it(`moves a cookie opt-out into localStorage on init`, () => { + document.cookie = `${optInOutKey}=0; path=/`; + const instance = initInstance(); + + expect(localStorage.getItem(optInOutKey)).to.equal(`0`); + expect(document.cookie).to.not.contain(optInOutKey); + expectOptedOut(instance, true); + }); + + it(`moves a cookie opt-in into localStorage on init`, () => { + document.cookie = `${optInOutKey}=1; path=/`; + const instance = initInstance(); + + expect(localStorage.getItem(optInOutKey)).to.equal(`1`); + expect(document.cookie).to.not.contain(optInOutKey); + expect(instance.has_opted_in_tracking()).to.equal(true); + expectOptedOut(instance, false); + }); + }); +} diff --git a/tests/unit/gdpr-instance.js b/tests/unit/gdpr-instance.js new file mode 100644 index 00000000..0b70bb7e --- /dev/null +++ b/tests/unit/gdpr-instance.js @@ -0,0 +1,72 @@ +import { expect } from 'chai'; +import path from 'path'; +import sinon from 'sinon'; + +import jsdomSetup from './jsdom-setup'; + +const TOKEN = `gdpr-instance-token`; +const SRC_DIR = path.resolve(__dirname, `../../src`); + +// the other opt-out status cases are browser tests (tests/browser/client/suites/gdpr.js); these +// need the cached localStorage probe re-run, which the browser suite can't reach +describe(`opt-out status on a Mixpanel instance`, function() { + let mixpanel, utils, gdpr; + + // registered before jsdomSetup so it runs before the jsdom window is torn down + afterEach(function() { + sinon.restore(); + }); + + jsdomSetup({ + beforeCallback: () => { + // every src module must bind to this test's jsdom window and start with a fresh localStorage probe + Object.keys(require.cache) + .filter(modulePath => modulePath.startsWith(SRC_DIR)) + .forEach(modulePath => delete require.cache[modulePath]); + const {init_as_module} = require(`../../src/mixpanel-core`); + const {loadNoop} = require(`../../src/loaders/bundle-loaders`); + mixpanel = init_as_module(loadNoop); + utils = require(`../../src/utils`); + gdpr = require(`../../src/gdpr-utils`); + window.localStorage.clear(); + }, + }); + + function initInstance() { + return mixpanel.init(TOKEN, { + opt_out_tracking_persistence_type: `localStorage`, + batch_requests: false, + }, `gdpr_instance`); + } + + function makeLocalStorageWritesFail() { + sinon.stub(window.Storage.prototype, `setItem`).throws(new Error(`QuotaExceededError`)); + utils.localStorageSupported(window.localStorage, true); + } + + function expectOptedOut(instance, expected) { + const callback = sinon.spy(); + instance.track(`event`, {}, callback); + + expect(instance.has_opted_out_tracking()).to.equal(expected); + expect(callback.calledWith(0)).to.equal(expected); + } + + it(`should be opted out everywhere if localStorage rejects writes but holds an opt-out`, function() { + const instance = initInstance(); + gdpr.optOut(TOKEN, {persistenceType: `localStorage`}); + makeLocalStorageWritesFail(); + + expectOptedOut(instance, true); + }); + + it(`should be opted out everywhere if localStorage rejects writes and opt_out_tracking() writes the cookie`, function() { + const instance = initInstance(); + gdpr.optIn(TOKEN, {persistenceType: `localStorage`}); + makeLocalStorageWritesFail(); + instance.opt_out_tracking(); + + expect(document.cookie).to.contain(`__mp_opt_in_out_${TOKEN}=0`); + expectOptedOut(instance, true); + }); +}); diff --git a/tests/unit/gdpr-utils.js b/tests/unit/gdpr-utils.js index 18aa8878..be5d04ed 100644 --- a/tests/unit/gdpr-utils.js +++ b/tests/unit/gdpr-utils.js @@ -472,327 +472,130 @@ describe(`GDPR utils`, function() { }); }); - describe(`addOptOutCheckMixpanelLib`, function() { - const trackEventName = `єνєηт`; - const trackProperties = {'𝖕𝖗𝖔𝖕𝖊𝖗𝖙𝖞': `𝓿𝓪𝓵𝓾𝓮`}; - let getConfig, track, mixpanelLib; - - function setupMocks(getConfigFunc, options) { - getConfig = sinon.spy(name => getConfigFunc()[name]); - track = sinon.spy(); - mixpanelLib = { - get_config: getConfig, - track: gdpr.addOptOutCheckMixpanelLib(track, options), - }; + describe(`getOptOutCheckPersistenceType`, function() { + function makeLocalStorageWritesFail() { + sinon.stub(window.Storage.prototype, `setItem`).throws(new Error(`QuotaExceededError`)); } - forPersistenceTypes(function(persistenceType) { - it(`should call the wrapped method if the user is neither opted in or opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - - mixpanelLib.track(trackEventName, trackProperties); - - expect(track.calledOnceWith(trackEventName, trackProperties)).to.be.true; - }); - }); - - it(`should call the wrapped method if the user is opted in`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - - gdpr.optIn(token, {persistenceType}); - mixpanelLib.track(trackEventName, trackProperties); - - expect(track.calledOnceWith(trackEventName, trackProperties)).to.be.true; - }); - }); - - it(`should not call the wrapped method if the user is opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - - gdpr.optOut(token, {persistenceType}); - mixpanelLib.track(trackEventName, trackProperties); - - expect(track.notCalled).to.be.true; - }); - }); - - it(`should not invoke the callback directly if the user is neither opted in or opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - const callback = sinon.spy(); - - mixpanelLib.track(trackEventName, trackProperties, callback); - - expect(callback.notCalled).to.be.true; - }); - }); - - it(`should not invoke the callback directly if the user is opted in`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - const callback = sinon.spy(); - - gdpr.optIn(token, {persistenceType}); - mixpanelLib.track(trackEventName, trackProperties, callback); - - expect(callback.notCalled).to.be.true; - }); - }); - - it(`should invoke the callback directly if the user is opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - const callback = sinon.spy(); - - gdpr.optOut(token, {persistenceType}); - mixpanelLib.track(trackEventName, trackProperties, callback); - - expect(callback.calledOnceWith(0)).to.be.true; - }); - }); - - it(`should call the wrapped method if there is no token available`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token: null, opt_out_tracking_persistence_type: persistenceType})); - - gdpr.optIn(token, {persistenceType}); - mixpanelLib.track(trackEventName, trackProperties); - - expect(track.calledOnceWith(trackEventName, trackProperties)).to.be.true; - }); - }); - - it(`should call the wrapped method if an unexpected error occurs`, function() { - TOKENS.forEach(token => { - setupMocks(() => { - throw new Error(`Unexpected error!`); - }); - - gdpr.optIn(token, {persistenceType}); - mixpanelLib.track(trackEventName, trackProperties); - - expect(track.calledOnceWith(trackEventName, trackProperties)).to.be.true; - }); - }); - - it(`should allow use of a custom "persistence prefix" string`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({ - token, - opt_out_tracking_persistence_type: persistenceType, - opt_out_tracking_cookie_prefix: CUSTOM_PERSISTENCE_PREFIX, - })); - - gdpr.optOut(token, {persistenceType, persistencePrefix: CUSTOM_PERSISTENCE_PREFIX}); - mixpanelLib.track(trackEventName, trackProperties); - - expect(track.notCalled).to.be.true; - - gdpr.optIn(token, {persistenceType}); - mixpanelLib.track(trackEventName, trackProperties); - - expect(track.notCalled).to.be.true; + afterEach(function() { + if (window.Storage.prototype.setItem.restore) { + window.Storage.prototype.setItem.restore(); + } + }); - gdpr.optIn(token, {persistenceType, persistencePrefix: CUSTOM_PERSISTENCE_PREFIX}); - mixpanelLib.track(trackEventName, trackProperties); + it(`should read the cookie if that is the configured persistence type`, function() { + TOKENS.forEach(token => { + gdpr.optOut(token, {persistenceType: `localStorage`}); - expect(track.calledOnceWith(trackEventName, trackProperties)).to.be.true; - }); + expect(gdpr.getOptOutCheckPersistenceType(token, `cookie`)).to.equal(`cookie`); }); }); - describe(`with localStorage configured`, function() { - function trackWithLocalStorageConfigured(token) { - setupMocks(() => ({token, opt_out_tracking_persistence_type: `localStorage`})); - mixpanelLib.track(trackEventName, trackProperties); - } - - function makeLocalStorageWritesFail() { - sinon.stub(window.Storage.prototype, `setItem`).throws(new Error(`QuotaExceededError`)); - } + it(`should read the cookie if the flag is only in a cookie`, function() { + TOKENS.forEach(token => { + gdpr.optOut(token, {persistenceType: `cookie`}); - afterEach(function() { - if (window.Storage.prototype.setItem.restore) { - window.Storage.prototype.setItem.restore(); - } + expect(gdpr.getOptOutCheckPersistenceType(token, `localStorage`)).to.equal(`cookie`); }); + }); - it(`should not call the wrapped method if the opt-out is only in a cookie`, function() { - TOKENS.forEach(token => { - gdpr.optOut(token, {persistenceType: `cookie`}); - trackWithLocalStorageConfigured(token); + it(`should read usable localStorage over a cookie if both hold a flag`, function() { + TOKENS.forEach(token => { + gdpr.optOut(token, {persistenceType: `cookie`}); + gdpr.optIn(token, {persistenceType: `localStorage`}); - expect(track.notCalled).to.be.true; - }); + expect(gdpr.getOptOutCheckPersistenceType(token, `localStorage`)).to.equal(`localStorage`); }); + }); - it(`should call the wrapped method if usable localStorage holds an opt-in over a cookie opt-out`, function() { - TOKENS.forEach(token => { - gdpr.optOut(token, {persistenceType: `cookie`}); - gdpr.optIn(token, {persistenceType: `localStorage`}); - trackWithLocalStorageConfigured(token); + it(`should read localStorage if it rejects writes but holds the only flag`, function() { + TOKENS.forEach(token => gdpr.optOut(token, {persistenceType: `localStorage`})); + makeLocalStorageWritesFail(); - expect(track.calledOnceWith(trackEventName, trackProperties)).to.be.true; - }); + TOKENS.forEach(token => { + expect(gdpr.getOptOutCheckPersistenceType(token, `localStorage`)).to.equal(`localStorage`); }); + }); - it(`should not call the wrapped method if localStorage rejects writes but holds an opt-out`, function() { - TOKENS.forEach(token => gdpr.optOut(token, {persistenceType: `localStorage`})); - makeLocalStorageWritesFail(); + it(`should read the cookie over localStorage if localStorage rejects writes`, function() { + TOKENS.forEach(token => gdpr.optIn(token, {persistenceType: `localStorage`})); + makeLocalStorageWritesFail(); - TOKENS.forEach(token => { - trackWithLocalStorageConfigured(token); + TOKENS.forEach(token => { + gdpr.optOut(token, {persistenceType: `cookie`}); - expect(track.notCalled).to.be.true; - }); + expect(gdpr.getOptOutCheckPersistenceType(token, `localStorage`)).to.equal(`cookie`); }); + }); - it(`should not call the wrapped method if localStorage rejects writes and the cookie holds a newer opt-out`, function() { - TOKENS.forEach(token => gdpr.optIn(token, {persistenceType: `localStorage`})); - makeLocalStorageWritesFail(); - - TOKENS.forEach(token => { - gdpr.optOut(token, {persistenceType: `cookie`}); - trackWithLocalStorageConfigured(token); + it(`should use a custom "persistence prefix" string`, function() { + TOKENS.forEach(token => { + gdpr.optOut(token, {persistenceType: `cookie`, persistencePrefix: CUSTOM_PERSISTENCE_PREFIX}); + gdpr.optIn(token, {persistenceType: `localStorage`}); - expect(track.notCalled).to.be.true; - }); + expect(gdpr.getOptOutCheckPersistenceType(token, `localStorage`, CUSTOM_PERSISTENCE_PREFIX)).to.equal(`cookie`); }); }); }); - describe(`addOptOutCheckMixpanelPeople`, function() { - const setPropertyName = '𝖕𝖗𝖔𝖕𝖊𝖗𝖙𝖞'; - const setPropertyValue = `𝓿𝓪𝓵𝓾𝓮`; - let getConfig, set, mixpanelPeople; - - function setupMocks(getConfigFunc, options) { - getConfig = sinon.spy(name => getConfigFunc()[name]); - set = sinon.spy(); - mixpanelPeople = { - _get_config: getConfig, - set: gdpr.addOptOutCheckMixpanelPeople(set, options), - }; - } - - forPersistenceTypes(function(persistenceType) { - it(`should call the wrapped method if the user is neither opted in or opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - - mixpanelPeople.set(setPropertyName, setPropertyValue); - - expect(set.calledOnceWith(setPropertyName, setPropertyValue)).to.be.true; - }); - }); - - it(`should call the wrapped method if the user is opted in`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); + [ + {wrapperName: `addOptOutCheckMixpanelLib`, makeOwner: mixpanelInstance => mixpanelInstance}, + {wrapperName: `addOptOutCheckMixpanelPeople`, makeOwner: mixpanelInstance => ({_mixpanel: mixpanelInstance})}, + {wrapperName: `addOptOutCheckMixpanelGroup`, makeOwner: mixpanelInstance => ({_mixpanel: mixpanelInstance})}, + {wrapperName: `addOptOutCheckSessionRecording`, makeOwner: mixpanelInstance => ({_mixpanel: mixpanelInstance})}, + ].forEach(function({wrapperName, makeOwner}) { + describe(wrapperName, function() { + const eventName = `єνєηт`; + const eventProperties = {'𝖕𝖗𝖔𝖕𝖊𝖗𝖙𝖞': `𝓿𝓪𝓵𝓾𝓮`}; + let wrappedMethod, owner; + + function setupMocks(hasOptedOutTracking) { + wrappedMethod = sinon.stub().returns(`result`); + owner = makeOwner({has_opted_out_tracking: hasOptedOutTracking}); + owner.method = gdpr[wrapperName](wrappedMethod); + } - gdpr.optIn(token, {persistenceType}); - mixpanelPeople.set(setPropertyName, setPropertyValue); + it(`should call the wrapped method if the user is not opted out`, function() { + setupMocks(() => false); - expect(set.calledOnceWith(setPropertyName, setPropertyValue)).to.be.true; - }); + expect(owner.method(eventName, eventProperties)).to.equal(`result`); + expect(wrappedMethod.calledOnceWith(eventName, eventProperties)).to.be.true; + expect(wrappedMethod.calledOn(owner)).to.be.true; }); it(`should not call the wrapped method if the user is opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); + setupMocks(() => true); - gdpr.optOut(token, {persistenceType}); - mixpanelPeople.set(setPropertyName, setPropertyValue); - - expect(set.notCalled).to.be.true; - }); + expect(owner.method(eventName, eventProperties)).to.be.undefined; + expect(wrappedMethod.notCalled).to.be.true; }); - it(`should not invoke the callback directly if the user is neither opted in or opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - const callback = sinon.spy(); + it(`should not invoke the callback directly if the user is not opted out`, function() { + setupMocks(() => false); + const callback = sinon.spy(); - mixpanelPeople.set(setPropertyName, setPropertyValue, callback); + owner.method(eventName, eventProperties, callback); - expect(callback.notCalled).to.be.true; - }); - }); - - it(`should not invoke the callback directly if the user is opted in`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - const callback = sinon.spy(); - - gdpr.optIn(token, {persistenceType}); - mixpanelPeople.set(setPropertyName, setPropertyValue, callback); - - expect(callback.notCalled).to.be.true; - }); + expect(callback.notCalled).to.be.true; }); it(`should invoke the callback directly if the user is opted out`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token, opt_out_tracking_persistence_type: persistenceType})); - const callback = sinon.spy(); + setupMocks(() => true); + const callback = sinon.spy(); - gdpr.optOut(token, {persistenceType}); - mixpanelPeople.set(setPropertyName, setPropertyValue, callback); + owner.method(eventName, eventProperties, callback); - expect(callback.calledOnceWith(0)).to.be.true; - }); - }); - - it(`should call the wrapped method if there is no token available`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({token: null, opt_out_tracking_persistence_type: persistenceType})); - - gdpr.optIn(token, {persistenceType}); - mixpanelPeople.set(setPropertyName, setPropertyValue); - - expect(set.calledOnceWith(setPropertyName, setPropertyValue)).to.be.true; - }); + expect(callback.calledOnceWith(0)).to.be.true; }); it(`should call the wrapped method if an unexpected error occurs`, function() { - TOKENS.forEach(token => { - setupMocks(() => { - throw new Error(`Unexpected error!`); - }); - - gdpr.optIn(token, {persistenceType}); - mixpanelPeople.set(setPropertyName, setPropertyValue); - - expect(set.calledOnceWith(setPropertyName, setPropertyValue)).to.be.true; + setupMocks(() => { + throw new Error(`Unexpected error!`); }); - }); - it(`should allow use of a custom "persistence prefix" string`, function() { - TOKENS.forEach(token => { - setupMocks(() => ({ - token, - opt_out_tracking_persistence_type: persistenceType, - opt_out_tracking_cookie_prefix: CUSTOM_PERSISTENCE_PREFIX, - })); - - gdpr.optOut(token, {persistenceType, persistencePrefix: CUSTOM_PERSISTENCE_PREFIX}); - mixpanelPeople.set(setPropertyName, setPropertyValue); + owner.method(eventName, eventProperties); - expect(set.notCalled).to.be.true; - - gdpr.optIn(token, {persistenceType}); - mixpanelPeople.set(setPropertyName, setPropertyValue); - - expect(set.notCalled).to.be.true; - - gdpr.optIn(token, {persistenceType, persistencePrefix: CUSTOM_PERSISTENCE_PREFIX}); - mixpanelPeople.set(setPropertyName, setPropertyValue); - - expect(set.calledOnceWith(setPropertyName, setPropertyValue)).to.be.true; - }); + expect(wrappedMethod.calledOnceWith(eventName, eventProperties)).to.be.true; }); }); }); diff --git a/tests/unit/session-recording.js b/tests/unit/session-recording.js index 00e4b288..2f72fa3c 100644 --- a/tests/unit/session-recording.js +++ b/tests/unit/session-recording.js @@ -13,7 +13,6 @@ import { setupFakeIDB, idbGetItem, idbSetItem, idbCreateDatabase } from './test- import { MockMixpanelLib } from './test-utils/mock-mixpanel-lib'; import { setupRrwebMock } from './test-utils/mock-rrweb'; import { RECORD_ENQUEUE_THROTTLE_MS } from '../../src/recorder/utils'; -import { _ } from '../../src/utils'; describe(`SessionRecording`, function() { let replayId, @@ -412,12 +411,7 @@ describe(`SessionRecording`, function() { clock.tick(RECORD_ENQUEUE_THROTTLE_MS); await sessionRecording.__enqueuePromise; - sinon.stub(_.localStorage, `get`).callsFake(function (key) { - if (key === `__mp_opt_in_out_test-token`) { - return `0`; - } - return null; - }); + sinon.stub(mockMixpanelInstance, `has_opted_out_tracking`).returns(true); clock.tick(1000); mockRrweb.emit(EventType.IncrementalSnapshot, IncrementalSource.MouseInteraction); diff --git a/tests/unit/test-utils/mock-mixpanel-lib.js b/tests/unit/test-utils/mock-mixpanel-lib.js index dbc6b183..8972f89d 100644 --- a/tests/unit/test-utils/mock-mixpanel-lib.js +++ b/tests/unit/test-utils/mock-mixpanel-lib.js @@ -46,4 +46,8 @@ export class MockMixpanelLib { get_tab_id () { return `test-tab-id`; } + + has_opted_out_tracking() { + return false; + } } From da727684952b973176ba1a7746d3570d8dd0a2c4 Mon Sep 17 00:00:00 2001 From: Udit Malik <256210184+awakebutstillinbed@users.noreply.github.com> Date: Wed, 14 Oct 2026 17:49:20 +0000 Subject: [PATCH 03/13] refactoring init: split batching, device ID and storage setup into helpers (#502) --- src/mixpanel-core.js | 196 ++++++++++++++++++------------------ src/mixpanel-persistence.js | 8 +- 2 files changed, 105 insertions(+), 99 deletions(-) diff --git a/src/mixpanel-core.js b/src/mixpanel-core.js index b493faa8..f3df3fac 100644 --- a/src/mixpanel-core.js +++ b/src/mixpanel-core.js @@ -344,63 +344,18 @@ MixpanelLib.prototype._init = function(token, config, name) { }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && window.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - window.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - window.addEventListener('visibilitychange', function() { - if (document['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } - } + this._init_batching(); this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); this.unpersisted_superprops = {}; this._gdpr_init(); - var uuid = _.UUID(); + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._init_device_id(); } this.flags = new FeatureFlagManager({ @@ -433,6 +388,99 @@ MixpanelLib.prototype._init = function(token, config, name) { this.autocapture.init(); }; +MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + } + if (this.get_config('batch_autostart')) { + this.start_batch_senders(); + } + + if (sendBeacon && window.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + window.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + window.addEventListener('visibilitychange', function() { + if (document['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } +}; + +MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); +}; + /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. @@ -921,48 +969,6 @@ MixpanelLib.prototype.get_batcher_configs = function() { return this._batcher_configs; }; -MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } -}; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -1781,11 +1787,7 @@ MixpanelLib.prototype.reset = function() { this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._init_device_id(); this._check_and_start_session_recording(); this.flags.reset(); }; diff --git a/src/mixpanel-persistence.js b/src/mixpanel-persistence.js index d6ed4255..928233e6 100644 --- a/src/mixpanel-persistence.js +++ b/src/mixpanel-persistence.js @@ -55,10 +55,14 @@ var MixpanelPersistence = function(config) { var storage_type = config['persistence']; if (storage_type !== 'cookie' && storage_type !== 'localStorage') { console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; + config['persistence'] = 'cookie'; } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { + this._open_storage(config); +}; + +MixpanelPersistence.prototype._open_storage = function(config) { + if (config['persistence'] === 'localStorage' && _.localStorage.is_supported()) { this.storage = _.localStorage; } else { this.storage = _.cookie; From 2de4aaaaa3fc5a10c2deaf539b65d6236b66fc9e Mon Sep 17 00:00:00 2001 From: Udit Malik <256210184+awakebutstillinbed@users.noreply.github.com> Date: Wed, 14 Oct 2026 17:57:56 +0000 Subject: [PATCH 04/13] ci: run PR checks on stacked PRs (#500) --- .github/workflows/integration-tests.yml | 1 - .github/workflows/openfeature-provider-tests.yml | 1 - .github/workflows/unit-tests.yml | 1 - 3 files changed, 3 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 20f17c69..cfd4fb4c 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -4,7 +4,6 @@ on: push: branches: [master, '**/*-rc'] pull_request: - branches: [master, '**/*-rc'] jobs: build: diff --git a/.github/workflows/openfeature-provider-tests.yml b/.github/workflows/openfeature-provider-tests.yml index 388ab8b2..8918ed75 100644 --- a/.github/workflows/openfeature-provider-tests.yml +++ b/.github/workflows/openfeature-provider-tests.yml @@ -4,7 +4,6 @@ on: push: branches: [master] pull_request: - branches: [master] jobs: test: diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index d73889f3..669ede9a 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -4,7 +4,6 @@ on: push: branches: [master, '**/*-rc'] pull_request: - branches: [master, '**/*-rc'] jobs: build: From ab646e3df7b6219b39a04f25d0ad85a5bd2601cd Mon Sep 17 00:00:00 2001 From: Udit Malik Date: Thu, 15 Oct 2026 09:58:43 -0700 Subject: [PATCH 05/13] Time out the unit test job after 15 minutes (#511) --- .github/workflows/unit-tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 669ede9a..7821a73a 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -8,6 +8,8 @@ on: jobs: build: runs-on: ubuntu-latest + # a leaked timer or handle keeps mocha running; fail instead of hanging for hours + timeout-minutes: 15 permissions: contents: read From fa420ea993fbf810820b6a51505b84d2818ee6a3 Mon Sep 17 00:00:00 2001 From: Udit Malik Date: Thu, 22 Oct 2026 08:46:01 -0700 Subject: [PATCH 06/13] Cancel a PR's older integration run when it gets a new push (#517) Co-authored-by: Udit Malik <256210184+awakebutstillinbed@users.noreply.github.com> --- .github/workflows/integration-tests.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index cfd4fb4c..6dfcd45e 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -5,9 +5,19 @@ on: branches: [master, '**/*-rc'] pull_request: +# A new push to a PR cancels its older run, which frees the Sauce tunnels and sessions it holds. +# Pushes to master and release branches each get their own group, so none of their runs is +# cancelled or skipped. +concurrency: + group: integration-${{ github.event_name == 'pull_request' && github.ref || github.run_id }} + cancel-in-progress: true + jobs: build: runs-on: ubuntu-latest + # Passing jobs take up to about an hour under load; a hung one would otherwise hold its Sauce + # tunnel for GitHub's 6-hour default + timeout-minutes: 120 permissions: contents: read From ae592d5add77e60aab752425b565735317c933da Mon Sep 17 00:00:00 2001 From: "mixpanel-tal[bot]" <327755774+mixpanel-tal[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 14:05:12 +0000 Subject: [PATCH 07/13] Preserve whitespace-only text nodes in session recording mask fn (#518) The mask function blanked every whitespace-only text node before checking masking, so spaces between inline elements were dropped from recordings and replays showed words joined together. Made-with-Pi: true Model: claude-opus-5-5-vertex Co-authored-by: mixpanel-tal[bot] <327755774+mixpanel-tal[bot]@users.noreply.github.com> --- src/recorder/session-recording.js | 5 +++-- tests/unit/session-recording.js | 11 ++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/recorder/session-recording.js b/src/recorder/session-recording.js index 4b28ba36..e093a82e 100644 --- a/src/recorder/session-recording.js +++ b/src/recorder/session-recording.js @@ -587,9 +587,10 @@ SessionRecording.prototype._getRecordMinMs = function() { */ SessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) { return function(text, element) { - // prevent visual artifacts from random whitespace + // whitespace-only text has nothing to mask, and dropping it would join adjacent words + // (e.g. a space text node between two inline elements) if (!text.trim().length) { - return ''; + return text; } var shouldMask = true; diff --git a/tests/unit/session-recording.js b/tests/unit/session-recording.js index 2f72fa3c..39e9ab08 100644 --- a/tests/unit/session-recording.js +++ b/tests/unit/session-recording.js @@ -557,13 +557,14 @@ describe(`SessionRecording`, function() { reportErrorSpy.restore(); }); - it(`returns empty string for whitespace-only text`, function() { + it(`preserves whitespace-only text unmasked`, function() { const maskFn = sessionRecording._getMaskFn(shouldMaskFnStub, mockPrivacyConfig); - expect(maskFn(` `, mockElement)).to.equal(``); - expect(maskFn(`\t\t\t`, mockElement)).to.equal(``); - expect(maskFn(`\n\n`, mockElement)).to.equal(``); - expect(maskFn(` \n\t `, mockElement)).to.equal(``); + expect(maskFn(` `, mockElement)).to.equal(` `); + expect(maskFn(` `, mockElement)).to.equal(` `); + expect(maskFn(`\t\t\t`, mockElement)).to.equal(`\t\t\t`); + expect(maskFn(`\n\n`, mockElement)).to.equal(`\n\n`); + expect(maskFn(` \n\t `, mockElement)).to.equal(` \n\t `); expect(maskFn(``, mockElement)).to.equal(``); // shouldMaskFn should not be called for whitespace-only text From 9e1fb1f99262660506baacd9796eec9596a6cd3b Mon Sep 17 00:00:00 2001 From: Udit Malik Date: Tue, 27 Oct 2026 12:18:14 -0700 Subject: [PATCH 08/13] [PRP-1682] Move the opt-out logic into one ConsentManager, and add consent_mode 'require_consent' (#513) * Split gdpr-utils into the opt-out flag and the opt-out checks The opt-out flag storage and Do Not Track check move to opt-out-flag.js and the addOptOutCheck wrappers to consent-checks.js, unchanged. * Hold disabled persistence in a no-op storage backend Disabling persistence swaps in a backend that reads and writes nothing, instead of checking the disabled flag in load and save. Removal and the cookie/localStorage upgrade still use the real backend. * Move the opt-out logic into OptOutFlagConsent and add consent_mode createConsentManager picks the consent implementation from consent_mode ('opt_out' or 'opt_in'; unset, opt_out_tracking_by_default picks one). The _gdpr_* methods move out of the core into OptOutFlagConsent unchanged, which turns persistence off or on and deletes the user through functions the core passes in. consent_mode is fixed at init. * Ask the consent implementation whether the opt-out wrappers block a call The wrappers ask the core's _tracking_blocked, which asks the instance's consent implementation. A core without it answers through has_opted_out_tracking(), as before. * Trigger CI * One ConsentManager: consent_mode maps the decision to a state, and services ask what it allows - ConsentManager replaces OptOutFlagConsent and the factory. A mode is a row mapping the decision (none, opted in, opted out, objected/Do Not Track) to a state; each state says whether calls, sends, fetches and storage are allowed. - Under 'opt_out' and 'opt_in', an opt-out stops only the calls, as before; flags, sends and storage behave as they did. - The services take the manager as their consent gate and ask allows(): the request queue and replay registry before storing, flags before fetching or storing variants, replay before starting, the core before sending, fetching remote settings and minting a tab ID. - The recorder bundle asks the core's _consent_allows. * Keep persistence closed after an opt-out when the config changes Persistence tracks the disable_persistence config and consent closing separately. Before, an opt-out turned persistence off through the same flag set_config resets, so any set_config call after an opt-out saved the props to storage again. * Name the modes for what picks them, leave consent_mode to #510, and answer fixed capabilities without a read - The two modes are 'no_consent_required' and 'opt_out_by_default', picked by opt_out_tracking_by_default. The consent_mode config arrives with the modes that need it. - allows() answers a capability every reachable state agrees on without reading the decision, so only 'calls' reads storage under these modes: one read per call, as before. * Add consent_mode 'require_consent' with per-page decisions and stored-identifier purge consent_mode: 'require_consent' blocks storing and sending until opt_in_tracking, applies decisions per page, and on withdrawal deletes stored identifiers, queued batches, flag variants and replay data. Unset consent_mode keeps the legacy opt_out_tracking_by_default behaviour. * Apply a decision on the page even if storing it fails, and recheck consent when the recorder loads _decide() takes the new state from the decision, with Do Not Track still winning, instead of reading it back, as Piano and PostHog do. The recorder load callback asks consent again, so a withdrawal during the load starts nothing. The before-consent browser checks allow opening the replay database for cleanup, which clearAllStorage() leaves behind. * Drop the duplicate opt_out_by_default mode, and give start/stop and the calls-only state one name each opt_out_tracking_by_default no longer picks its own mode row, identical to 'no_consent_required'; init() reads it when consent_mode is unset. The state an opt-out leaves is 'calls_stopped', apart from the 'opted_out' decision. The core's start and stop are _start_tracking/_stop_tracking/_start_services, and the wrappers ask _consent_allows('calls') in place of _tracking_blocked. * Split the consent manager's two decision paths into LegacyDecisions and PageDecisions consent-modes.js holds the tables, mode resolution and the shared Do Not Track and flag reading. LegacyDecisions keeps 'no_consent_required' as the opt_out_* configs have always worked; PageDecisions keeps 'require_consent' decisions with the persistence and applies them per page. ConsentManager picks one by mode and answers allows(), with no branching on the mode. * Name the decision classes OptOutFlagDecisions and ConsentDecisions * Say what each consent state means * Ask the consent gate whether services may write to browser storage, for consent and disable_persistence * Unit test resolveConsentMode directly * Say what the decision constructors and init() each do * Open persistence through open(), from a closed start, at construction too * Clear stored flags and replay through IDBStorageWrapper, which can skip a missing database * Hand the recorder's consent gate to the registry and recordings instead of building it from the instance * Check consent at the top of each public method instead of wrapping it * Fix comments that no longer match the code * Give fake-indexeddb back the DOMException jsdom-global's cleanup deletes * Leave version-0 databases out of the IDB test's listing, as browsers do * Hand the registry's consent gate to the recordings it recovers * Keep unsent replay on the device after a withdrawal instead of deleting it Withdrawal stops replay the usual way; its upload is refused by the consent gate. Replay saved on earlier pages stays in IndexedDB and is only uploaded once the recorder loads again, which needs consent. Removes discardRecording, deleteStoredRecordings and IDBStorageWrapper.deleteMatching; the flags cleanup removes its one key. * Ask the consent gate by named methods instead of allows(capability) ConsentGate is now allowsApiCalls, allowsSending, allowsFetching, allowsStoring and allowsPersistence, all built by buildConsentGate for the ConsentManager, the recorder bundle's gate and the open gate. The fail-open try/catch moves into allowsApiCalls, replacing allowsCall. The 'calls' capability and 'calls_stopped' state become 'api_calls' and 'api_calls_stopped'. * Require a consent gate instead of defaulting to one that allows everything Every production constructor already passes a gate, so OPEN_CONSENT_GATE was only reached by tests. A service built without a gate now fails instead of storing and sending without consent. Tests pass a shared ALLOW_ALL_CONSENT_GATE, and the request-queue consent tests use buildConsentGate. * Leave the registry entry when replay stops without persistence Stopping replay without persistence deleted this tab's registry entry but left its unsent events in IndexedDB, where nothing would upload or remove them. The entry now stays, so those events wait for a load that allows them like any other tab's, and the tab ID no longer has to outlive the stop. * Let flag persistence answer whether a save is allowed FeatureFlagPersistence.save() already skips the write when the consent gate doesn't allow persistence, so the fetch handler no longer asks too. * Update the replay and people unit tests for the required gate and the kept registry entry The people test from 2.85.0-rc needs the mock instance's gate, and the recorder test expected the registry entry to be deleted without persistence. The recovered-recording gate test now flushes a later batch, so it fails without the gate. * Clear persisted flag variants without creating the database, whether or not storing is allowed clear() opens only a database the device already has, so clearIfStored() goes. It no longer skips when persistence isn't allowed: after a withdrawal under require_consent it skipped, and left the variants and their distinct_id on the device. Without saved variants, init no longer creates an empty mixpanelFlagsDb. * Pass resolveConsentMode and readDecision values instead of getConfigFunc resolveConsentMode takes the consent_mode value, and readDecision takes whether Do Not Track applies. Each decision class works that out from the call's ignore_dnt option and the config, so dntOn goes. The flag is still read only when Do Not Track is off. * Inject the consent gate into people and group instead of reaching through the instance The mock instance no longer needs a gate of its own; the people test passes one in. * Drop the consent checks from track_pageview and track_with_groups Both only build properties and then call track(), which makes the same check first, so the return value and callback are unchanged. * Pass the stored flag to readDecision as a value * Call each stopped method's own callback instead of the last argument Each method works out its callback before the consent check and calls it with 0; flushEventsWithOptOut checks consent itself instead of passing _flushEvents an extra opt-out callback. Removes skipStoppedCall. * Read the stored decision on the first state check instead of in the constructor * Update tests for the lazy decision read, the unopened flags database and SDK logs in replay * Move consentGateFor into consent-gate.js * Share one Do Not Track check between the decision classes * Skip clearing persisted flag variants when persistence is disabled clear() opened an existing mixpanelFlagsDb under disable_persistence, failing the disable_persistence legacy tests. The consent purge clears through a persistence with no disabled check, so a withdrawal still removes the variants. * Check stopped-method callbacks with _.isFunction * Port the GDPR and disable_persistence QUnit tests to the browser suite Moves the opt-in/out matrix for track and the people methods, the persistence-on-opt-out tests for cookie and localStorage, and the disable_persistence storage and tab ID tests. The cross-subdomain and secure cookie tests stay in QUnit: they need a dotted hostname or https, which the browser suite's localhost doesn't have. The storage test now seeds mixpanelFlagsDb so an open of an existing database fails it. --------- Co-authored-by: Udit Malik <256210184+awakebutstillinbed@users.noreply.github.com> --- doc/typedoc-plugin.mjs | 8 +- src/consent-decisions.js | 216 +++++ src/consent-gate.js | 75 ++ src/consent-manager.js | 143 +++ src/consent-modes.js | 96 ++ src/flags/flags-persistence.js | 17 +- src/flags/index.js | 19 +- src/index.d.ts | 10 + src/mixpanel-core.js | 537 +++++++----- src/mixpanel-group.js | 80 +- src/mixpanel-people.js | 104 ++- src/mixpanel-persistence.js | 106 ++- src/opt-out-flag-decisions.js | 217 +++++ src/{gdpr-utils.js => opt-out-flag.js} | 117 +-- src/recorder-manager.js | 15 +- src/recorder/recorder.js | 4 + src/recorder/recording-registry.js | 26 +- src/recorder/session-recording.js | 34 +- src/request-batcher.js | 3 +- src/request-queue.js | 31 +- src/storage/indexed-db.js | 62 +- tests/browser/client/index.js | 6 +- .../browser/client/suites/consentRequired.js | 223 +++++ .../client/suites/disablePersistence.js | 51 ++ tests/browser/client/suites/gdpr.js | 252 +++++- tests/browser/client/suites/recorder.js | 4 +- tests/browser/client/utils.js | 28 + tests/test.js | 827 ------------------ tests/unit/consent-gate.js | 82 ++ tests/unit/consent-manager.js | 407 +++++++++ tests/unit/consent-required.js | 498 +++++++++++ tests/unit/flags-persistence.js | 18 +- tests/unit/flags.js | 67 +- tests/unit/gdpr-instance.js | 15 +- tests/unit/indexed-db.js | 45 + tests/unit/mixpanel-people.js | 3 +- tests/unit/{gdpr-utils.js => opt-out-flag.js} | 66 +- tests/unit/recorder-manager.js | 7 +- tests/unit/recorder.js | 6 +- tests/unit/recording-registry.js | 53 +- tests/unit/request-batcher.js | 2 + tests/unit/request-queue.js | 42 + tests/unit/session-recording.js | 27 +- tests/unit/test-utils/consent-gate.js | 3 + tests/unit/test-utils/indexed-db.js | 5 + tests/unit/test-utils/mock-mixpanel-lib.js | 4 + 46 files changed, 3264 insertions(+), 1397 deletions(-) create mode 100644 src/consent-decisions.js create mode 100644 src/consent-gate.js create mode 100644 src/consent-manager.js create mode 100644 src/consent-modes.js create mode 100644 src/opt-out-flag-decisions.js rename src/{gdpr-utils.js => opt-out-flag.js} (73%) create mode 100644 tests/browser/client/suites/consentRequired.js create mode 100644 tests/browser/client/suites/disablePersistence.js create mode 100644 tests/unit/consent-gate.js create mode 100644 tests/unit/consent-manager.js create mode 100644 tests/unit/consent-required.js rename tests/unit/{gdpr-utils.js => opt-out-flag.js} (89%) create mode 100644 tests/unit/test-utils/consent-gate.js diff --git a/doc/typedoc-plugin.mjs b/doc/typedoc-plugin.mjs index 7c3de8e0..0b131d7a 100644 --- a/doc/typedoc-plugin.mjs +++ b/doc/typedoc-plugin.mjs @@ -4,8 +4,8 @@ // the (undocumented) fields of the interfaces in index.d.ts should stay // - `_`-prefixed parameters are internal and left out of signatures // - constructors aren't part of the API (instances come from mixpanel.init()) -// - methods wrapped in addOptOutCheck*() come out of TypeScript as properties with a function type; -// they're turned back into methods so they're listed with the other methods +// - a method that comes out of TypeScript as a property with a function type is turned back into a +// method, so it's listed with the other methods // - top-level functions and variables (the loaders' entry points, and index.d.ts's re-declarations of the // class methods as standalone functions) aren't part of this reference import { Converter, ReflectionKind } from 'typedoc'; @@ -35,8 +35,8 @@ export function load(app) { }); } -// methods have their comment on the signature; methods wrapped in addOptOutCheck*() are properties -// with a function type, whose comment sits on that type's signature +// methods have their comment on the signature; a property with a function type has it on that type's +// signature function hasComment(member) { const signatures = member.signatures || (member.type && member.type.declaration && member.type.declaration.signatures) || []; return Boolean(member.comment || signatures.some(signature => signature.comment)); diff --git a/src/consent-decisions.js b/src/consent-decisions.js new file mode 100644 index 00000000..5f2be3f4 --- /dev/null +++ b/src/consent-decisions.js @@ -0,0 +1,216 @@ +/** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ + +import { _, getLocalStorage } from './utils'; +import { OPT_IN_OUT_FLAG_PREFIX, doNotTrackApplies } from './opt-out-flag'; +import { + CONSENT_MODES, + CONSENT_STATES, + DECISION_NONE, + DECISION_OPTED_IN, + DECISION_OPTED_OUT, + DECISION_OBJECTED, + readDecision +} from './consent-modes'; + +/** + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ +var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; +}; + +// delete what an earlier page stored without consent +ConsentDecisions.prototype.init = function() { + this._reconcile(); +}; + +/** + * @returns {string} + */ +ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; + } + return this.appliedState; +}; + +/** + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; +}; + +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; +}; + +/** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ +ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); +}; + +ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); +}; + +ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); +}; + +/** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ +ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); + } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } +}; + +ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; +}; + +/** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ +ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); + } +}; + +/** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ +ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; + } + this._writeDecisionKey(this._decisionKey(), flag); +}; + +/** + * @param {string} key + * @param {string|null} value null to remove it + */ +ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); + } +}; + +// the store the persistence uses, chosen without the localStorage support probe, which writes a key +ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); +}; + +ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; +}; + +ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); +}; + +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ +ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); +}; + +/** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ +ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); +}; + +export { ConsentDecisions }; diff --git a/src/consent-gate.js b/src/consent-gate.js new file mode 100644 index 00000000..8149ef63 --- /dev/null +++ b/src/consent-gate.js @@ -0,0 +1,75 @@ +/** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + +import { console } from './utils'; + +/** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ +function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; +} + +/** + * The consent gate the recorder bundle builds when it starts, and hands to its services. The core + * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name, + * the bundle being built separately. A core without it only knows the opt-out, through + * has_opted_out_tracking(). + * @param {Object} mixpanelInstance + * @returns {ConsentGate} + */ +function consentGateFor(mixpanelInstance) { + return buildConsentGate( + function(capability) { + var consentAllows = mixpanelInstance['_consent_allows']; + if (typeof consentAllows === 'function') { + return !!consentAllows.call(mixpanelInstance, capability); + } + return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking(); + }, + function(key) { + return mixpanelInstance.get_config(key); + } + ); +} + +export { buildConsentGate, consentGateFor }; diff --git a/src/consent-manager.js b/src/consent-manager.js new file mode 100644 index 00000000..a23bd5bd --- /dev/null +++ b/src/consent-manager.js @@ -0,0 +1,143 @@ +/** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + +import { _ } from './utils'; +import { + CAPABILITIES, + CONSENT_MODES, + CONSENT_STATES, + CONSENT_MODE_NO_CONSENT_REQUIRED, + resolveConsentMode +} from './consent-modes'; +import { buildConsentGate } from './consent-gate'; +import { OptOutFlagDecisions } from './opt-out-flag-decisions'; +import { ConsentDecisions } from './consent-decisions'; + +/** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ +function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; + }); + if (same) { + answers[capability] = answer; + } + }); + return answers; +} + +/** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ +var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; +}; + +/** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ +ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; + } + return CONSENT_STATES[this.state()][capability]; +}; + +/** + * @returns {string} + */ +ConsentManager.prototype.state = function() { + return this.decisions.state(); +}; + +/** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ +ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; +}; + +/** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ +ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; +}; + +/** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ +ConsentManager.prototype.init = function() { + this.decisions.init(); +}; + +/** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); +}; + +/** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); +}; + +/** + * @param {Object} [options] opt_in_tracking() options + */ +ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); +}; + +/** + * @param {Object} [options] opt_out_tracking() options + */ +ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); +}; + +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); +}; + +export { ConsentManager }; diff --git a/src/consent-modes.js b/src/consent-modes.js new file mode 100644 index 00000000..cbd84a25 --- /dev/null +++ b/src/consent-modes.js @@ -0,0 +1,96 @@ +/** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + +import { console } from './utils'; + +/** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; +/** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + +/** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + +/** @const */ var DECISION_NONE = 'none'; +/** @const */ var DECISION_OPTED_IN = 'opted_in'; +/** @const */ var DECISION_OPTED_OUT = 'opted_out'; +// Do Not Track counts as an objection +/** @const */ var DECISION_OBJECTED = 'objected'; + +/** @const */ var STATE_FULL = 'full'; +/** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; +/** @const */ var STATE_BLOCKED = 'blocked'; + +/** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} +}; + +/** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ +/** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} +}; + +/** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ +function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; +} + +/** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ +function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; +} + +export { + CONSENT_MODE_NO_CONSENT_REQUIRED, + CONSENT_MODE_REQUIRE_CONSENT, + CAPABILITIES, + DECISION_NONE, + DECISION_OPTED_IN, + DECISION_OPTED_OUT, + DECISION_OBJECTED, + CONSENT_STATES, + CONSENT_MODES, + resolveConsentMode, + readDecision +}; diff --git a/src/flags/flags-persistence.js b/src/flags/flags-persistence.js index b399d4a4..a273d88b 100644 --- a/src/flags/flags-persistence.js +++ b/src/flags/flags-persistence.js @@ -160,17 +160,24 @@ FeatureFlagPersistence.prototype.save = function(context, flagsMap, pendingFirst }); }; +/** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger.log('No persisted variants cleared from IndexedDB:', error); }); }; -export { FeatureFlagPersistence, VariantLookupPolicy, FLAGS_STORE_NAME, PERSISTED_VARIANTS_KEY_PREFIX }; +export { FeatureFlagPersistence, VariantLookupPolicy, FLAGS_STORE_NAME, MIXPANEL_FLAGS_DB_NAME, PERSISTED_VARIANTS_KEY_PREFIX }; diff --git a/src/flags/index.js b/src/flags/index.js index d72de23b..26b689c5 100644 --- a/src/flags/index.js +++ b/src/flags/index.js @@ -65,11 +65,15 @@ var FeatureFlagManager = function(initOptions) { this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -85,7 +89,7 @@ FeatureFlagManager.prototype.init = function() { this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -153,7 +157,7 @@ FeatureFlagManager.prototype.getConfig = function(key) { }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -184,6 +188,14 @@ FeatureFlagManager.prototype.areFlagsReady = function() { return !!this.flags; }; +/** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ +FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); +}; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -479,6 +491,9 @@ FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) { }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); diff --git a/src/index.d.ts b/src/index.d.ts index 6c9c4660..a0156e5f 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -10,6 +10,15 @@ export type Query = string | Element | Element[]; export type RemoteSettingType = "disabled" | "fallback" | "strict"; +/** + * What the SDK does before the visitor decides. "no_consent_required" tracks until + * opt_out_tracking(). "require_consent" stores and sends nothing until opt_in_tracking(); with it, + * opt_out_tracking_persistence_type and opt_out_persistence_by_default are ignored, and + * opt_out_tracking_cookie_prefix still names the stored flag. Unset means "no_consent_required"; + * opt_out_tracking_by_default applies only when consent_mode is unset. + */ +export type ConsentMode = "no_consent_required" | "require_consent" | null; + export interface EventTriggerProps { percentage: number; @@ -267,6 +276,7 @@ export interface Config { opt_out_persistence_by_default: boolean; opt_out_tracking_persistence_type: Persistence; opt_out_tracking_cookie_prefix: string; + consent_mode: ConsentMode; inapp_protocol: string; inapp_link_new_window: boolean; ignore_dnt: boolean; diff --git a/src/mixpanel-core.js b/src/mixpanel-core.js index f3df3fac..bb1d9262 100644 --- a/src/mixpanel-core.js +++ b/src/mixpanel-core.js @@ -14,15 +14,7 @@ import { PEOPLE_DISTINCT_ID_KEY, ALIAS_ID_KEY } from './mixpanel-persistence'; -import { - optIn, - optOut, - hasOptedIn, - hasOptedOut, - clearOptInOut, - addOptOutCheckMixpanelLib, - getOptOutCheckPersistenceType -} from './gdpr-utils'; +import { ConsentManager } from './consent-manager'; /* * Mixpanel JS Library @@ -140,6 +132,7 @@ var DEFAULT_CONFIG = { 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -206,26 +199,9 @@ var create_mplib = function(token, config, name) { instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -320,6 +296,19 @@ MixpanelLib.prototype._init = function(token, config, name) { 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -327,6 +316,7 @@ MixpanelLib.prototype._init = function(token, config, name) { getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -345,18 +335,15 @@ MixpanelLib.prototype._init = function(token, config, name) { this._remote_settings_strict_disabled = false; this.request_batchers = {}; - this._init_batching(); + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); + } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persistence - if (!this.get_distinct_id()) { - this._init_device_id(); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -366,12 +353,52 @@ MixpanelLib.prototype._init = function(token, config, name) { setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); +}; + +MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } +}; + +// the services that store or send on their own; at init, and again on an opt-in under 'require_consent' +MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -383,9 +410,63 @@ MixpanelLib.prototype._init = function(token, config, name) { } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } +}; - this.autocapture = new Autocapture(this); - this.autocapture.init(); +/** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ +MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); +}; + +/** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ +MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); +}; + +/** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ +MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); +}; + +MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); }; MixpanelLib.prototype._init_batching = function() { @@ -429,6 +510,7 @@ MixpanelLib.prototype._init_batching = function() { }, this), stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), usePersistence: true, + consentGate: this._consent, } ); }, this); @@ -438,39 +520,40 @@ MixpanelLib.prototype._init_batching = function() { people: batcher_for(batcher_configs.people), groups: batcher_for(batcher_configs.groups) }; + + if (sendBeacon && window.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + window.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + window.addEventListener('visibilitychange', function() { + if (document['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } } - if (this.get_config('batch_autostart')) { + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { this.start_batch_senders(); } - - if (sendBeacon && window.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - window.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - window.addEventListener('visibilitychange', function() { - if (document['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } }; MixpanelLib.prototype._init_device_id = function() { @@ -485,12 +568,16 @@ MixpanelLib.prototype._init_device_id = function() { * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ +MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); +}; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -521,9 +608,12 @@ MixpanelLib.prototype.get_tab_id = function () { return this.tab_id || null; }; -MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { +MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); -}); +}; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -613,7 +703,7 @@ MixpanelLib.prototype._dom_loaded = function() { this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -675,6 +765,15 @@ MixpanelLib.prototype._prepare_callback = function(callback, data) { MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -832,6 +931,10 @@ MixpanelLib.prototype._send_request = function(url, data, options, callback) { }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -1106,7 +1209,6 @@ MixpanelLib.prototype._track_or_batch = function(options, callback) { return request_enqueued_or_initiated && truncated_data; }; -MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -1131,7 +1233,17 @@ MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(event_name, properties, options, callback) { +MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -1143,10 +1255,6 @@ function(event_name, properties, options, callback) { } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -1237,9 +1345,8 @@ function(event_name, properties, options, callback) { } return ret; -}); +}; -MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -1255,7 +1362,13 @@ MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ -function(group_key, group_ids, callback) { +MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -1263,9 +1376,8 @@ function(group_key, group_ids, callback) { prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); -}); +}; -MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -1278,7 +1390,13 @@ MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -1292,9 +1410,8 @@ function(group_key, group_id, callback) { } } return this['people'].union(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -1307,7 +1424,13 @@ MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -1321,9 +1444,8 @@ function(group_key, group_id, callback) { } } return this['people'].remove(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -1337,7 +1459,7 @@ MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(event_name, properties, groups, callback) { +MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -1345,7 +1467,7 @@ function(event_name, properties, groups, callback) { } }); return this.track(event_name, tracking_props, callback); -}); +}; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -1372,13 +1494,12 @@ MixpanelLib.prototype.get_group = function (group_key, group_id) { var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; -MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -1424,7 +1545,7 @@ MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(properties, options) { +MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -1448,7 +1569,7 @@ function(properties, options) { } return this.track(event_name, event_properties); -}); +}; /** * Track clicks on a set of document elements. Selector must be a @@ -1711,6 +1832,10 @@ MixpanelLib.prototype._register_single = function(prop, value) { * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -1723,6 +1848,12 @@ MixpanelLib.prototype.identify = function( // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -1787,7 +1918,11 @@ MixpanelLib.prototype.reset = function() { this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - this._init_device_id(); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -1849,6 +1984,11 @@ MixpanelLib.prototype.get_distinct_id = function() { * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -1978,6 +2118,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -2029,6 +2174,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -2157,130 +2307,42 @@ MixpanelLib.prototype._event_is_disabled = function(event_name) { _.include(this.__disabled_events, event_name); }; -// perform some housekeeping around GDPR opt-in/out state -MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking({'persistence_type': 'localStorage'}) && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking({'persistence_type': 'localStorage'}) && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } +/** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ +MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ -MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; +MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; -// call a base gdpr function after constructing the appropriate token and options args -MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; - } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); -}; - -// check an opt-in/out status, reading the store that holds the flag unless options name one -MixpanelLib.prototype._gdpr_check_status = function(func, options) { - options = _.extend({ - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - var token = this.get_config('token'); - var persistence_type = options['persistence_type']; - if (!persistence_type) { - persistence_type = getOptOutCheckPersistenceType( - token, this.get_config('opt_out_tracking_persistence_type'), options['cookie_prefix'] - ); - } else if (!_.localStorage.is_supported()) { - persistence_type = 'cookie'; - } - - return func(token, { - persistenceType: persistence_type, - persistencePrefix: options['cookie_prefix'], - ignoreDnt: options['ignore_dnt'], - window: this.get_config('window') // used to override window during browser tests - }); +// delete the identified user's profile and charges, which the opt-out about to happen would block +MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); + } }; /** @@ -2302,6 +2364,10 @@ MixpanelLib.prototype._gdpr_check_status = function(func, options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -2316,12 +2382,7 @@ MixpanelLib.prototype._gdpr_check_status = function(func, options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -2339,6 +2400,10 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -2351,19 +2416,7 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -2375,13 +2428,15 @@ MixpanelLib.prototype.opt_out_tracking = function(options) { * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_check_status(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -2393,13 +2448,16 @@ MixpanelLib.prototype.has_opted_in_tracking = function(options) { * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_check_status(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -2418,6 +2476,11 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -2429,12 +2492,7 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -2498,6 +2556,7 @@ MixpanelLibProto['toString'] = MixpanelLibProto.toStri MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; +MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/src/mixpanel-group.js b/src/mixpanel-group.js index af83a3c9..817c0b8c 100644 --- a/src/mixpanel-group.js +++ b/src/mixpanel-group.js @@ -1,5 +1,4 @@ /* eslint camelcase: "off" */ -import { addOptOutCheckMixpanelGroup } from './gdpr-utils'; import { apiActions } from './api-actions'; import { _ } from './utils'; @@ -11,13 +10,19 @@ function MixpanelGroup() {} _.extend(MixpanelGroup.prototype, apiActions); -MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { +/** + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate + */ +MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { this._mixpanel = mixpanel_instance; this._group_key = group_key; this._group_id = group_id; + this.consentGate = consentGate; }; -MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** * Set properties on a group. * @@ -37,15 +42,20 @@ MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(prop, to, callback) { - var data = this.set_action(prop, to); +MixpanelGroup.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** * Set properties on a group, only if they do not yet exist. * This will not overwrite previous group property values, unlike @@ -67,15 +77,20 @@ MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); +MixpanelGroup.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( /** * Unset properties on a group permanently. * @@ -87,12 +102,17 @@ MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( * @param {String} prop The name of the property. * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(prop, callback) { +MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( /** * Merge a given list with a list-valued group property, excluding duplicate values. * @@ -106,15 +126,20 @@ MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( * @param {Array} values Values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(list_name, values, callback) { +MixpanelGroup.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( /** * Permanently delete a group. * @@ -125,13 +150,18 @@ MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( * * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(callback) { +MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } // bracket notation above prevents a minification error related to reserved words var data = this.delete_action(); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( /** * Remove a property from a group. The value will be ignored if doesn't exist. * @@ -144,10 +174,16 @@ MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( * @param {Object} value Value to remove from the given group property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(list_name, value, callback) { +MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); -}); +}; MixpanelGroup.prototype._send_request = function(data, callback) { data['$group_key'] = this._group_key; diff --git a/src/mixpanel-people.js b/src/mixpanel-people.js index 32618892..e9c7aae5 100644 --- a/src/mixpanel-people.js +++ b/src/mixpanel-people.js @@ -1,5 +1,4 @@ /* eslint camelcase: "off" */ -import { addOptOutCheckMixpanelPeople } from './gdpr-utils'; import { SET_ACTION, SET_ONCE_ACTION, @@ -20,11 +19,15 @@ function MixpanelPeople() {} _.extend(MixpanelPeople.prototype, apiActions); -MixpanelPeople.prototype._init = function(mixpanel_instance) { +/** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ +MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; + this.consentGate = consentGate; }; -MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( /** * Set properties on a user record. * @@ -45,11 +48,17 @@ MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, to, callback) { - var data = this.set_action(prop, to); +MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); // make sure that the referrer info has been updated and saved if (this._get_config('save_referrer')) { this._mixpanel['persistence'].update_referrer_info(document.referrer); @@ -62,9 +71,8 @@ function(prop, to, callback) { data[SET_ACTION] ); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( /** * Set properties on a user record, only if they do not yet exist. * This will not overwrite previous people property values, unlike @@ -87,15 +95,20 @@ MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); +MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -110,12 +123,17 @@ MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, callback) { +MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -142,7 +160,16 @@ MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, by, callback) { +MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -156,7 +183,6 @@ function(prop, by, callback) { } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -168,9 +194,8 @@ function(prop, by, callback) { data[ADD_ACTION] = $add; return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -191,15 +216,20 @@ MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -212,15 +242,20 @@ MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -248,15 +283,20 @@ MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, values, callback) { +MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -278,9 +318,15 @@ MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ -function(amount, properties, callback) { // eslint-disable-line no-unused-vars +MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); -}); +}; /** * Permanently clear all revenue report transactions from the diff --git a/src/mixpanel-persistence.js b/src/mixpanel-persistence.js index 928233e6..ad0cbdf5 100644 --- a/src/mixpanel-persistence.js +++ b/src/mixpanel-persistence.js @@ -38,11 +38,21 @@ import { _, console, JSONStringify } from './utils'; EVENT_TIMERS_KEY ]; +// the store while persistence is off: nothing is read or written +/** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} +}; + /** * Mixpanel Persistence Object * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() */ -var MixpanelPersistence = function(config) { +var MixpanelPersistence = function(config, options) { this['props'] = {}; this.campaign_params_saved = false; @@ -57,21 +67,23 @@ var MixpanelPersistence = function(config) { console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); config['persistence'] = 'cookie'; } + this.storage_type = config['persistence']; - this._open_storage(config); + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } }; -MixpanelPersistence.prototype._open_storage = function(config) { - if (config['persistence'] === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; +MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; } else { - this.storage = _.cookie; + this.backend = _.cookie; } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); + this.storage = this.backend; }; MixpanelPersistence.prototype.properties = function() { @@ -89,8 +101,6 @@ MixpanelPersistence.prototype.properties = function() { }; MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } - var entry = this.storage.parse(this.name); if (entry) { @@ -104,7 +114,7 @@ MixpanelPersistence.prototype.upgrade = function() { // if transferring from cookie to localStorage or vice-versa, copy existing // super properties over to new storage mode - if (this.storage === _.localStorage) { + if (this.backend === _.localStorage) { old_cookie = _.cookie.parse(this.name); _.cookie.remove(this.name); @@ -113,7 +123,7 @@ MixpanelPersistence.prototype.upgrade = function() { if (old_cookie) { this.register_once(old_cookie); } - } else if (this.storage === _.cookie) { + } else if (this.backend === _.cookie) { old_localstorage = _.localStorage.parse(this.name); _.localStorage.remove(this.name); @@ -125,8 +135,6 @@ MixpanelPersistence.prototype.upgrade = function() { }; MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - this.storage.set( this.name, JSONStringify(this['props']), @@ -144,9 +152,11 @@ MixpanelPersistence.prototype.load_prop = function(key) { }; MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); }; // removes the storage entry and deletes all loaded data @@ -235,11 +245,67 @@ MixpanelPersistence.prototype.update_config = function(config) { this.set_secure(config['secure_cookie']); }; +/** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ MixpanelPersistence.prototype.set_disabled = function(disabled) { this.disabled = disabled; - if (this.disabled) { + this._update_storage(); +}; + +/** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ +MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); +}; + +/** + * Read and write storage again, saving the props in memory to it. + */ +MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); +}; + +/** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ +MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); +}; + +MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; this.remove(); } else { + this.storage = this.backend; this.save(); } }; diff --git a/src/opt-out-flag-decisions.js b/src/opt-out-flag-decisions.js new file mode 100644 index 00000000..97316ba8 --- /dev/null +++ b/src/opt-out-flag-decisions.js @@ -0,0 +1,217 @@ +/** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. + */ + +import { _ } from './utils'; +import { + optIn, + optOut, + clearOptInOut, + readOptInOutFlag, + getOptOutCheckPersistenceType, + doNotTrackApplies +} from './opt-out-flag'; +import { CONSENT_MODES, DECISION_OPTED_OUT, DECISION_OBJECTED, readDecision } from './consent-modes'; + +/** + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges + */ +var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; +}; + +/** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ +OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); + } + + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); + } +}; + +// opt_out_tracking_by_default applies only without consent_mode, which replaces it +OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); +}; + +/** + * @returns {string} + */ +OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; +}; + +/** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; +}; + +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; +}; + +/** + * @param {Object} [options] opt_in_tracking() options + */ +OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); +}; + +/** + * @param {Object} [options] opt_out_tracking() options + */ +OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); + + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } + + this._writeFlag(optOut, options); + this._updatePersistence(options); +}; + +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); +}; + +/** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ +OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); + } +}; + +/** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ +OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); + + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } + + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); +}; + +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ +OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); +}; + +/** + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ +OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); + + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } + + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); +}; + +export { OptOutFlagDecisions }; diff --git a/src/gdpr-utils.js b/src/opt-out-flag.js similarity index 73% rename from src/gdpr-utils.js rename to src/opt-out-flag.js index 8767da42..dc3ebc36 100644 --- a/src/gdpr-utils.js +++ b/src/opt-out-flag.js @@ -24,7 +24,7 @@ import { window } from './window'; /** Public **/ -var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; +var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; /** * Opt the user in to data tracking and cookies/localstorage for the given token @@ -70,7 +70,7 @@ export function optOut(token, options) { * @returns {boolean} whether the user has opted in to the given opt type */ export function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; + return readOptInOutFlag(token, options) === '1'; } /** @@ -83,11 +83,11 @@ export function hasOptedIn(token, options) { * @returns {boolean} whether the user has opted out of the given opt type */ export function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { + if (hasDoNotTrackFlagOn(options)) { console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); return true; } - var optedOut = _getStorageValue(token, options) === '0'; + var optedOut = readOptInOutFlag(token, options) === '0'; if (optedOut) { console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); } @@ -95,57 +95,7 @@ export function hasOptedOut(token, options) { } /** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -export function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function() { - return this; - }); -} - -/** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -export function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, _getOwningMixpanelInstance); -} - -/** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -export function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, _getOwningMixpanelInstance); -} - -/** - * Wrap a SessionRecording method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -export function addOptOutCheckSessionRecording(method) { - return _addOptOutCheck(method, _getOwningMixpanelInstance); -} - -/** - * Get the persistence type to read the opt-in/out flag from. MixpanelLib._gdpr_call_func writes + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. * Read that store first, and the other one if no flag is there. * @param {string} token - Mixpanel project tracking token @@ -158,7 +108,7 @@ export function getOptOutCheckPersistenceType(token, persistenceType, persistenc return persistenceType; } var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; if (hasFlag) { return writtenTo; } @@ -186,10 +136,6 @@ export function clearOptInOut(token, options) { /** Private **/ -function _getOwningMixpanelInstance() { - return this._mixpanel; -} - /** * Get storage util * @param {Object} [options] @@ -210,7 +156,7 @@ function _getStorage(options) { */ function _getStorageKey(token, options) { options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; } /** @@ -220,10 +166,24 @@ function _getStorageKey(token, options) { * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name * @returns {string} the value of the cookie for the given opt type */ -function _getStorageValue(token, options) { +export function readOptInOutFlag(token, options) { return _getStorage(options).get(_getStorageKey(token, options)); } +/** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ +export function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); +} + /** * Check whether the user has set the DNT/doNotTrack setting to true in their browser * @param {Object} [options] @@ -231,7 +191,7 @@ function _getStorageValue(token, options) { * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false * @returns {boolean} whether the DNT setting is true */ -function _hasDoNotTrackFlagOn(options) { +export function hasDoNotTrackFlagOn(options) { if (options && options.ignoreDnt) { return false; } @@ -292,33 +252,4 @@ function _optInOut(optValue, token, options) { } } -/** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getMixpanelInstance - getter for the MixpanelLib instance whose opt-out status gates the method - * @returns {*} the result of executing method OR undefined if the user has opted out - */ -function _addOptOutCheck(method, getMixpanelInstance) { - return function() { - var optedOut = false; - - try { - optedOut = getMixpanelInstance.call(this).has_opted_out_tracking(); - } catch(err) { - console.error('Unexpected error when checking tracking opt-out status: ' + err); - } - - if (!optedOut) { - return method.apply(this, arguments); - } - - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { - callback(0); - } - - return; - }; -} +export { OPT_IN_OUT_FLAG_PREFIX }; diff --git a/src/recorder-manager.js b/src/recorder-manager.js index 4ac2ff13..8a52ace9 100644 --- a/src/recorder-manager.js +++ b/src/recorder-manager.js @@ -32,6 +32,8 @@ var RecorderManager = function(initOptions) { this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -43,8 +45,8 @@ var RecorderManager = function(initOptions) { }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console.log('Load recorder check skipped without persistence'); return Promise.resolve(false); } @@ -71,6 +73,10 @@ RecorderManager.prototype.shouldLoadRecorder = function() { }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console.log('Session recording skipped without consent'); + return Promise.resolve(); + } if (!window['MutationObserver']) { console.critical('Browser does not support MutationObserver; skipping session recording'); return Promise.resolve(); @@ -79,6 +85,11 @@ RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, var loadRecorder = _.bind(function(startNewIfInactive) { return new Promise(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new window[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); diff --git a/src/recorder/recorder.js b/src/recorder/recorder.js index 524e53eb..5fcaeb88 100644 --- a/src/recorder/recorder.js +++ b/src/recorder/recorder.js @@ -2,6 +2,7 @@ import { record } from './rrweb-entrypoint'; import { Promise } from '../promise-polyfill'; import { SessionRecording } from './session-recording'; import { RecordingRegistry } from './recording-registry'; +import { consentGateFor } from '../consent-gate'; import { console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase @@ -15,12 +16,14 @@ var MixpanelRecorder = function(mixpanelInstance, rrwebRecord, sharedLockStorage this.mixpanelInstance = mixpanelInstance; this.rrwebRecord = rrwebRecord || record; this.sharedLockStorage = sharedLockStorage; + this.consentGate = consentGateFor(mixpanelInstance); /** * @member {import('./registry').RecordingRegistry} */ this.recordingRegistry = new RecordingRegistry({ mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, errorReporter: logger.error, sharedLockStorage: sharedLockStorage }); @@ -57,6 +60,7 @@ MixpanelRecorder.prototype.startRecording = function(options) { */ var sessionRecordingOptions = { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, onBatchSent: onBatchSent, onIdleTimeout: onIdleTimeout, onMaxLengthReached: onMaxLengthReached, diff --git a/src/recorder/recording-registry.js b/src/recorder/recording-registry.js index 1150a550..afc429ad 100644 --- a/src/recorder/recording-registry.js +++ b/src/recorder/recording-registry.js @@ -17,11 +17,12 @@ var RecordingRegistry = function (options) { this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA); this.errorReporter = options.errorReporter; this.mixpanelInstance = options.mixpanelInstance; + this.consentGate = options.consentGate; this.sharedLockStorage = options.sharedLockStorage; }; RecordingRegistry.prototype.isPersistenceEnabled = function() { - return !this.mixpanelInstance.get_config('disable_persistence'); + return this.consentGate.allowsPersistence(); }; RecordingRegistry.prototype.handleError = function (err) { @@ -32,6 +33,7 @@ RecordingRegistry.prototype.handleError = function (err) { * @param {import('./session-recording').SerializedRecording} serializedRecording */ RecordingRegistry.prototype.setActiveRecording = function (serializedRecording) { + // a recording that resumes after consent stops storage writes nothing if (!this.isPersistenceEnabled()) { return Promise.resolve(); } @@ -68,13 +70,10 @@ RecordingRegistry.prototype.getActiveRecording = function () { }; RecordingRegistry.prototype.clearActiveRecording = function () { - if (this.isPersistenceEnabled()) { - // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. - // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. - return this.markActiveRecordingExpired(); - } else { - return this.deleteActiveRecording(); - } + // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. + // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. + // without persistence the entry is left as it is, and its unsent events wait for a load that allows them. + return this.markActiveRecordingExpired(); }; RecordingRegistry.prototype.markActiveRecordingExpired = function () { @@ -88,16 +87,6 @@ RecordingRegistry.prototype.markActiveRecordingExpired = function () { .catch(this.handleError.bind(this)); }; -RecordingRegistry.prototype.deleteActiveRecording = function () { - // avoid initializing IDB if this registry instance hasn't already written a recording - if (this.idb.isInitialized()) { - return this.idb.removeItem(this.mixpanelInstance.get_tab_id()) - .catch(this.handleError.bind(this)); - } else { - return Promise.resolve(); - } -}; - /** * Flush any inactive recordings from the registry to minimize data loss. * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch. @@ -120,6 +109,7 @@ RecordingRegistry.prototype.flushInactiveRecordings = function () { .map(function (serializedRecording) { var sessionRecording = SessionRecording.deserialize(serializedRecording, { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, sharedLockStorage: this.sharedLockStorage }); return sessionRecording.unloadPersistedData() diff --git a/src/recorder/session-recording.js b/src/recorder/session-recording.js index e093a82e..8bfef61f 100644 --- a/src/recorder/session-recording.js +++ b/src/recorder/session-recording.js @@ -11,7 +11,6 @@ import { RECORDING_EVENTS_STORE_NAME, RECORDER_VERSION_DATA } from './idb-config'; -import { addOptOutCheckSessionRecording } from '../gdpr-utils'; import { RequestBatcher } from '../request-batcher'; import { Config } from '../config'; @@ -61,6 +60,8 @@ function isUserEvent(ev) { /** * @typedef {Object} SessionRecordingOptions * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib + * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks + * before it stores or sends * @property {String} [options.replayId] - unique uuid for a single replay * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length @@ -91,6 +92,7 @@ function isUserEvent(ev) { */ var SessionRecording = function(options) { this._mixpanel = options.mixpanelInstance; + this.consentGate = options.consentGate; this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC; this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC; this._onBatchSent = options.onBatchSent || NOOP_FUNC; @@ -117,7 +119,7 @@ var SessionRecording = function(options) { // disable persistence if localStorage is not supported // request-queue will automatically disable persistence if indexedDB fails to initialize - var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence'); + var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence(); // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId; @@ -131,6 +133,7 @@ var SessionRecording = function(options) { sharedLockStorage: options.sharedLockStorage, usePersistence: usePersistence, stopAllBatchingFunc: this.stopRecording.bind(this), + consentGate: this.consentGate, // increased throttle and shared lock timeout because recording events are very high frequency. // this will minimize the amount of lock contention between enqueued events. @@ -360,19 +363,15 @@ SessionRecording.prototype.isRrwebStopped = function () { /** - * Flushes the current batch of events to the server, but passes an opt-out callback to make sure - * we stop recording and dump any queued events if the user has opted out. + * Flushes the current batch of events to the server, or stops recording if consent stops the calls. */ SessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) { - var onOptOut = function (code) { - // addOptOutCheckSessionRecording invokes this function with code=0 when the user has opted out - if (code === 0) { - this.stopRecording(); - cb({error: 'Tracking has been opted out, stopping recording.'}); - } - }.bind(this); - - this._flushEvents(data, options, cb, onOptOut); + if (!this.consentGate.allowsApiCalls()) { + this.stopRecording(); + cb({error: 'Tracking has been opted out, stopping recording.'}); + return; + } + this._flushEvents(data, options, cb); }; /** @@ -428,7 +427,12 @@ SessionRecording.prototype._getApiRoute = function () { return this.getConfig('api_routes')['record']; }; +// consent can be withdrawn while the batch is compressed, so it is checked again before sending SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) { + if (!this.consentGate.allowsApiCalls()) { + callback(0); + return; + } var onSuccess = function (response, responseBody) { // Update batch specific props only if the request was successful to guarantee ordering. // RequestBatcher will always flush the next batch after the previous one succeeds. @@ -465,7 +469,7 @@ SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, r }); }; -SessionRecording.prototype._flushEvents = addOptOutCheckSessionRecording(function (data, options, callback) { +SessionRecording.prototype._flushEvents = function(data, options, callback) { var numEvents = data.length; if (numEvents > 0) { @@ -532,7 +536,7 @@ SessionRecording.prototype._flushEvents = addOptOutCheckSessionRecording(functio sendUncompressed(); } } -}); +}; SessionRecording.prototype.reportError = function(msg, err) { diff --git a/src/request-batcher.js b/src/request-batcher.js index d643fa46..2a88a74d 100644 --- a/src/request-batcher.js +++ b/src/request-batcher.js @@ -22,7 +22,8 @@ var RequestBatcher = function(storageKey, options) { sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; diff --git a/src/request-queue.js b/src/request-queue.js index d81c937b..c88377d0 100644 --- a/src/request-queue.js +++ b/src/request-queue.js @@ -33,6 +33,7 @@ var RequestQueue = function (storageKey, options) { }); } this.reportError = options.errorReporter || _.bind(logger.error, logger); + this.consentGate = options.consentGate; this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios @@ -84,7 +85,7 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { 'payload': item }; - if (!this.usePersistence) { + if (!this._persists()) { this.memQueue.push(queueEntry); return Promise.resolve(true); } else { @@ -92,7 +93,20 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { } }; +/** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ +RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); +}; + RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return Promise.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -192,7 +206,7 @@ RequestQueue.prototype.removeItemsByID = function (ids) { }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return Promise.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -280,7 +294,7 @@ var updatePayloads = function (existingItems, itemsToUpdate) { */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return Promise.resolve(true); } else { return this.lock @@ -335,11 +349,14 @@ RequestQueue.prototype.readFromStorage = function () { RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); }, this)) - .then(function () { - return true; - }) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; diff --git a/src/storage/indexed-db.js b/src/storage/indexed-db.js index d2a334d6..a6b6dcc9 100644 --- a/src/storage/indexed-db.js +++ b/src/storage/indexed-db.js @@ -4,11 +4,13 @@ import { window } from '../window'; /** * @type {import('./wrapper').StorageWrapper} */ -var IDBStorageWrapper = function (dbName, storeName, versionData) { +var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -19,25 +21,47 @@ IDBStorageWrapper.prototype._openDb = function () { var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new Promise(function (resolve, reject) { - var openRequest = window.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; - - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; - - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + var createIfMissing = this.createIfMissing; + var open = function () { + return new Promise(function (resolve, reject) { + var openRequest = window.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; + + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; + + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !window.indexedDB['databases']) { + return open(); + } + return window.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return Promise.reject(dbName + ' does not exist'); }); }; diff --git a/tests/browser/client/index.js b/tests/browser/client/index.js index 1934e840..ec678879 100644 --- a/tests/browser/client/index.js +++ b/tests/browser/client/index.js @@ -7,8 +7,10 @@ import {bundleCompatTests} from './suites/bundleCompat'; import {autocaptureTests} from './suites/autocapture'; import {domTrackersTests} from './suites/domTrackers'; import {gdprTests} from './suites/gdpr'; +import {consentRequiredTests} from './suites/consentRequired'; +import {disablePersistenceTests} from './suites/disablePersistence'; -export {trackTests, batchRequestsTests, recorderTests, flagsTests, remoteSettingsTests, bundleCompatTests, domTrackersTests, gdprTests}; +export {trackTests, batchRequestsTests, recorderTests, flagsTests, remoteSettingsTests, bundleCompatTests, domTrackersTests, gdprTests, consentRequiredTests, disablePersistenceTests}; export const ALL_TESTS = [ trackTests, @@ -20,4 +22,6 @@ export const ALL_TESTS = [ bundleCompatTests, domTrackersTests, gdprTests, + consentRequiredTests, + disablePersistenceTests, ]; diff --git a/tests/browser/client/suites/consentRequired.js b/tests/browser/client/suites/consentRequired.js new file mode 100644 index 00000000..ac7dea75 --- /dev/null +++ b/tests/browser/client/suites/consentRequired.js @@ -0,0 +1,223 @@ +/* global chai, sinon */ + +const { expect } = chai; +import { clearAllLibInstances, clearLibInstance, clearAllStorage, getIDBValue, putIDBValue, randName, simulateMouseClick, untilDone, untilDoneAsync } from "../utils"; +import { FLAGS_STORE_NAME, MIXPANEL_FLAGS_DB_NAME, PERSISTED_VARIANTS_KEY_PREFIX } from "../../../../src/flags/flags-persistence"; +import { RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME } from "../../../../src/recorder/idb-config"; + +// the modes that store and send nothing identifying before consent +const CONSENT_REQUIRED_MODES = [`require_consent`]; + +export function consentRequiredTests(mixpanel) { + CONSENT_REQUIRED_MODES.forEach(mode => describe(`consent_mode: '${mode}'`, function() { + let token, idbOpenSpy, xhrSendSpy, fetchSpy, beaconSpy; + + const REAL_CONFIG = { + consent_mode: mode, + opt_out_tracking_by_default: true, + persistence: `localStorage`, + autocapture: true, + track_pageview: true, + record_sessions_percent: 100, + flags: true, + lib_base_path: `./static/build/async-modules/`, + debug: true, + }; + + function initConsentRequired(config, name = `test`) { + return new Promise(resolve => { + mixpanel.init(token, Object.assign({}, REAL_CONFIG, config, {loaded: resolve}), name); + }); + } + + function storageKeysWithToken(storage) { + return Object.keys(storage).filter(key => key.includes(token)); + } + + function cookiesWithToken() { + return document.cookie.split(`;`).map(cookie => cookie.trim()).filter(cookie => cookie.includes(token)); + } + + function requestsWithToken() { + const xhrBodies = xhrSendSpy.getCalls().map(call => String(call.args[0] || ``)); + const beaconBodies = beaconSpy ? beaconSpy.getCalls().map(call => String(call.args[1] || ``)) : []; + const fetches = fetchSpy.getCalls().map(call => JSON.stringify(call.args)); + return xhrBodies.concat(beaconBodies, fetches) + .map(body => decodeURIComponent(body.replace(/\+/g, ` `))) + .filter(body => body.includes(token) || body.includes(btoa(token + `:`))); + } + + beforeEach(async () => { + token = randName(); + await clearAllStorage(); + idbOpenSpy = sinon.spy(window.indexedDB, `open`); + xhrSendSpy = sinon.spy(window.XMLHttpRequest.prototype, `send`); + fetchSpy = sinon.spy(window, `fetch`); + beaconSpy = navigator.sendBeacon ? sinon.spy(navigator, `sendBeacon`) : null; + }); + + afterEach(async () => { + sinon.restore(); + await clearAllLibInstances(mixpanel); + }); + + [`localStorage`, `cookie`].forEach(persistence => { + it(`stores nothing and sends nothing before consent, with ${persistence} persistence`, async () => { + await initConsentRequired({persistence}); + const button = document.createElement(`button`); + document.body.appendChild(button); + simulateMouseClick(button); + mixpanel.test.track(`custom event`); + mixpanel.test.people.set({name: `visitor`}); + await new Promise(resolve => setTimeout(resolve, 1000)); + button.remove(); + + expect(storageKeysWithToken(localStorage)).to.deep.equal([]); + expect(storageKeysWithToken(sessionStorage)).to.deep.equal([]); + expect(cookiesWithToken()).to.deep.equal([]); + // clearAllStorage() leaves the flags database behind, and opening it to remove this + // instance's variants stores nothing; no other database may be touched at all + const cleanedDbNames = [MIXPANEL_FLAGS_DB_NAME]; + const openedDbNames = idbOpenSpy.getCalls().map(call => call.args[0]); + expect(openedDbNames.filter(name => !cleanedDbNames.includes(name))).to.deep.equal([]); + expect(await getIDBValue(FLAGS_STORE_NAME, PERSISTED_VARIANTS_KEY_PREFIX + token)).to.equal(undefined); + expect(requestsWithToken()).to.deep.equal([]); + expect(mixpanel.test.get_distinct_id()).to.equal(undefined); + }); + }); + + it(`deletes identifiers the device was carrying before consent mode`, async () => { + localStorage.setItem(`mp_${token}_mixpanel`, JSON.stringify({distinct_id: `$device:stale`, $device_id: `stale`})); + localStorage.setItem(`__mpq_${token}_ev`, JSON.stringify([{id: `queued`, payload: {event: `before consent mode`}}])); + sessionStorage.setItem(`mp_tab_id_test_${token}`, `$tab-stale`); + const variantsKey = PERSISTED_VARIANTS_KEY_PREFIX + token; + await putIDBValue(FLAGS_STORE_NAME, variantsKey, {flags: {stale: {variant_key: `on`}}}); + expect(await getIDBValue(FLAGS_STORE_NAME, variantsKey)).to.not.equal(undefined); + + await initConsentRequired(); + await new Promise(resolve => setTimeout(resolve, 1000)); + + expect(await getIDBValue(FLAGS_STORE_NAME, variantsKey)).to.equal(undefined); + expect(storageKeysWithToken(localStorage)).to.deep.equal([]); + expect(storageKeysWithToken(sessionStorage)).to.deep.equal([]); + expect(cookiesWithToken()).to.deep.equal([]); + expect(requestsWithToken()).to.deep.equal([]); + expect(mixpanel.test.get_distinct_id()).to.equal(undefined); + }); + + it(`keeps unsent replay from earlier pages on the device, unsent, before consent`, async () => { + const replayKey = `__mprec_test_${token}_stale-replay`; + await putIDBValue(RECORDING_EVENTS_STORE_NAME, replayKey, [{id: `queued`, payload: {type: 2}}]); + await putIDBValue(RECORDING_REGISTRY_STORE_NAME, `$tab-stale`, {replayId: `stale-replay`, tabId: `$tab-stale`, maxExpires: 0}); + + await initConsentRequired(); + await new Promise(resolve => setTimeout(resolve, 1000)); + + expect(await getIDBValue(RECORDING_EVENTS_STORE_NAME, replayKey)).to.not.equal(undefined); + expect(await getIDBValue(RECORDING_REGISTRY_STORE_NAME, `$tab-stale`)).to.not.equal(undefined); + expect(requestsWithToken()).to.deep.equal([]); + }); + + [`localStorage`, `cookie`].forEach(persistence => { + it(`keeps only the decision and sends nothing after a consented visitor withdraws, with ${persistence} persistence`, async () => { + await initConsentRequired({persistence, batch_requests: true}); + mixpanel.test.opt_in_tracking(); + await untilDone(() => requestsWithToken().some(body => body.includes(`$opt_in`))); + mixpanel.test.track(`queued before withdrawal`); + + mixpanel.test.opt_out_tracking(); + xhrSendSpy.resetHistory(); + fetchSpy.resetHistory(); + if (beaconSpy) { + beaconSpy.resetHistory(); + } + mixpanel.test.track(`after withdrawal`); + await new Promise(resolve => setTimeout(resolve, 1000)); + + const decisionKey = `__mp_opt_in_out_${token}`; + if (persistence === `cookie`) { + expect(storageKeysWithToken(localStorage)).to.deep.equal([]); + expect(cookiesWithToken()).to.deep.equal([`${decisionKey}=0`]); + } else { + expect(storageKeysWithToken(localStorage)).to.deep.equal([decisionKey]); + expect(cookiesWithToken()).to.deep.equal([]); + } + expect(storageKeysWithToken(sessionStorage)).to.deep.equal([]); + expect(await getIDBValue(FLAGS_STORE_NAME, PERSISTED_VARIANTS_KEY_PREFIX + token)).to.equal(undefined); + expect(requestsWithToken()).to.deep.equal([]); + }); + }); + + it(`stores an ID and sends $opt_in after opt-in`, async () => { + await initConsentRequired(); + mixpanel.test.opt_in_tracking(); + + const distinctId = mixpanel.test.get_distinct_id(); + expect(distinctId).to.match(/^\$device:/); + const stored = JSON.parse(localStorage.getItem(`mp_${token}_mixpanel`)); + expect(stored.distinct_id).to.equal(distinctId); + expect(localStorage.getItem(`__mp_opt_in_out_${token}`)).to.equal(`1`); + await untilDone(() => requestsWithToken().some(body => body.includes(`$opt_in`) && body.includes(distinctId))); + }); + + it(`restarts batching and replay with the same ID when a visitor withdraws and opts in again on the page`, async () => { + const isRecording = () => Object.keys(mixpanel.test.get_session_recording_properties()).length > 0; + await initConsentRequired({batch_requests: true, batch_flush_interval_ms: 100}); + mixpanel.test.opt_in_tracking(); + await untilDone(isRecording); + const distinctId = mixpanel.test.get_distinct_id(); + + mixpanel.test.opt_out_tracking(); + await untilDone(() => !isRecording()); + + mixpanel.test.opt_in_tracking(); + mixpanel.test.track(`after re-opt-in`); + + await untilDone(isRecording); + await untilDone(() => requestsWithToken().some(body => body.includes(`after re-opt-in`) && body.includes(distinctId))); + expect(mixpanel.test.get_distinct_id()).to.equal(distinctId); + expect(localStorage.getItem(`__mp_opt_in_out_${token}`)).to.equal(`1`); + }); + + it(`keeps this tab's unsent replay on the device, unsent, after a withdrawal`, async () => { + const isRecording = () => Object.keys(mixpanel.test.get_session_recording_properties()).length > 0; + await initConsentRequired(); + mixpanel.test.opt_in_tracking(); + await untilDone(isRecording); + const tabId = mixpanel.test.get_tab_id(); + await untilDoneAsync(async () => { + if (await getIDBValue(RECORDING_REGISTRY_STORE_NAME, tabId) === undefined) { + throw new Error(`replay not registered yet`); + } + }); + + mixpanel.test.opt_out_tracking(); + xhrSendSpy.resetHistory(); + fetchSpy.resetHistory(); + if (beaconSpy) { + beaconSpy.resetHistory(); + } + await untilDone(() => !isRecording()); + await new Promise(resolve => setTimeout(resolve, 1000)); + + expect(await getIDBValue(RECORDING_REGISTRY_STORE_NAME, tabId)).to.not.equal(undefined); + expect(storageKeysWithToken(sessionStorage)).to.deep.equal([]); + expect(requestsWithToken()).to.deep.equal([]); + }); + + it(`keeps blocking after a refusal, across page loads`, async () => { + await initConsentRequired(); + mixpanel.test.opt_out_tracking(); + // a reload drops the instance but keeps the stored decision, so this teardown leaves it alone + await clearLibInstance(mixpanel, mixpanel.test, false); + xhrSendSpy.resetHistory(); + + await initConsentRequired({}, `reloaded`); + mixpanel.reloaded.track(`after refusal`); + await new Promise(resolve => setTimeout(resolve, 500)); + + expect(mixpanel.reloaded.has_opted_out_tracking()).to.equal(true); + expect(requestsWithToken().filter(body => body.includes(`after refusal`))).to.deep.equal([]); + }); + })); +} diff --git a/tests/browser/client/suites/disablePersistence.js b/tests/browser/client/suites/disablePersistence.js new file mode 100644 index 00000000..4407af22 --- /dev/null +++ b/tests/browser/client/suites/disablePersistence.js @@ -0,0 +1,51 @@ +/* global chai, sinon */ + +const { expect } = chai; +import { clearAllLibInstances, clearAllStorage, putIDBValue, randName, realSetTimeout } from "../utils"; +import { FLAGS_STORE_NAME } from "../../../../src/flags/flags-persistence"; + +export function disablePersistenceTests(mixpanel) { + describe(`disable_persistence`, function() { + let token; + + beforeEach(async () => { + token = randName(); + await clearAllStorage(); + }); + + afterEach(async () => { + sinon.restore(); + await clearAllLibInstances(mixpanel); + }); + + [`cookie`, `localStorage`].forEach(persistence => { + it(`makes no calls to browser storage APIs with ${persistence} persistence`, async () => { + // a database from an earlier page, which the SDK mustn't open either + await putIDBValue(FLAGS_STORE_NAME, `unrelated`, {}); + const idbOpenSpy = sinon.spy(window.indexedDB, `open`); + const localStorageSetItemSpy = sinon.spy(localStorage, `setItem`); + const sessionStorageSetItemSpy = sinon.spy(sessionStorage, `setItem`); + const originalCookie = document.cookie; + + mixpanel.init(token, { + persistence, + batch_requests: false, + disable_persistence: true, + }, `test`); + await new Promise(resolve => realSetTimeout(resolve, 500)); + + expect(idbOpenSpy.callCount, `IDB opens`).to.equal(0); + expect(localStorageSetItemSpy.callCount, `localStorage writes`).to.equal(0); + expect(sessionStorageSetItemSpy.callCount, `sessionStorage writes`).to.equal(0); + expect(document.cookie).to.equal(originalCookie); + }); + }); + + it(`stores no tab ID`, () => { + mixpanel.init(token, {batch_requests: false, disable_persistence: true}, `test`); + + expect(mixpanel.test.get_tab_id()).to.equal(null); + expect(Object.keys(sessionStorage)).to.have.lengthOf(0); + }); + }); +} diff --git a/tests/browser/client/suites/gdpr.js b/tests/browser/client/suites/gdpr.js index 4ef8e64f..839ed657 100644 --- a/tests/browser/client/suites/gdpr.js +++ b/tests/browser/client/suites/gdpr.js @@ -1,7 +1,7 @@ /* global chai, sinon */ const { expect } = chai; -import { randName, clearAllLibInstances, clearMixpanelCookies } from "../utils"; +import { randName, clearAllLibInstances, clearAllStorage, clearLibInstance, clearMixpanelCookies, getXhrRequestData } from "../utils"; export function gdprTests(mixpanel) { describe(`opt-out status`, function() { @@ -68,4 +68,254 @@ export function gdprTests(mixpanel) { expectOptedOut(instance, false); }); }); + + describe(`opt-in and opt-out of tracking and people updates`, function() { + const CUSTOM_COOKIE_PREFIX = `𝓶𝓶𝓶𝓬𝓸𝓸𝓴𝓲𝓮𝓼`; + const METHODS = [ + [`track`, [`event_name`, {prop: `value`}]], + [`set`, [`prop_name`, `prop_value`]], + [`set_once`, [`prop_name`, `prop_value`]], + [`increment`, [`prop_name`, 1]], + [`append`, [`prop_name`, `prop_value`]], + [`union`, [`prop_name`, `prop_value`]], + ]; + let token; + + beforeEach(async () => { + token = randName(); + await clearAllStorage(); + }); + + afterEach(async () => { + sinon.restore(); + await clearAllLibInstances(mixpanel); + clearMixpanelCookies(); + }); + + function initInstance(config) { + mixpanel.init(token, Object.assign({}, config, {batch_requests: false}), `gdprtest`); + return mixpanel.gdprtest; + } + + async function decideAndClear(config, decide) { + const instance = initInstance(config); + decide(instance); + await clearLibInstance(mixpanel, instance, /* clear_opt_in_out */ false); + } + + // the requests the setup makes, recorded without sending them + function recordXhrRequests(func) { + const fakeXhr = sinon.useFakeXMLHttpRequest(); + const requests = []; + fakeXhr.onCreate = request => requests.push(request); + try { + func(); + } finally { + fakeXhr.restore(); + } + return requests; + } + + function scenariosFor(persistenceType) { + const config = {opt_out_tracking_persistence_type: persistenceType}; + const optOutByDefault = {opt_out_tracking_by_default: true, opt_out_tracking_persistence_type: persistenceType}; + return [ + {title: `is enabled by opt-in`, optedIn: true, config, + postInit: instance => instance.opt_in_tracking()}, + {title: `is disabled by opt-out`, optedIn: false, userCleared: true, config, + postInit: instance => instance.opt_out_tracking()}, + {title: `is disabled by opt-out without clearing user data when delete_user is false`, optedIn: false, config, + postInit: instance => instance.opt_out_tracking({delete_user: false})}, + {title: `is disabled by opt-in followed by opt-out`, optedIn: false, userCleared: true, config, + postInit: instance => { + instance.opt_in_tracking(); + instance.opt_out_tracking(); + }}, + {title: `is enabled by opt-out followed by opt-in`, optedIn: true, userCleared: true, config, + postInit: instance => { + instance.opt_out_tracking(); + instance.opt_in_tracking(); + }}, + {title: `is enabled with an opt-in cookie and opt-out as default`, optedIn: true, config: optOutByDefault, + preInit: () => decideAndClear({opt_out_tracking_persistence_type: `cookie`}, instance => instance.opt_in_tracking())}, + {title: `is disabled by opt-out as default`, optedIn: false, config: optOutByDefault}, + {title: `is enabled by opt-out as default followed by opt-in`, optedIn: true, config: optOutByDefault, + postInit: instance => instance.opt_in_tracking()}, + {title: `is disabled by the mp_optout cookie`, optedIn: false, config, + preInit: () => { + document.cookie = `mp_optout=1; path=/`; + }}, + {title: `is enabled by the mp_optout cookie followed by opt-in`, optedIn: true, config, + preInit: () => { + document.cookie = `mp_optout=1; path=/`; + }, + postInit: instance => instance.opt_in_tracking()}, + {title: `is enabled by opt-in with a custom cookie prefix passed as an option`, optedIn: true, + postInit: instance => instance.opt_in_tracking({cookie_prefix: CUSTOM_COOKIE_PREFIX})}, + {title: `is not disabled by opt-out with a custom cookie prefix passed as an option`, optedIn: true, userCleared: true, config, + postInit: instance => instance.opt_out_tracking({cookie_prefix: CUSTOM_COOKIE_PREFIX})}, + {title: `is enabled by opt-in with a custom cookie prefix in the config`, optedIn: true, + config: {opt_out_tracking_cookie_prefix: CUSTOM_COOKIE_PREFIX, opt_out_tracking_persistence_type: persistenceType}, + postInit: instance => instance.opt_in_tracking()}, + {title: `is enabled by ignore_dnt despite navigator.doNotTrack="1"`, optedIn: true, + config: {ignore_dnt: true, window: {navigator: {doNotTrack: `1`}}}}, + {title: `is disabled by navigator.doNotTrack="1"`, optedIn: false, + config: {window: {navigator: {doNotTrack: `1`}}}}, + {title: `is disabled by legacy Firefox navigator.doNotTrack="yes"`, optedIn: false, + config: {window: {navigator: {doNotTrack: `yes`}}}}, + {title: `is disabled by legacy Safari window.doNotTrack="1"`, optedIn: false, + config: {window: {doNotTrack: `1`}}}, + {title: `is disabled by legacy MSIE navigator.msDoNotTrack="1"`, optedIn: false, + config: {window: {navigator: {msDoNotTrack: `1`}}}}, + ]; + } + + const UPGRADE_SCENARIOS = [ + {title: `is enabled by an opt-in cookie upgraded to localStorage`, optedIn: true, + config: {opt_out_tracking_persistence_type: `localStorage`}, + preInit: () => decideAndClear({opt_out_tracking_persistence_type: `cookie`}, instance => instance.opt_in_tracking())}, + {title: `is disabled by an opt-out cookie upgraded to localStorage`, optedIn: false, + config: {opt_out_tracking_persistence_type: `localStorage`}, + preInit: () => decideAndClear({opt_out_tracking_persistence_type: `cookie`}, instance => instance.opt_out_tracking())}, + ]; + + METHODS.forEach(([method, args]) => describe(method, function() { + const scenarios = scenariosFor(`cookie`).map(scenario => Object.assign({persistenceType: `cookie`}, scenario)) + .concat(scenariosFor(`localStorage`).map(scenario => Object.assign({persistenceType: `localStorage`}, scenario))) + .concat(UPGRADE_SCENARIOS); + + scenarios.forEach(scenario => { + const title = scenario.persistenceType ? `${scenario.title}, with ${scenario.persistenceType} opt-out persistence` : scenario.title; + it(title, async () => { + if (scenario.preInit) { + await scenario.preInit(); + } + const instance = initInstance(scenario.config || {}); + instance.identify(randName()); + const requests = recordXhrRequests(() => (scenario.postInit || (() => {}))(instance)); + + const target = instance[method] ? instance : instance.people; + const response = await new Promise(resolve => target[method].apply(target, args.concat(resolve))); + + expect(response).to.equal(scenario.optedIn ? 1 : 0); + const engageRequests = requests.filter(request => request.url.indexOf(`/engage/`) >= 0); + if (scenario.userCleared) { + expect(getXhrRequestData(engageRequests[0], [`$delete`]), `delete_user request`).to.exist; + expect(getXhrRequestData(engageRequests[1], [`$set`, `$transactions`]), `clear_charges request`).to.deep.equal([]); + } else { + expect(engageRequests).to.have.lengthOf(0); + } + }); + }); + })); + }); + + describe(`persistence on opt-in and opt-out`, function() { + let token; + + beforeEach(async () => { + token = randName(); + await clearAllStorage(); + }); + + afterEach(async () => { + await clearAllLibInstances(mixpanel); + clearMixpanelCookies(); + }); + + [`cookie`, `localStorage`].forEach(persistence => [`cookie`, `localStorage`].forEach(optOutPersistence => { + describe(`${persistence} persistence, opt-out stored in ${optOutPersistence}`, function() { + function initInstance(config) { + mixpanel.init(token, Object.assign({ + persistence, + opt_out_tracking_persistence_type: optOutPersistence, + }, config), `gdprtest`); + return mixpanel.gdprtest; + } + + function isStored(instance) { + const name = instance.persistence.name; + if (persistence === `localStorage`) { + return !!localStorage.getItem(name); + } + return document.cookie.split(`;`).some(cookie => cookie.trim().startsWith(name + `=`)); + } + + async function initAfter(decide) { + const instance = initInstance(); + decide(instance); + await clearLibInstance(mixpanel, instance, /* clear_opt_in_out */ false); + return initInstance(); + } + + it(`stores the props on init when undecided`, () => { + expect(isStored(initInstance())).to.equal(true); + }); + + it(`stores nothing on init after an opt-out`, async () => { + const instance = await initAfter(lib => lib.opt_out_tracking()); + expect(isStored(instance)).to.equal(false); + }); + + it(`stores the props on init after an opt-in`, async () => { + const instance = await initAfter(lib => lib.opt_in_tracking()); + expect(isStored(instance)).to.equal(true); + }); + + it(`removes the props on opt-out and stores them again on opt-in`, () => { + const instance = initInstance(); + expect(isStored(instance)).to.equal(true); + instance.opt_out_tracking(); + expect(isStored(instance)).to.equal(false); + instance.opt_in_tracking(); + expect(isStored(instance)).to.equal(true); + }); + + it(`keeps the props on opt-out with clear_persistence false`, () => { + const instance = initInstance(); + instance.opt_out_tracking({clear_persistence: false}); + expect(isStored(instance)).to.equal(true); + instance.opt_in_tracking(); + expect(isStored(instance)).to.equal(true); + }); + + it(`stores nothing on opt-in with enable_persistence false`, () => { + const instance = initInstance(); + expect(isStored(instance)).to.equal(true); + instance.opt_out_tracking(); + expect(isStored(instance)).to.equal(false); + instance.opt_in_tracking({enable_persistence: false}); + expect(isStored(instance)).to.equal(false); + }); + + it(`keeps the props under opt-out as default until an opt-out`, () => { + const instance = initInstance({opt_out_tracking_by_default: true}); + expect(isStored(instance)).to.equal(true); + instance.opt_in_tracking(); + expect(isStored(instance)).to.equal(true); + instance.opt_out_tracking(); + expect(isStored(instance)).to.equal(false); + }); + + it(`stores nothing under opt-out of tracking and persistence as default until an opt-in`, () => { + const instance = initInstance({opt_out_tracking_by_default: true, opt_out_persistence_by_default: true}); + expect(isStored(instance)).to.equal(false); + instance.opt_in_tracking(); + expect(isStored(instance)).to.equal(true); + instance.opt_out_tracking(); + expect(isStored(instance)).to.equal(false); + }); + + it(`keeps the props under the mp_optout cookie until an opt-out`, () => { + document.cookie = `mp_optout=1; path=/`; + const instance = initInstance(); + expect(isStored(instance)).to.equal(true); + instance.opt_in_tracking(); + expect(isStored(instance)).to.equal(true); + instance.opt_out_tracking(); + expect(isStored(instance)).to.equal(false); + }); + }); + })); + }); } diff --git a/tests/browser/client/suites/recorder.js b/tests/browser/client/suites/recorder.js index 8cfb3cb1..585aec2c 100644 --- a/tests/browser/client/suites/recorder.js +++ b/tests/browser/client/suites/recorder.js @@ -1781,7 +1781,9 @@ export function recorderTests (mixpanel) { const metaEvent = events.find(e => e.type === 4); const fullSnapshotEvent = events.find(e => e.type === 2); const incrementalSnapshotEvent = events.find(e => e.type === 3); - const consoleEvent = events.find(e => e.type === 6 && e.data.plugin.includes(`console`)); + // debug mode logs the SDK's own messages too, so find the test's by its text + const consoleEvent = events.find(e => e.type === 6 && e.data.plugin.includes(`console`) && + e.data.payload.payload[0] === `"test console log message"`); expect(metaEvent).to.exist; expect(fullSnapshotEvent).to.exist; diff --git a/tests/browser/client/utils.js b/tests/browser/client/utils.js index be57e5dc..19242661 100644 --- a/tests/browser/client/utils.js +++ b/tests/browser/client/utils.js @@ -292,6 +292,34 @@ export function getIDBValue(storeName, key) { }); } +export function putIDBValue(storeName, key, value) { + const dbName = STORE_TO_DB_NAME[storeName]; + if (!dbName) { + return Promise.reject(new Error(`Unknown IDB store: ${storeName}`)); + } + return new Promise(function (resolve, reject) { + const openRequest = window.indexedDB.open(dbName, 1); + openRequest.onupgradeneeded = function (ev) { + ev.target.result.createObjectStore(storeName); + }; + openRequest.onsuccess = function () { + const db = openRequest.result; + const txn = db.transaction([storeName], `readwrite`); + txn.objectStore(storeName).put(value, key); + txn.oncomplete = function () { + db.close(); + resolve(); + }; + txn.onerror = function () { + db.close(); + reject(txn.error); + }; + }; + openRequest.onerror = function () { reject(openRequest.error); }; + openRequest.onblocked = function () { reject(new Error(`putIDBValue open blocked`)); }; + }); +} + export async function clearAllStorage() { if (window.localStorage) { window.localStorage.clear(); diff --git a/tests/test.js b/tests/test.js index ccad1874..966ef435 100755 --- a/tests/test.js +++ b/tests/test.js @@ -110,25 +110,6 @@ } } - /* XMLHttpRequest recording - writes "fake" XHR request objects to this.requests for later assertion in tests - * usage: - * // run from within a test module, `this` (QUnit test object) should be bound at callsite: - * var func = function() { ... code that makes some requests ... }; - * var requests = recordXhrRequests.call(this, func); - * // return value `requests` contains any XHR requests made during func's execution - */ - function recordXhrRequests(func) { - try { - startRecordingXhrRequests.call(this); - func.call(this); - } catch (err) { - stopRecordingXhrRequests.call(this); - throw err; - } - stopRecordingXhrRequests.call(this); - return this.requests || []; - } - function getRequestData(request, keyPath) { try { var data = JSON.parse(decodeURIComponent(request.requestBody.match(/data=([^&]+)/)[1])); @@ -1144,37 +1125,6 @@ }); } - mpmodule("disable_persistence") - - function testNoCallsToBrowserStorage(persistenceType) { - test(persistenceType + " persistence type should make no calls to browser storage APIs", 4, function() { - var idbOpenSpy = sinon.spy(window.indexedDB, `open`); - var localStorageSetItemSpy = sinon.spy(window.localStorage, `setItem`); - var sessionStorageSetItemSpy = sinon.spy(window.sessionStorage, `setItem`); - var originalCookie = document.cookie; - - mixpanel.init('persistence_lib', { - persistence: persistenceType, - persistence_name: name, - batch_requests: false, - disable_persistence: true - }, 'persistence_lib'); - - stop(); - setTimeout(function() { - same(idbOpenSpy.callCount, 0, "IDB should not be opened"); - same(localStorageSetItemSpy.callCount, 0, "localStorage.setItem should not be called"); - same(sessionStorageSetItemSpy.callCount, 0, "sessionStorage.setItem should not be called"); - same(document.cookie, originalCookie, "document.cookie shouldn't have been changed"); - sinon.restore(); - start(); - }, 500); - }); - } - - testNoCallsToBrowserStorage('cookie'); - testNoCallsToBrowserStorage('localStorage'); - mpmodule("mixpanel"); var get_superprops_without_defaults = function(instance) { @@ -5077,31 +5027,6 @@ ok(typeof(tab_id) === "string", "tab id is a string"); ok(tab_id !== mixpanel.test.get_tab_id(), "tab ID has changed since the flag to generate a new tab ID was set"); }); - - module("tab_id when disable_persistence: true", { - setup: function() { - this.token = rand_name(); - this.id = rand_name(); - - mixpanel.init(this.token, { - batch_requests: false, - disable_persistence: true, - debug: true - }, "test"); - }, - teardown: function() { - clearAllLibInstances(); - } - }); - - test("no tab id is persisted in session storage", 3, function () { - var tab_id = mixpanel.test.get_tab_id(); - ok(tab_id === null, "tab id is null"); - - var stored_tab_id = window.sessionStorage.getItem("mp_tab_id_test_" + this.token); - ok(stored_tab_id === null, "no tab id is stored in sessionStorage"); - ok(Object.keys(window.sessionStorage).length === 0, "sessionStorage is empty"); - }); } if (!window.COOKIE_FAILURE_TEST) { // GDPR functionality cannot operate without cookies @@ -5113,758 +5038,6 @@ } }); - function gdprTestMethod(method, args) { - function gdprTest(description, options) { - asyncTest(description, USE_XHR ? 3 : 1, function() { - options = _.extend({ - opt_in: true, // true=opt-in, false=opt-out - assert_user_cleared: false, // assert delete_user and clear_charges are called properly on opt-out - config: {}, // config that will be passed to mixpanel.init - pre_init: function() {}, // override to perform custom setup code before init & identify - post_init: function() {} // override to perform custom setup code after init & identify - }, options); - options.config.batch_requests = false; - - options.pre_init.call(this); - - mixpanel.init('gdpr', options.config, 'gdpr'); - mixpanel.gdpr.identify(this.id); // necessary for certain methods to work properly - - // run custom setup, record xhr requests to verify clear user data functionality - var requests = recordXhrRequests.call(this, options.post_init); - - var lib = mixpanel.gdpr[method] ? mixpanel.gdpr : mixpanel.gdpr.people; - lib[method].apply(lib, args.concat(function(response) { - same( - response, - Number(Boolean(options.opt_in)), - method + ' should ' + (options.opt_in ? '' : 'not ') + 'be successful' - ); - - if (USE_XHR) { - var engage_requests = requests.filter(function(request) { - return request.url.indexOf('/engage/') >= 0; - }); - if (options.assert_user_cleared) { - ok( - getRequestData(engage_requests[0], ['$delete']), - "delete_user request should have been made" - ); - same( - getRequestData(engage_requests[1], ['$set', '$transactions']), - [], - "clear_charges request should have been made" - ); - } else { - notOk(engage_requests.length, "delete_user request should not have been made"); - notOk(engage_requests.length, "clear_charges request should not have been made"); - } - } - - // teardown - clearLibInstance(mixpanel.gdpr); - mixpanel._.cookie.remove('mp_optout'); // remove if present - start(); - })); - }); - } - - var persistence_types = ['cookie']; - - if (window.localStorage) { - persistence_types.push('localStorage'); - } - - for (var i = 0; i < persistence_types.length; i++) { - var persistence_type = persistence_types[i]; - - gdprTest(method + ' tracking is enabled by opt-in', { - config: {opt_out_tracking_persistence_type: persistence_type}, - post_init: function() { - mixpanel.gdpr.opt_in_tracking(); - } - }); - - gdprTest(method + ' tracking is disabled by opt-out', { - opt_in: false, - assert_user_cleared: true, - config: {opt_out_tracking_persistence_type: persistence_type}, - post_init: function() { - mixpanel.gdpr.opt_out_tracking(); - } - }); - - gdprTest(method + ' tracking is disabled by opt-out and clearing user data is disabled properly', { - opt_in: false, - assert_user_cleared: false, // ensure user data isn't cleared on opt out (as delete_user=false is specified below) - config: {opt_out_tracking_persistence_type: persistence_type}, - post_init: function() { - mixpanel.gdpr.opt_out_tracking({delete_user: false}); - } - }); - - gdprTest(method + ' tracking is disabled by opt-in followed by opt-out', { - opt_in: false, - assert_user_cleared: true, - config: {opt_out_tracking_persistence_type: persistence_type}, - post_init: function() { - mixpanel.gdpr.opt_in_tracking(); - mixpanel.gdpr.opt_out_tracking(); - } - }); - - gdprTest(method + ' tracking is enabled by opt-out followed by opt-in', { - assert_user_cleared: true, - config: {opt_out_tracking_persistence_type: persistence_type}, - post_init: function() { - mixpanel.gdpr.opt_out_tracking(); - mixpanel.gdpr.opt_in_tracking(); - } - }); - - gdprTest(method + ' tracking is enabled with opt-in cookie and opt-out default', { - config: { - opt_out_tracking_by_default: true, - opt_out_tracking_persistence_type: persistence_type - }, - pre_init: function() { - // Set the opt in cookie to make sure it overrides opt_out_tracking_by_default - mixpanel.init('gdpr', {opt_out_tracking_persistence_type: 'cookie'}, 'gdpr'); - mixpanel.gdpr.opt_in_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - }, - }) - - gdprTest(method + ' tracking is disabled by opt-out as default', { - opt_in: false, - config: { - opt_out_tracking_by_default: true, - opt_out_tracking_persistence_type: persistence_type - } - }); - - gdprTest(method + ' tracking is enabled by opt-out as default followed by opt-in', { - config: { - opt_out_tracking_by_default: true, - opt_out_tracking_persistence_type: persistence_type - }, - post_init: function() { - mixpanel.gdpr.opt_in_tracking(); - } - }); - - gdprTest(method + ' tracking is disabled by mp_optout cookie', { - opt_in: false, - config: {opt_out_tracking_persistence_type: persistence_type}, - pre_init: function() { - mixpanel._.cookie.set('mp_optout'); - } - }); - - gdprTest(method + ' tracking is enabled by mp_optout followed by opt-in', { - config: {opt_out_tracking_persistence_type: persistence_type}, - pre_init: function() { - mixpanel._.cookie.set('mp_optout'); - }, - post_init: function() { - mixpanel.gdpr.opt_in_tracking(); - } - }); - - // test cases using custom GDPR cookie prefix - var prefix = '𝓶𝓶𝓶𝓬𝓸𝓸𝓴𝓲𝓮𝓼'; - - gdprTest(method + ' tracking is enabled by opt-in with custom cookie prefix passed as option', { - post_init: function() { - mixpanel.gdpr.opt_in_tracking({cookie_prefix: prefix}); - } - }); - - gdprTest(method + ' tracking is not disabled by opt-out with custom cookie prefix passed as option', { - opt_in: true, - assert_user_cleared: true, - config: {opt_out_tracking_persistence_type: persistence_type}, - post_init: function() { - mixpanel.gdpr.opt_out_tracking({cookie_prefix: prefix}); - } - }); - - gdprTest(method + ' tracking is enabled by opt-in with custom cookie prefix in lib configuration', { - config: { - opt_out_tracking_cookie_prefix: prefix, - opt_out_tracking_persistence_type: persistence_type - }, - post_init: function() { - mixpanel.gdpr.opt_in_tracking(); - } - }); - - // test cases using browser DoNotTrack (DNT) setting - - // standard case: navigator.doNotTrack="1" but ignore_dnt=true - gdprTest(method + ' tracking is enabled due to ignore_dnt even with the browser DoNotTrack setting (navigator.doNotTrack="1")', { - opt_in: true, - config: {ignore_dnt: true, window: {navigator: {doNotTrack: '1'}}} - }); - - // standard case: navigator.doNotTrack="1" - gdprTest(method + ' tracking is disabled by browser DoNotTrack setting (navigator.doNotTrack="1")', { - opt_in: false, - config: {window: {navigator: {doNotTrack: '1'}}}, - }); - - // legacy Firefox case: navigator.doNotTrack="yes" - gdprTest(method + ' tracking is disabled by browser DoNotTrack setting (navigator.doNotTrack="yes")', { - opt_in: false, - config: {window: {navigator: {doNotTrack: 'yes'}}}, - }); - - // legacy Safari case: window.doNotTrack="1" - gdprTest(method + ' tracking is disabled by browser DoNotTrack setting (window.doNotTrack="1")', { - opt_in: false, - config: {window: {doNotTrack: '1'}}, - }); - - // legacy MSIE/Edge case: navigator.msDoNotTrack="1" - gdprTest(method + ' tracking is disabled by browser DoNotTrack setting (navigator.msDoNotTrack="1")', { - opt_in: false, - config: {window: {navigator: {msDoNotTrack: '1'}}}, - }); - } - - if (window.localStorage) { - gdprTest(method + ' tracking is enabled by opt-out cookie *upgraded* to localStorage', { - opt_in: true, - config: {opt_out_tracking_persistence_type: 'localStorage'}, - pre_init: function() { - // opt in with 'cookies' as configured persistence type - mixpanel.init('gdpr', {opt_out_tracking_persistence_type: 'cookie'}, 'gdpr'); - mixpanel.gdpr.opt_in_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - } - }); - - gdprTest(method + ' tracking is disabled by opt-out cookie *upgraded* to localStorage', { - opt_in: false, - config: {opt_out_tracking_persistence_type: 'localStorage'}, - pre_init: function() { - // opt out with 'cookies' as configured persistence type - mixpanel.init('gdpr', {opt_out_tracking_persistence_type: 'cookie'}, 'gdpr'); - mixpanel.gdpr.opt_out_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - } - }); - } - } - - gdprTestMethod('track' , ['event_name', {prop: 'value'}]); - gdprTestMethod('set' , ['prop_name' , 'prop_value' ]); - gdprTestMethod('set_once' , ['prop_name' , 'prop_value' ]); - gdprTestMethod('increment' , ['prop_name' , 1 ]); - gdprTestMethod('append' , ['prop_name' , 'prop_value' ]); - gdprTestMethod('union' , ['prop_name' , 'prop_value' ]); - - test('opt out of cookies', 42, function() { - var name; - - // test cookie behavior during library init - - // undecided before init: - mixpanel.init('gdpr', {}, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - ok(cookie.exists(name), 'cookie should exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-out before init: - mixpanel.init('gdpr', {}, 'gdpr'); - mixpanel.gdpr.opt_out_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', {}, 'gdpr'); - notOk(cookie.exists(name), 'cookie should not exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-in before init: - mixpanel.init('gdpr', {}, 'gdpr'); - mixpanel.gdpr.opt_in_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', {}, 'gdpr'); - ok(cookie.exists(name), 'cookie should exist'); - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior during opt in/out - mixpanel.init('gdpr', {}, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior during opt in/out with clear_persistence disabled - mixpanel.init('gdpr', {}, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking({clear_persistence: false}); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior during opt in/out with enable_persistence disabled - mixpanel.init('gdpr', {}, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - mixpanel.gdpr.opt_in_tracking({enable_persistence: false}); - notOk(cookie.exists(name), 'cookie should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior with opt-out tracking as default - // persistence should not be cleared via default opt-out so cookie should initially exist - mixpanel.init('gdpr', { - opt_out_tracking_by_default: true - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior with opt-out tracking and persistence as default - mixpanel.init('gdpr', { - opt_out_tracking_by_default: true, - opt_out_persistence_by_default: true - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - notOk(cookie.exists(name), 'cookie should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior with mp_optout cookie set - // persistence should not be cleared via default opt-out so cookie should initially exist - mixpanel._.cookie.set('mp_optout'); - mixpanel.init('gdpr', {}, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - - mixpanel._.cookie.remove('mp_optout'); - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior during library init with localStorage as persistence type - - // undecided before init: - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - ok(cookie.exists(name), 'cookie should exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-out before init: - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - mixpanel.gdpr.opt_out_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - notOk(cookie.exists(name), 'cookie should not exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-in before init: - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - mixpanel.gdpr.opt_in_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - ok(cookie.exists(name), 'cookie should exist'); - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior during opt in/out and localStorage as persistence type - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior during opt in/out with localStorage as persistence type and clear_persistence disabled - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking({clear_persistence: false}); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior during opt in/out with localStorage as persistence type and enable_persistence disabled - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - mixpanel.gdpr.opt_in_tracking({enable_persistence: false}); - notOk(cookie.exists(name), 'cookie should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior with opt-out as default and localStorage as persistence type - // persistence should not be cleared via default opt-out so cookie should initially exist - mixpanel.init('gdpr', { - opt_out_tracking_by_default: true, - opt_out_tracking_persistence_type: 'localstorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior with opt-out tracking and persistence as default and localStorage as persistence type - mixpanel.init('gdpr', { - opt_out_tracking_by_default: true, - opt_out_persistence_by_default: true, - opt_out_tracking_persistence_type: 'localstorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - notOk(cookie.exists(name), 'cookie should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test cookie behavior with mp_optout cookie set and localStorage as persistence type - // persistence should not be cleared via default opt-out so cookie should initially exist - mixpanel._.cookie.set('mp_optout'); - mixpanel.init('gdpr', { - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(cookie.exists(name), 'cookie should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(cookie.exists(name), 'cookie should not exist'); - - mixpanel._.cookie.remove('mp_optout'); - clearLibInstance(mixpanel.gdpr); - }); - - if (window.localStorage) { - test('opt out of localstorage', 42, function() { - var name; - - // test localstorage behavior during library init - - // undecided before init: - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-out before init: - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - mixpanel.gdpr.opt_out_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-in before init: - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - mixpanel.gdpr.opt_in_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior during opt in/out - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior during opt in/out with clear_persistence disabled - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking({clear_persistence: false}); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior during opt in/out with enable_persistence disabled - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - mixpanel.gdpr.opt_in_tracking({enable_persistence: false}); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior with opt-out as default - // persistence should not be cleared via default opt-out so localstorage entry should initially exist - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_by_default: true - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior with opt-out tracking and persistence as default - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_by_default: true, - opt_out_persistence_by_default: true, - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior with mp_optout cookie set - // persistence should not be cleared via default opt-out so localstorage entry should initially exist - mixpanel._.cookie.set('mp_optout'); - mixpanel.init('gdpr', { - persistence: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - mixpanel._.cookie.remove('mp_optout'); - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior during library init with localStorage as persistence type - - // undecided before init: - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-out before init: - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - mixpanel.gdpr.opt_out_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - clearLibInstance(mixpanel.gdpr); - - // opted-in before init: - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - mixpanel.gdpr.opt_in_tracking(); - clearLibInstance(mixpanel.gdpr, /* clear_opt_in_out */ false); - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior during opt in/out with localStorage as persistence type - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior during opt in/out with localStorage as persistence type and clear_persistence disabled - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking({clear_persistence: false}); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior during opt in/out with localStorage as persistence type and enable_persistence disabled - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - mixpanel.gdpr.opt_in_tracking({enable_persistence: false}); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior with opt-out as default with localStorage as persistence type - // persistence should not be cleared via default opt-out so localstorage entry should initially exist - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_by_default: true, - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior with opt-out tracking and persistence as default and localStorage as persistence type - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_by_default: true, - opt_out_persistence_by_default: true, - opt_out_tracking_persistence_type: 'localstorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - clearLibInstance(mixpanel.gdpr); - - // test localstorage behavior with mp_optout cookie set with localStorage as persistence type - // persistence should not be cleared via default opt-out so localstorage entry should initially exist - mixpanel._.cookie.set('mp_optout'); - mixpanel.init('gdpr', { - persistence: 'localStorage', - opt_out_tracking_persistence_type: 'localStorage' - }, 'gdpr'); - name = mixpanel.gdpr.persistence.name; - - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_in_tracking(); - ok(!!window.localStorage.getItem(name), 'localstorage entry should exist'); - mixpanel.gdpr.opt_out_tracking(); - notOk(!!window.localStorage.getItem(name), 'localstorage entry should not exist'); - - mixpanel._.cookie.remove('mp_optout'); - clearLibInstance(mixpanel.gdpr); - }); - } - if (document.location.hostname.split('.').length > 1) { test("opt in/out cookie cross-subdomain", 28, function() { mixpanel.init('gdpr', {opt_out_tracking_persistence_type: 'cookie'}, 'gdpr'); diff --git a/tests/unit/consent-gate.js b/tests/unit/consent-gate.js new file mode 100644 index 00000000..6301ca72 --- /dev/null +++ b/tests/unit/consent-gate.js @@ -0,0 +1,82 @@ +import { expect } from 'chai'; +import sinon from 'sinon'; + +import jsdomSetup from './jsdom-setup'; + +describe(`consent gate`, function() { + // re-required before each test so they reference the correct jsdom document + let gates; + + jsdomSetup({ + reImportModules: [`../../src/window`, `../../src/utils`, `../../src/consent-gate`], + beforeCallback: modules => { + gates = modules[2]; + }, + }); + + describe(`buildConsentGate`, function() { + it(`asks each capability by name`, function() { + const allows = sinon.spy(capability => capability !== `api_calls` && capability !== `fetch`); + const gate = gates.buildConsentGate(allows, () => false); + + expect(gate.allowsApiCalls()).to.be.false; + expect(gate.allowsSending()).to.be.true; + expect(gate.allowsFetching()).to.be.false; + expect(gate.allowsStoring()).to.be.true; + expect(allows.args.map(args => args[0])).to.deep.equal([`api_calls`, `send`, `fetch`, `store`]); + }); + + it(`lets the calls run if asking throws`, function() { + const gate = gates.buildConsentGate(() => { + throw new Error(`Unexpected error!`); + }, () => false); + + expect(gate.allowsApiCalls()).to.be.true; + }); + + it(`allows persistence when consent allows storing and disable_persistence is off`, function() { + expect(gates.buildConsentGate(() => true, () => false).allowsPersistence()).to.be.true; + }); + + it(`doesn't allow persistence with disable_persistence`, function() { + const gate = gates.buildConsentGate(() => true, key => key === `disable_persistence`); + expect(gate.allowsPersistence()).to.be.false; + }); + + it(`doesn't allow persistence without consent to store`, function() { + const gate = gates.buildConsentGate(capability => capability !== `store`, () => false); + expect(gate.allowsPersistence()).to.be.false; + }); + }); + + describe(`consentGateFor`, function() { + function makeInstance(config, consentAllows, hasOptedOut = false) { + return { + get_config: key => config[key], + has_opted_out_tracking: () => hasOptedOut, + _consent_allows: consentAllows, + }; + } + + it(`asks the core's _consent_allows`, function() { + const gate = gates.consentGateFor(makeInstance({}, capability => capability !== `api_calls`)); + + expect(gate.allowsApiCalls()).to.be.false; + expect(gate.allowsSending()).to.be.true; + }); + + it(`stops only the calls after an opt-out, for a core without _consent_allows`, function() { + const gate = gates.consentGateFor(makeInstance({}, undefined, true)); + + expect(gate.allowsApiCalls()).to.be.false; + expect(gate.allowsStoring()).to.be.true; + expect(gates.consentGateFor(makeInstance({})).allowsApiCalls()).to.be.true; + }); + + it(`reads disable_persistence from the core's config`, function() { + expect(gates.consentGateFor(makeInstance({}, () => true)).allowsPersistence()).to.be.true; + expect(gates.consentGateFor(makeInstance({disable_persistence: true}, () => true)).allowsPersistence()).to.be.false; + expect(gates.consentGateFor(makeInstance({disable_persistence: true})).allowsPersistence()).to.be.false; + }); + }); +}); diff --git a/tests/unit/consent-manager.js b/tests/unit/consent-manager.js new file mode 100644 index 00000000..92c710ab --- /dev/null +++ b/tests/unit/consent-manager.js @@ -0,0 +1,407 @@ +import { expect } from 'chai'; +import path from 'path'; +import sinon from 'sinon'; + +import jsdomSetup from './jsdom-setup'; + +const TOKEN = `consent-manager-token`; +const SRC_DIR = path.resolve(__dirname, `../../src`); + +describe(`consent manager`, function() { + let ConsentManager, resolveConsentMode, readDecision, utils, setPersistenceDisabled, deleteUser, startTracking, stopTracking, purgeIdentifiers; + + jsdomSetup({ + url: `https://www.example.com/`, + beforeCallback: () => { + // utils binds document at import, so every src module is re-imported against this jsdom + Object.keys(require.cache) + .filter(modulePath => modulePath.startsWith(SRC_DIR)) + .forEach(modulePath => delete require.cache[modulePath]); + ({ConsentManager} = require(`../../src/consent-manager`)); + ({resolveConsentMode, readDecision} = require(`../../src/consent-modes`)); + utils = require(`../../src/utils`); + window.localStorage.clear(); + setPersistenceDisabled = sinon.spy(); + deleteUser = sinon.spy(); + startTracking = sinon.spy(); + stopTracking = sinon.spy(); + purgeIdentifiers = sinon.spy(); + }, + }); + + function newManager(config = {}, trackFunc = () => {}) { + const fullConfig = Object.assign({ + token: TOKEN, + opt_out_tracking_by_default: false, + opt_out_persistence_by_default: false, + opt_out_tracking_persistence_type: `localStorage`, + ignore_dnt: false, + window: {navigator: {}}, + }, config); + return new ConsentManager({ + getConfigFunc: key => fullConfig[key], + trackFunc, + setPersistenceDisabledFunc: setPersistenceDisabled, + deleteUserFunc: deleteUser, + startTrackingFunc: startTracking, + stopTrackingFunc: stopTracking, + purgeIdentifiersFunc: purgeIdentifiers, + }); + } + + describe(`resolveConsentMode`, function() { + it(`is 'no_consent_required' without consent_mode`, function() { + expect(resolveConsentMode(undefined)).to.equal(`no_consent_required`); + expect(resolveConsentMode(null)).to.equal(`no_consent_required`); + }); + + it(`is consent_mode when it's a known mode`, function() { + expect(resolveConsentMode(`no_consent_required`)).to.equal(`no_consent_required`); + expect(resolveConsentMode(`require_consent`)).to.equal(`require_consent`); + }); + + it(`is 'require_consent' for an unknown consent_mode`, function() { + expect(resolveConsentMode(`opt_in`)).to.equal(`require_consent`); + expect(resolveConsentMode(`hasOwnProperty`)).to.equal(`require_consent`); + }); + }); + + describe(`readDecision`, function() { + it(`is the stored flag's decision`, function() { + expect(readDecision(false, `1`)).to.equal(`opted_in`); + expect(readDecision(false, `0`)).to.equal(`opted_out`); + expect(readDecision(false, null)).to.equal(`none`); + }); + + it(`is 'objected' under Do Not Track, whatever the stored flag`, function() { + expect(readDecision(true, `1`)).to.equal(`objected`); + }); + }); + + describe(`mode`, function() { + it(`is 'no_consent_required' without consent_mode, whatever opt_out_tracking_by_default says`, function() { + expect(newManager({opt_out_tracking_by_default: true}).mode).to.equal(`no_consent_required`); + expect(newManager().mode).to.equal(`no_consent_required`); + }); + + it(`is consent_mode when set, whatever opt_out_tracking_by_default says`, function() { + expect(newManager({consent_mode: `no_consent_required`, opt_out_tracking_by_default: true}).mode).to.equal(`no_consent_required`); + expect(newManager({consent_mode: `require_consent`}).mode).to.equal(`require_consent`); + }); + + it(`falls back to 'require_consent' for an unknown consent_mode`, function() { + expect(newManager({consent_mode: `opt_in`}).mode).to.equal(`require_consent`); + }); + }); + + describe(`allows`, function() { + it(`allows everything without a decision under 'no_consent_required'`, function() { + const manager = newManager(); + + [`api_calls`, `send`, `fetch`, `store`].forEach(capability => { + expect(manager.allows(capability)).to.equal(true); + }); + }); + + it(`stops only the calls after an opt-out`, function() { + const manager = newManager(); + + manager.optOut(); + + expect(manager.state()).to.equal(`api_calls_stopped`); + expect(manager.allows(`api_calls`)).to.equal(false); + [`send`, `fetch`, `store`].forEach(capability => { + expect(manager.allows(capability)).to.equal(true); + }); + }); + + it(`answers the consent gate's questions from the same state`, function() { + const manager = newManager(); + + manager.optOut(); + + expect(manager.allowsApiCalls()).to.equal(false); + expect(manager.allowsSending()).to.equal(true); + expect(manager.allowsFetching()).to.equal(true); + expect(manager.allowsStoring()).to.equal(true); + }); + + it(`answers send, fetch and store without reading the decision`, function() { + const manager = newManager(); + const readDecision = sinon.spy(manager.decisions, `_readDecision`); + + [`send`, `fetch`, `store`].forEach(capability => manager.allows(capability)); + expect(readDecision.called).to.equal(false); + + manager.allows(`api_calls`); + expect(readDecision.calledOnce).to.equal(true); + }); + + it(`allows calls again after an opt-in`, function() { + const manager = newManager(); + manager.optOut(); + + manager.optIn(); + + expect(manager.state()).to.equal(`full`); + expect(manager.allows(`api_calls`)).to.equal(true); + }); + }); + + describe(`allowsPersistence`, function() { + it(`allows persistence when consent allows storing`, function() { + expect(newManager().allowsPersistence()).to.equal(true); + }); + + it(`doesn't allow persistence with disable_persistence, while consent still allows storing`, function() { + const manager = newManager({disable_persistence: true}); + + expect(manager.allows(`store`)).to.equal(true); + expect(manager.allowsPersistence()).to.equal(false); + }); + + it(`doesn't allow persistence without consent to store`, function() { + expect(newManager({consent_mode: `require_consent`}).allowsPersistence()).to.equal(false); + }); + }); + + describe(`init`, function() { + it(`opts out with opt_out_tracking_by_default when nothing is stored, without clearing persistence`, function() { + const manager = newManager({opt_out_tracking_by_default: true}); + + manager.init(); + + expect(manager.hasOptedOut()).to.equal(true); + expect(manager.allows(`api_calls`)).to.equal(false); + expect(setPersistenceDisabled.called).to.equal(false); + }); + + it(`clears persistence for the default opt-out with opt_out_persistence_by_default`, function() { + newManager({opt_out_tracking_by_default: true, opt_out_persistence_by_default: true}).init(); + + expect(setPersistenceDisabled.calledOnceWith(true)).to.equal(true); + }); + + it(`leaves a stored opt-in alone with opt_out_tracking_by_default`, function() { + newManager().optIn(); + setPersistenceDisabled.resetHistory(); + + const manager = newManager({opt_out_tracking_by_default: true}); + manager.init(); + + expect(manager.allows(`api_calls`)).to.equal(true); + expect(setPersistenceDisabled.called).to.equal(false); + }); + + it(`ignores opt_out_tracking_by_default with consent_mode 'no_consent_required'`, function() { + const manager = newManager({consent_mode: `no_consent_required`, opt_out_tracking_by_default: true}); + + manager.init(); + + expect(manager.hasOptedOut()).to.equal(false); + expect(manager.allows(`api_calls`)).to.equal(true); + }); + + it(`doesn't opt out under 'no_consent_required'`, function() { + const manager = newManager({}); + + manager.init(); + + expect(manager.allows(`api_calls`)).to.equal(true); + }); + + it(`turns persistence off for a stored opt-out`, function() { + newManager().optOut(); + setPersistenceDisabled.resetHistory(); + + newManager().init(); + + expect(setPersistenceDisabled.calledOnceWith(true)).to.equal(true); + }); + + it(`moves a cookie flag to localStorage`, function() { + newManager({opt_out_tracking_persistence_type: `cookie`}).optIn(); + + newManager().init(); + + expect(window.localStorage.getItem(`__mp_opt_in_out_${TOKEN}`)).to.equal(`1`); + expect(document.cookie).not.to.contain(`__mp_opt_in_out_${TOKEN}`); + }); + }); + + describe(`decisions`, function() { + it(`sends $opt_in and turns persistence back on at an opt-in`, function() { + const track = sinon.spy(); + const manager = newManager({}, track); + + manager.optIn({track_event_name: `Opted in`}); + + expect(track.calledOnceWith(`Opted in`)).to.equal(true); + expect(setPersistenceDisabled.calledOnceWith(false)).to.equal(true); + expect(manager.hasOptedIn()).to.equal(true); + }); + + it(`deletes the user and turns persistence off at an opt-out`, function() { + const manager = newManager(); + + manager.optOut(); + + expect(deleteUser.calledOnce).to.equal(true); + expect(setPersistenceDisabled.calledOnceWith(true)).to.equal(true); + expect(manager.allows(`api_calls`)).to.equal(false); + }); + + it(`follows an opt-out's delete_user and clear_persistence options`, function() { + newManager().optOut({delete_user: false, clear_persistence: false}); + + expect(deleteUser.called).to.equal(false); + expect(setPersistenceDisabled.called).to.equal(false); + }); + + it(`clears the flag and turns persistence back on`, function() { + const manager = newManager(); + manager.optOut(); + setPersistenceDisabled.resetHistory(); + + manager.clear(); + + expect(manager.hasOptedOut()).to.equal(false); + expect(manager.hasOptedIn()).to.equal(false); + expect(setPersistenceDisabled.calledOnceWith(false)).to.equal(true); + }); + + it(`sees a decision another tab stores`, function() { + const manager = newManager(); + + newManager().optOut(); + + expect(manager.allows(`api_calls`)).to.equal(false); + }); + + it(`reads an opt-in under Do Not Track, which still blocks calls`, function() { + newManager().optIn(); + + const manager = newManager({window: {navigator: {doNotTrack: `1`}}}); + + expect(manager.hasOptedIn()).to.equal(true); + expect(manager.hasOptedOut()).to.equal(true); + expect(manager.allows(`api_calls`)).to.equal(false); + }); + + it(`blocks calls under Do Not Track`, function() { + expect(newManager({window: {navigator: {doNotTrack: `1`}}}).allows(`api_calls`)).to.equal(false); + expect(newManager({window: {navigator: {doNotTrack: `1`}}, ignore_dnt: true}).allows(`api_calls`)).to.equal(true); + }); + }); + + describe(`consent_mode: 'require_consent'`, function() { + const COOKIE_FLAG = `__mp_opt_in_out_${TOKEN}`; + const requireConsent = (config = {}, trackFunc = () => {}) => + newManager(Object.assign({consent_mode: `require_consent`, persistence: `cookie`}, config), trackFunc); + + afterEach(function() { + sinon.restore(); + }); + + it(`allows nothing and deletes stored identifiers without a decision`, function() { + const manager = requireConsent(); + + manager.init(); + + expect(manager.state()).to.equal(`blocked`); + [`api_calls`, `send`, `fetch`, `store`].forEach(capability => { + expect(manager.allows(capability)).to.equal(false); + }); + expect(purgeIdentifiers.calledOnce).to.equal(true); + }); + + it(`starts tracking at an opt-in, then sends $opt_in`, function() { + const track = sinon.spy(); + const manager = requireConsent({}, track); + + manager.optIn({track_event_name: `Opted in`}); + + expect(manager.state()).to.equal(`full`); + expect(startTracking.calledOnce).to.equal(true); + expect(track.calledOnceWith(`Opted in`)).to.equal(true); + expect(startTracking.calledBefore(track)).to.equal(true); + expect(document.cookie).to.contain(`${COOKIE_FLAG}=1`); + expect(requireConsent().state()).to.equal(`full`); + }); + + it(`stops tracking and deletes identifiers at a withdrawal`, function() { + const manager = requireConsent(); + manager.optIn(); + purgeIdentifiers.resetHistory(); + + manager.optOut(); + + expect(stopTracking.calledOnce).to.equal(true); + expect(purgeIdentifiers.calledOnce).to.equal(true); + expect(manager.state()).to.equal(`blocked`); + expect(manager.hasOptedOut()).to.equal(true); + expect(deleteUser.called).to.equal(false); + }); + + it(`applies a withdrawal on the page even when storing it fails`, function() { + const manager = requireConsent(); + manager.optIn(); + sinon.stub(manager.decisions, `_writeDecisionKey`); + + manager.optOut(); + + expect(document.cookie).to.contain(`${COOKIE_FLAG}=1`); + expect(manager.allows(`store`)).to.equal(false); + expect(stopTracking.called).to.equal(true); + }); + + it(`goes back to no decision on clear`, function() { + const manager = requireConsent(); + manager.optOut(); + + manager.clear(); + + expect(manager.hasOptedOut()).to.equal(false); + expect(document.cookie).not.to.contain(COOKIE_FLAG); + }); + + it(`stays blocked under Do Not Track, even after an opt-in`, function() { + const manager = requireConsent({window: {navigator: {doNotTrack: `1`}}}); + + manager.optIn(); + + expect(manager.state()).to.equal(`blocked`); + expect(startTracking.called).to.equal(false); + }); + + it(`keeps this page's state when another tab decides`, function() { + const manager = requireConsent(); + expect(manager.state()).to.equal(`blocked`); + + requireConsent().optIn(); + + expect(manager.state()).to.equal(`blocked`); + expect(manager.allows(`store`)).to.equal(false); + }); + + it(`removes the decision cookie at every scope before storing it`, function() { + const remove = sinon.spy(utils._.cookie, `remove`); + const manager = requireConsent({cookie_domain: `.example.com`}); + + manager.optOut(); + + expect(remove.calledWith(COOKIE_FLAG)).to.equal(true); + expect(remove.calledWith(COOKIE_FLAG, true)).to.equal(true); + expect(remove.calledWith(COOKIE_FLAG, false, `.example.com`)).to.equal(true); + }); + + it(`keeps an identify() until it's taken`, function() { + const manager = requireConsent(); + + manager.holdIdentify([`user-1`]); + + expect(manager.takeHeldIdentify()).to.deep.equal([`user-1`]); + expect(manager.takeHeldIdentify()).to.equal(null); + }); + }); +}); diff --git a/tests/unit/consent-required.js b/tests/unit/consent-required.js new file mode 100644 index 00000000..c8390354 --- /dev/null +++ b/tests/unit/consent-required.js @@ -0,0 +1,498 @@ +import { expect } from 'chai'; +import path from 'path'; +import sinon from 'sinon'; + +import jsdomSetup from './jsdom-setup'; + +const TOKEN = `consent-required-token`; +const SRC_DIR = path.resolve(__dirname, `../../src`); +const OPT_IN_OUT_KEY = `__mp_opt_in_out_${TOKEN}`; +const PERSISTENCE_KEY = `mp_${TOKEN}_mixpanel`; +const EVENT_QUEUE_KEY = `__mpq_${TOKEN}_ev`; +const TAB_ID_KEY = name => `mp_tab_id_${name}_${TOKEN}`; +const REAL_CONFIG = { + persistence: `localStorage`, + batch_requests: true, + autocapture: true, + track_pageview: true, + record_sessions_percent: 100, + flags: {context: {}}, +}; + +// the modes that store and send nothing identifying before consent +const CONSENT_REQUIRED_MODES = [`require_consent`]; + +CONSENT_REQUIRED_MODES.forEach(mode => describe(`consent_mode: '${mode}'`, function() { + let mixpanel, loadExtraBundle; + + // registered before jsdomSetup so it runs before the jsdom window is torn down + afterEach(function() { + sinon.restore(); + }); + + jsdomSetup({ + beforeCallback: () => { + // every src module must bind to this test's jsdom window and start with a fresh localStorage probe + Object.keys(require.cache) + .filter(modulePath => modulePath.startsWith(SRC_DIR)) + .forEach(modulePath => delete require.cache[modulePath]); + const {init_as_module} = require(`../../src/mixpanel-core`); + loadExtraBundle = sinon.spy(); + mixpanel = init_as_module(loadExtraBundle); + window.localStorage.clear(); + }, + }); + + function initInstance(config, name = `consent_required`) { + const instance = mixpanel.init(TOKEN, Object.assign({ + consent_mode: mode, + opt_out_tracking_by_default: true, + batch_requests: false, + }, config), name); + sinon.stub(instance, `_send_request`); + return instance; + } + + function sentEvents(instance) { + return instance._send_request.getCalls().map(call => JSON.parse(call.args[1].data)); + } + + function isBlocked(instance) { + const callback = sinon.spy(); + instance.track(`consent check`, {}, callback); + return callback.calledWith(0); + } + + describe(`before consent`, function() { + it(`should write no cookie, localStorage or sessionStorage and send nothing`, function() { + const setItem = sinon.spy(window.Storage.prototype, `setItem`); + const instance = initInstance({persistence: `localStorage`}); + const callback = sinon.spy(); + + instance.register({plan: `pro`}); + instance.identify(`user-1`); + instance.alias(`user-1-alias`); + instance.people.set({name: `visitor`}); + instance.track(`page`, {}, callback); + instance.reset(); + + expect(setItem.called).to.equal(false); + expect(document.cookie).to.equal(``); + expect(instance._send_request.called).to.equal(false); + expect(callback.calledWith(0)).to.equal(true); + expect(instance.get_distinct_id()).to.equal(undefined); + expect(instance.get_tab_id()).to.equal(null); + }); + + it(`should open no storage and make no requests with autocapture, replay and flags on`, async function() { + const setItem = sinon.spy(window.Storage.prototype, `setItem`); + window.indexedDB = {open: sinon.spy(), databases: () => Promise.resolve([])}; + window.fetch = sinon.spy(() => new Promise(() => {})); + const instance = initInstance(REAL_CONFIG); + + document.body.innerHTML = ``; + document.getElementById(`buy`).click(); + instance.track_pageview(); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(setItem.called).to.equal(false); + expect(document.cookie).to.equal(``); + expect(window.indexedDB.open.called).to.equal(false); + expect(window.fetch.called).to.equal(false); + expect(loadExtraBundle.called).to.equal(false); + expect(instance._send_request.called).to.equal(false); + expect(instance.are_batchers_initialized()).to.equal(false); + }); + + it(`should delete identifiers a page load before consent mode left behind`, function() { + window.localStorage.setItem(PERSISTENCE_KEY, JSON.stringify({distinct_id: `stored-id`, $device_id: `stored-device`})); + window.localStorage.setItem(EVENT_QUEUE_KEY, JSON.stringify([{id: `queued`, payload: {event: `old`}}])); + window.sessionStorage.setItem(TAB_ID_KEY(`consent_required`), `$tab-stored`); + + const instance = initInstance({persistence: `localStorage`}); + + expect(window.localStorage.getItem(PERSISTENCE_KEY)).to.equal(null); + expect(window.localStorage.getItem(EVENT_QUEUE_KEY)).to.equal(null); + expect(window.sessionStorage.length).to.equal(0); + expect(instance.get_distinct_id()).to.equal(undefined); + }); + + it(`should report a stored refusal as opted out, and no decision as neither`, function() { + const undecided = initInstance({}, `consent_required_undecided`); + expect(undecided.has_opted_out_tracking()).to.equal(false); + expect(undecided.has_opted_in_tracking()).to.equal(false); + + window.localStorage.setItem(OPT_IN_OUT_KEY, `0`); + const instance = initInstance({persistence: `localStorage`}); + + expect(instance.has_opted_in_tracking()).to.equal(false); + expect(instance.has_opted_out_tracking()).to.equal(true); + expect(isBlocked(instance)).to.equal(true); + }); + + it(`should store nothing on Do Not Track, even with a stored or new opt-in`, function() { + window.localStorage.setItem(OPT_IN_OUT_KEY, `1`); + const setItem = sinon.spy(window.Storage.prototype, `setItem`); + const instance = initInstance({persistence: `localStorage`, window: {navigator: {doNotTrack: `1`}}}); + + instance.register({plan: `pro`}); + instance.opt_in_tracking(); + + expect(setItem.called).to.equal(false); + expect(instance.get_distinct_id()).to.equal(undefined); + expect(instance.has_opted_out_tracking()).to.equal(true); + expect(isBlocked(instance)).to.equal(true); + }); + + it(`should track a visitor who opted in, and send no $opt_in at init`, function() { + document.cookie = `${OPT_IN_OUT_KEY}=1`; + const sendRequest = sinon.stub(Object.getPrototypeOf(mixpanel), `_send_request`); + const instance = mixpanel.init(TOKEN, {consent_mode: mode, batch_requests: false}, `consent_required`); + + expect(instance.get_distinct_id()).to.match(/^\$device:/); + expect(instance.has_opted_in_tracking()).to.equal(true); + expect(sendRequest.called).to.equal(false); + expect(isBlocked(instance)).to.equal(false); + }); + }); + + describe(`opt-in`, function() { + it(`should store a new device ID and send $opt_in and later events with it`, function() { + const instance = initInstance({persistence: `localStorage`}); + instance.register({plan: `pro`, tags: [`new`]}); + instance.people.set({name: `visitor`}); + instance.people.increment({visits: 2}); + + instance.opt_in_tracking(); + instance.track(`after consent`); + + const distinctId = instance.get_distinct_id(); + const stored = JSON.parse(window.localStorage.getItem(PERSISTENCE_KEY)); + expect(distinctId).to.match(/^\$device:/); + expect(stored.distinct_id).to.equal(distinctId); + expect(stored.plan).to.equal(`pro`); + expect(stored.tags).to.deep.equal([`new`]); + expect(stored.__mps || {}).to.not.have.property(`name`); + expect(stored.__mpa || {}).to.not.have.property(`visits`); + expect(window.localStorage.getItem(OPT_IN_OUT_KEY)).to.equal(`1`); + expect(sentEvents(instance).map(event => [event.event, event.properties.distinct_id])).to.deep.equal([ + [`$opt_in`, distinctId], + [`after consent`, distinctId], + ]); + }); + + it(`should start batching, flags and replay`, async function() { + window.indexedDB = {open: sinon.spy(), databases: () => Promise.resolve([])}; + window.fetch = sinon.spy(() => new Promise(() => {})); + const instance = initInstance(REAL_CONFIG); + + try { + instance.opt_in_tracking(); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(instance.are_batchers_initialized()).to.equal(true); + expect(window.fetch.called).to.equal(true); + expect(loadExtraBundle.calledWithMatch(/recorder/i)).to.equal(true); + expect(instance.get_tab_id()).to.match(/^\$tab-/); + } finally { + instance.stop_batch_senders(); + } + }); + + it(`should fetch remote settings only after consent`, async function() { + window.fetch = sinon.spy(() => new Promise(() => {})); + const instance = initInstance({remote_settings_mode: `strict`}); + const settingsFetches = () => window.fetch.getCalls().filter(call => /settings/.test(call.args[0])); + + await new Promise(resolve => setTimeout(resolve, 0)); + expect(settingsFetches()).to.have.length(0); + + instance.opt_in_tracking(); + await new Promise(resolve => setTimeout(resolve, 0)); + expect(settingsFetches()).to.have.length(1); + }); + + it(`should start a new identity after reset() before consent`, function() { + window.localStorage.setItem(PERSISTENCE_KEY, JSON.stringify({ + distinct_id: `stored-id`, + $device_id: `stored-device`, + $user_id: `stored-user`, + })); + const instance = initInstance({persistence: `localStorage`}); + + instance.reset(); + instance.register({plan: `pro`}); + instance.opt_in_tracking(); + + const stored = JSON.parse(window.localStorage.getItem(PERSISTENCE_KEY)); + expect(stored.distinct_id).to.match(/^\$device:/); + expect(stored.$device_id).to.not.equal(`stored-device`); + expect(stored).to.not.have.property(`$user_id`); + expect(stored.plan).to.equal(`pro`); + }); + + it(`should start replay from a recording trigger on $opt_in`, async function() { + const instance = initInstance({record_sessions_percent: 0, recording_event_triggers: {$opt_in: {percentage: 100}}}); + + instance.opt_in_tracking(); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(loadExtraBundle.calledWithMatch(/recorder/i)).to.equal(true); + }); + + it(`should not start collecting when another tab opts in`, function() { + const instance = initInstance({persistence: `localStorage`}); + const otherTab = initInstance({persistence: `localStorage`}, `consent_required_other_tab`); + + otherTab.opt_in_tracking({track: null}); + + expect(isBlocked(instance)).to.equal(true); + expect(instance.get_distinct_id()).to.equal(undefined); + expect(instance._send_request.called).to.equal(false); + }); + + it(`should apply the latest identify() made before consent at opt-in, and drop alias()`, function() { + const instance = initInstance({persistence: `localStorage`}); + instance.identify(`user-0`); + instance.identify(`user-1`); + instance.alias(`alias-1`); + expect(instance._send_request.called).to.equal(false); + + instance.opt_in_tracking(); + + expect(instance.get_distinct_id()).to.equal(`user-1`); + expect(JSON.parse(window.localStorage.getItem(PERSISTENCE_KEY)).$user_id).to.equal(`user-1`); + const events = sentEvents(instance).filter(event => event.event); + expect(events.map(event => [event.event, event.properties.distinct_id])).to.deep.equal([ + [`$identify`, `user-1`], + [`$opt_in`, `user-1`], + ]); + }); + + it(`should discard an identify() held before consent on reset()`, function() { + const instance = initInstance(); + instance.identify(`user-1`); + instance.reset(); + + instance.opt_in_tracking({track: null}); + + expect(instance.get_distinct_id()).to.match(/^\$device:/); + }); + + it(`should send $opt_in with its options on a repeated opt-in, and none with track: null`, function() { + const instance = initInstance(); + instance.opt_in_tracking({track: null}); + expect(instance._send_request.called).to.equal(false); + + instance.opt_in_tracking({track_event_name: `Accepted again`, track_properties: {source: `banner`}}); + + const events = sentEvents(instance); + expect(events.map(event => event.event)).to.deep.equal([`Accepted again`]); + expect(events[0].properties.source).to.equal(`banner`); + }); + + it(`should start the batch senders a page started before consent`, function() { + const instance = initInstance({batch_requests: true, batch_autostart: false}); + instance.start_batch_senders(); + + try { + instance.opt_in_tracking({track: null}); + + expect(instance.request_batchers.events.stopped).to.equal(false); + } finally { + instance.stop_batch_senders(); + } + }); + + it(`should reuse the identity stored under an earlier consent`, function() { + const first = initInstance({persistence: `localStorage`}); + first.opt_in_tracking({track: null}); + const consented_id = first.get_distinct_id(); + + const reloaded = initInstance({persistence: `localStorage`}, `consent_required_reloaded`); + + expect(reloaded.get_distinct_id()).to.equal(consented_id); + }); + + }); + + describe(`opt-out`, function() { + it(`should store the refusal and keep tracking off`, function() { + const instance = initInstance(); + + instance.opt_out_tracking(); + + expect(document.cookie).to.contain(`${OPT_IN_OUT_KEY}=0`); + expect(instance.has_opted_out_tracking()).to.equal(true); + expect(isBlocked(initInstance({}, `consent_required_reloaded`))).to.equal(true); + }); + }); + + describe(`withdrawal after opt-in`, function() { + it(`should not start replay when consent is withdrawn while the recorder bundle loads`, async function() { + const instance = initInstance({record_sessions_percent: 100}); + instance.opt_in_tracking(); + await new Promise(resolve => setTimeout(resolve, 0)); + const recorderBundleLoaded = loadExtraBundle.getCalls().find(call => /recorder/i.test(call.args[0])).args[1]; + + instance.opt_out_tracking(); + window.__mp_recorder = sinon.spy(); + recorderBundleLoaded(); + + expect(window.__mp_recorder.called).to.equal(false); + }); + + it(`should stop storing and sending on opt-out`, async function() { + const instance = initInstance({persistence: `localStorage`}); + instance.opt_in_tracking(); + instance._send_request.resetHistory(); + + instance.opt_out_tracking({clear_persistence: false}); + const setItem = sinon.spy(window.Storage.prototype, `setItem`); + instance.register({plan: `pro`}); + // late remote settings call set_config() too + instance.set_config({}); + const callback = sinon.spy(); + instance.track(`after refusal`, {}, callback); + + expect(instance.has_opted_in_tracking()).to.equal(false); + expect(window.localStorage.getItem(PERSISTENCE_KEY)).to.equal(null); + expect(setItem.called).to.equal(false); + await new Promise(resolve => setTimeout(resolve, 0)); + expect(instance.get_tab_id()).to.equal(null); + expect(window.sessionStorage.length).to.equal(0); + expect(callback.calledWith(0)).to.equal(true); + expect(instance._send_request.called).to.equal(false); + }); + + it(`should stop storing and sending and delete the stored identity on clear_opt_in_out_tracking()`, async function() { + const instance = initInstance({persistence: `localStorage`}); + instance.opt_in_tracking(); + expect(window.localStorage.getItem(PERSISTENCE_KEY)).to.not.equal(null); + instance._send_request.resetHistory(); + + instance.clear_opt_in_out_tracking(); + const callback = sinon.spy(); + instance.track(`after clear`, {}, callback); + + expect(instance.has_opted_in_tracking()).to.equal(false); + expect(instance.has_opted_out_tracking()).to.equal(false); + expect(window.localStorage.getItem(OPT_IN_OUT_KEY)).to.equal(null); + expect(window.localStorage.getItem(PERSISTENCE_KEY)).to.equal(null); + await new Promise(resolve => setTimeout(resolve, 0)); + expect(window.sessionStorage.length).to.equal(0); + expect(callback.calledWith(0)).to.equal(true); + expect(instance._send_request.called).to.equal(false); + }); + + it(`should start tracking again with the same identity when consent is given again on the same page`, function() { + const instance = initInstance(); + instance.opt_in_tracking({track: null}); + const firstId = instance.get_distinct_id(); + instance.opt_out_tracking(); + instance._send_request.resetHistory(); + + instance.opt_in_tracking(); + instance.track(`page`); + + expect(sentEvents(instance).map(event => event.event)).to.deep.equal([`$opt_in`, `page`]); + expect(instance.has_opted_in_tracking()).to.equal(true); + expect(isBlocked(instance)).to.equal(false); + expect(instance.get_distinct_id()).to.equal(firstId); + expect(document.cookie).to.contain(PERSISTENCE_KEY); + }); + + it(`should send nothing through a direct request once tracking stops`, function() { + const instance = initInstance(); + instance.opt_in_tracking({track: null}); + instance.opt_out_tracking(); + instance._send_request.restore(); + const xhrSend = sinon.spy(window.XMLHttpRequest.prototype, `send`); + window.fetch = sinon.spy(); + const callback = sinon.spy(); + + const sent = instance._send_request(`https://api-js.mixpanel.com/track/`, {data: `e30=`}, {}, callback); + + expect(sent).to.equal(false); + expect(callback.calledWith(0)).to.equal(true); + expect(xhrSend.called).to.equal(false); + expect(window.fetch.called).to.equal(false); + }); + }); + + describe(`consent state`, function() { + it(`should store the opt-in under the configured key whatever cookie_prefix the call passes`, function() { + const instance = initInstance(); + + instance.opt_in_tracking({cookie_prefix: `my_consent_`}); + + expect(document.cookie).to.contain(`${OPT_IN_OUT_KEY}=1`); + expect(isBlocked(initInstance({}, `consent_required_reloaded`))).to.equal(false); + }); + + it(`should track and store as before without consent_mode`, function() { + const instance = mixpanel.init(TOKEN, {batch_requests: false}, `no_consent_mode`); + sinon.stub(instance, `_send_request`); + + instance.track(`page`); + + expect(instance._consent.mode).to.equal(`no_consent_required`); + expect(instance.get_config(`consent_mode`)).to.equal(null); + expect(instance.get_distinct_id()).to.match(/^\$device:/); + expect(document.cookie).to.contain(PERSISTENCE_KEY); + expect(sentEvents(instance).map(event => event.event)).to.deep.equal([`page`]); + + instance.opt_out_tracking(); + + expect(isBlocked(instance)).to.equal(true); + }); + + it(`should store and send nothing before consent under consent_mode 'require_consent', then track`, function() { + const instance = initInstance({consent_mode: `require_consent`, persistence: `localStorage`}); + const callback = sinon.spy(); + + instance.track(`page`, {}, callback); + + expect(callback.calledWith(0)).to.equal(true); + expect(instance._consent.state()).to.equal(`blocked`); + expect(window.localStorage.getItem(PERSISTENCE_KEY)).to.equal(null); + expect(document.cookie).not.to.contain(TOKEN); + expect(instance._send_request.called).to.equal(false); + + instance.opt_in_tracking(); + instance.track(`page`); + + expect(sentEvents(instance).map(event => event.event)).to.deep.equal([`$opt_in`, `page`]); + expect(window.localStorage.getItem(PERSISTENCE_KEY)).to.not.equal(null); + }); + + it(`should keep the old opt_out_tracking_by_default behaviour without consent_mode`, function() { + const instance = mixpanel.init(TOKEN, {opt_out_tracking_by_default: true, batch_requests: false}, `opt_out_by_default`); + + expect(instance._consent.mode).to.equal(`no_consent_required`); + expect(isBlocked(instance)).to.equal(true); + expect(instance.get_distinct_id()).to.match(/^\$device:/); + }); + + it(`should treat an unknown consent_mode as 'require_consent'`, function() { + const instance = initInstance({consent_mode: `requireConsent`}); + const callback = sinon.spy(); + + instance.track(`page`, {}, callback); + + expect(callback.calledWith(0)).to.equal(true); + expect(instance._consent.mode).to.equal(`require_consent`); + expect(instance._send_request.called).to.equal(false); + }); + + it(`should ignore consent_mode changes after init`, function() { + const instance = initInstance(); + + instance.set_config({consent_mode: null}); + instance.opt_in_tracking(); + + expect(instance.get_config(`consent_mode`)).to.equal(mode); + expect(instance.has_opted_in_tracking()).to.equal(true); + }); + }); +})); diff --git a/tests/unit/flags-persistence.js b/tests/unit/flags-persistence.js index aee6347d..bc5a7dcd 100644 --- a/tests/unit/flags-persistence.js +++ b/tests/unit/flags-persistence.js @@ -2,6 +2,7 @@ import chai, { expect } from "chai"; import sinon from "sinon"; import sinonChai from "sinon-chai"; +import { window } from "../../src/window"; import { setupFakeIDB } from "./test-utils/indexed-db"; import { FeatureFlagPersistence, @@ -335,15 +336,24 @@ describe(`FeatureFlagPersistence`, function () { }); it(`is a no-op when disable_persistence is true`, async function () { - const persistence = new FeatureFlagPersistence({ + const seed = makePersistence(); + await seed.save(context, new Map([[`flagA`, { key: `varA`, value: `1` }]])); + const disabledInstance = new FeatureFlagPersistence({ variantLookupPolicy: VariantLookupPolicy.PERSISTENCE_UNTIL_NETWORK_SUCCESS, }, TEST_TOKEN, function() { return true; }); - const initSpy = sinon.spy(persistence.idb, `init`); + const openSpy = sinon.spy(window.indexedDB, `open`); - await persistence.clear(); + await disabledInstance.clear(); - expect(initSpy).to.not.have.been.called; + expect(openSpy).to.not.have.been.called; sinon.restore(); }); + + it(`doesn't create the database on a device that has none`, async function () { + await makePersistence().clear(); + + const databases = await window.indexedDB.databases(); + expect(databases.map(database => database.name)).to.not.include(`mixpanelFlagsDb`); + }); }); }); diff --git a/tests/unit/flags.js b/tests/unit/flags.js index 8883f92e..e1140f0d 100644 --- a/tests/unit/flags.js +++ b/tests/unit/flags.js @@ -7,12 +7,14 @@ import { window } from "../../src/window"; import { Config } from "../../src/config"; import { FeatureFlagManager } from "../../src/flags/index"; +import { buildConsentGate } from "../../src/consent-gate"; import { eventMatchesCriteria } from "../../src/targeting/event-matcher"; import { FeatureFlagPersistence, VariantLookupPolicy, } from "../../src/flags/flags-persistence"; import { setupFakeIDB } from "./test-utils/indexed-db"; +import { ALLOW_ALL_CONSENT_GATE } from "./test-utils/consent-gate"; chai.use(sinonChai); @@ -76,6 +78,7 @@ describe(`FeatureFlagManager`, function () { loadExtraBundle: sinon.stub().callsFake((src, callback) => { callback(); }), + consentGate: ALLOW_ALL_CONSENT_GATE, }; flagManager = new FeatureFlagManager(initOptions); @@ -537,6 +540,42 @@ describe(`FeatureFlagManager`, function () { expect(flag.experiment_id).to.equal(123); }); + it(`records nothing when tracking is blocked before the check`, async function () { + let blocked = false; + const manager = new FeatureFlagManager( + Object.assign({}, initOptions, {consentGate: buildConsentGate(() => !blocked, () => false)}) + ); + await manager.init(); + sinon.resetHistory(); + + blocked = true; + await manager.checkFirstTimeEvents(`Dashboard Viewed`, {}); + + expect(mockFetch).not.to.have.been.called; + }); + + it(`records nothing when tracking is blocked while the targeting bundle loads`, async function () { + let blocked = false; + const manager = new FeatureFlagManager( + Object.assign({}, initOptions, {consentGate: buildConsentGate(() => !blocked, () => false)}) + ); + await manager.init(); + sinon.resetHistory(); + + let resolveTargeting; + window[`__mp_targeting`] = new Promise(resolve => { + resolveTargeting = resolve; + }); + + // passes the entry check while consent still holds, then suspends on the bundle + const checked = manager.checkFirstTimeEvents(`Dashboard Viewed`, {}); + blocked = true; + resolveTargeting({eventMatchesCriteria: () => ({matches: true})}); + await checked; + + expect(mockFetch).not.to.have.been.called; + }); + it(`does not match event with different name`, async function () { await flagManager.checkFirstTimeEvents(`Other Event`, {}); @@ -1401,6 +1440,28 @@ describe(`FeatureFlagManager`, function () { }); }); + describe(`clearPersistedVariants`, function () { + setupFakeIDB(); + + it(`removes the saved variants once consent stops allowing persistence`, async function () { + mockConfig.flags.persistence = { variantLookupPolicy: VariantLookupPolicy.PERSISTENCE_UNTIL_NETWORK_SUCCESS }; + let consentAllows = true; + flagManager = new FeatureFlagManager( + Object.assign({}, initOptions, {consentGate: buildConsentGate(() => consentAllows, () => false)}) + ); + await flagManager.init(); + const variantsKey = flagManager.persistence.persistedVariantsKey; + const reader = new FeatureFlagPersistence(null, mockConfig.token); + await reader.idb.init(); + expect(await reader.idb.getItem(variantsKey)).to.exist; + + consentAllows = false; + await flagManager.clearPersistedVariants(); + + expect(await reader.idb.getItem(variantsKey)).to.be.undefined; + }); + }); + describe(`getAllVariants`, function () { setupFakeIDB(); @@ -1466,9 +1527,11 @@ describe(`FeatureFlagManager`, function () { expect(flagManager.activatedFirstTimeEvents).to.deep.equal({}); }); - it(`with disable_persistence: true, ignores seeded IDB and effectively becomes networkOnly`, async function () { + it(`without persistence allowed, ignores seeded IDB and effectively becomes networkOnly`, async function () { mockConfig.flags.persistence = { variantLookupPolicy: VariantLookupPolicy.PERSISTENCE_UNTIL_NETWORK_SUCCESS }; - mockConfig.disable_persistence = true; + flagManager = new FeatureFlagManager( + Object.assign({}, initOptions, {consentGate: buildConsentGate(() => true, key => key === `disable_persistence`)}) + ); await seedPersistedVariants(VariantLookupPolicy.PERSISTENCE_UNTIL_NETWORK_SUCCESS, `test-distinct-id`, `test-device-id`, { flagA: { key: `seeded`, value: `cached` }, }); diff --git a/tests/unit/gdpr-instance.js b/tests/unit/gdpr-instance.js index 0b70bb7e..579a8a59 100644 --- a/tests/unit/gdpr-instance.js +++ b/tests/unit/gdpr-instance.js @@ -27,7 +27,7 @@ describe(`opt-out status on a Mixpanel instance`, function() { const {loadNoop} = require(`../../src/loaders/bundle-loaders`); mixpanel = init_as_module(loadNoop); utils = require(`../../src/utils`); - gdpr = require(`../../src/gdpr-utils`); + gdpr = require(`../../src/opt-out-flag`); window.localStorage.clear(); }, }); @@ -52,6 +52,19 @@ describe(`opt-out status on a Mixpanel instance`, function() { expect(callback.calledWith(0)).to.equal(expected); } + it(`should keep persistence off after an opt-out when the config changes`, function() { + const instance = mixpanel.init(TOKEN, { + persistence: `localStorage`, + opt_out_tracking_persistence_type: `localStorage`, + batch_requests: false, + }, `gdpr_instance`); + instance.opt_out_tracking(); + + instance.set_config({debug: false}); + + expect(window.localStorage.getItem(`mp_${TOKEN}_mixpanel`)).to.equal(null); + }); + it(`should be opted out everywhere if localStorage rejects writes but holds an opt-out`, function() { const instance = initInstance(); gdpr.optOut(TOKEN, {persistenceType: `localStorage`}); diff --git a/tests/unit/indexed-db.js b/tests/unit/indexed-db.js index cb2e13f9..73fa6d41 100644 --- a/tests/unit/indexed-db.js +++ b/tests/unit/indexed-db.js @@ -66,4 +66,49 @@ describe(`IDBStorageWrapper`, function() { expect(value).to.eql({foo: `bar`}); expect(transactionStub.callCount).to.equal(3); }); + + describe(`createIfMissing: false`, function() { + const existingOnly = () => new IDBStorageWrapper( + MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA, {createIfMissing: false} + ); + // a database whose creation was aborted is left at version 0, which browsers' databases() leaves + // out (IndexedDB spec, IDBFactory.databases()) and fake-indexeddb's doesn't + const databaseNames = async () => (await window.indexedDB.databases()) + .filter(database => database.version !== 0) + .map(database => database.name); + + it(`opens a database the device has`, async function() { + await idbWrapper.init(); + await idbWrapper.setItem(`drop`, {n: 1}); + + const existing = existingOnly(); + await existing.init(); + await existing.removeItem(`drop`); + + expect(await idbWrapper.getItem(`drop`)).to.be.undefined; + }); + + it(`creates no database, without opening one the browser doesn't list`, async function() { + const open = sinon.spy(window.indexedDB, `open`); + + let rejected = false; + await existingOnly().init().catch(() => { rejected = true; }); + + expect(rejected).to.equal(true); + expect(open.called).to.equal(false); + expect(await databaseNames()).to.deep.equal([]); + }); + + it(`creates no database in a browser that can't list them`, async function() { + const databases = window.indexedDB.databases; + window.indexedDB.databases = undefined; + + let rejected = false; + await existingOnly().init().catch(() => { rejected = true; }); + + window.indexedDB.databases = databases; + expect(rejected).to.equal(true); + expect(await databaseNames()).to.deep.equal([]); + }); + }); }); diff --git a/tests/unit/mixpanel-people.js b/tests/unit/mixpanel-people.js index 50f00c10..128fcfc7 100644 --- a/tests/unit/mixpanel-people.js +++ b/tests/unit/mixpanel-people.js @@ -2,6 +2,7 @@ import { expect } from 'chai'; import { MixpanelPeople } from '../../src/mixpanel-people'; import { MockMixpanelLib } from './test-utils/mock-mixpanel-lib'; +import { ALLOW_ALL_CONSENT_GATE } from './test-utils/consent-gate'; describe(`MixpanelPeople`, function() { describe(`set before identify`, function() { @@ -13,7 +14,7 @@ describe(`MixpanelPeople`, function() { _add_to_people_queue: (action, data) => queued.push({action, data}), }; const people = new MixpanelPeople(); - people._init(mockMixpanel); + people._init(mockMixpanel, ALLOW_ALL_CONSENT_GATE); const created = new Date(Date.UTC(2020, 0, 2, 3, 4, 5)); const props = {created}; diff --git a/tests/unit/gdpr-utils.js b/tests/unit/opt-out-flag.js similarity index 89% rename from tests/unit/gdpr-utils.js rename to tests/unit/opt-out-flag.js index be5d04ed..cfccdc41 100644 --- a/tests/unit/gdpr-utils.js +++ b/tests/unit/opt-out-flag.js @@ -33,13 +33,13 @@ function assertPersistenceValue(persistenceType, token, value, persistencePrefix } } -describe(`GDPR utils`, function() { +describe(`opt-out flag`, function() { // these imports must be re-required before each test // so that they reference the correct jsdom document let _window, _, gdpr; jsdomSetup({ - reImportModules: [`../../src/window`, `../../src/utils`, `../../src/gdpr-utils`], + reImportModules: [`../../src/window`, `../../src/utils`, `../../src/opt-out-flag`], beforeCallback: modules => { [_window, _, gdpr] = modules; window.localStorage.clear(); @@ -537,66 +537,4 @@ describe(`GDPR utils`, function() { }); }); }); - - [ - {wrapperName: `addOptOutCheckMixpanelLib`, makeOwner: mixpanelInstance => mixpanelInstance}, - {wrapperName: `addOptOutCheckMixpanelPeople`, makeOwner: mixpanelInstance => ({_mixpanel: mixpanelInstance})}, - {wrapperName: `addOptOutCheckMixpanelGroup`, makeOwner: mixpanelInstance => ({_mixpanel: mixpanelInstance})}, - {wrapperName: `addOptOutCheckSessionRecording`, makeOwner: mixpanelInstance => ({_mixpanel: mixpanelInstance})}, - ].forEach(function({wrapperName, makeOwner}) { - describe(wrapperName, function() { - const eventName = `єνєηт`; - const eventProperties = {'𝖕𝖗𝖔𝖕𝖊𝖗𝖙𝖞': `𝓿𝓪𝓵𝓾𝓮`}; - let wrappedMethod, owner; - - function setupMocks(hasOptedOutTracking) { - wrappedMethod = sinon.stub().returns(`result`); - owner = makeOwner({has_opted_out_tracking: hasOptedOutTracking}); - owner.method = gdpr[wrapperName](wrappedMethod); - } - - it(`should call the wrapped method if the user is not opted out`, function() { - setupMocks(() => false); - - expect(owner.method(eventName, eventProperties)).to.equal(`result`); - expect(wrappedMethod.calledOnceWith(eventName, eventProperties)).to.be.true; - expect(wrappedMethod.calledOn(owner)).to.be.true; - }); - - it(`should not call the wrapped method if the user is opted out`, function() { - setupMocks(() => true); - - expect(owner.method(eventName, eventProperties)).to.be.undefined; - expect(wrappedMethod.notCalled).to.be.true; - }); - - it(`should not invoke the callback directly if the user is not opted out`, function() { - setupMocks(() => false); - const callback = sinon.spy(); - - owner.method(eventName, eventProperties, callback); - - expect(callback.notCalled).to.be.true; - }); - - it(`should invoke the callback directly if the user is opted out`, function() { - setupMocks(() => true); - const callback = sinon.spy(); - - owner.method(eventName, eventProperties, callback); - - expect(callback.calledOnceWith(0)).to.be.true; - }); - - it(`should call the wrapped method if an unexpected error occurs`, function() { - setupMocks(() => { - throw new Error(`Unexpected error!`); - }); - - owner.method(eventName, eventProperties); - - expect(wrappedMethod.calledOnceWith(eventName, eventProperties)).to.be.true; - }); - }); - }); }); diff --git a/tests/unit/recorder-manager.js b/tests/unit/recorder-manager.js index 538dcf99..a5c9d97b 100644 --- a/tests/unit/recorder-manager.js +++ b/tests/unit/recorder-manager.js @@ -3,6 +3,7 @@ import sinon from "sinon"; import { RecorderManager } from "../../src/recorder-manager"; import { window } from "../../src/window"; import { RECORDER_GLOBAL_NAME, TARGETING_GLOBAL_NAME, RECORDER_FILENAME, TARGETING_FILENAME } from "../../src/config"; +import { ALLOW_ALL_CONSENT_GATE } from "./test-utils/consent-gate"; describe(`RecorderManager`, function() { let recorderManager; @@ -34,7 +35,8 @@ describe(`RecorderManager`, function() { getTabIdFunc: () => `test-tab-id`, reportErrorFunc: sinon.stub(), getDistinctIdFunc: getDistinctIdStub, - loadExtraBundle: sinon.stub() + loadExtraBundle: sinon.stub(), + consentGate: ALLOW_ALL_CONSENT_GATE }); }); @@ -242,7 +244,8 @@ describe(`RecorderManager`, function() { getTabIdFunc: () => `test-tab-id`, reportErrorFunc: sinon.stub(), getDistinctIdFunc: getDistinctIdStub, - loadExtraBundle: loadExtraBundleStub + loadExtraBundle: loadExtraBundleStub, + consentGate: ALLOW_ALL_CONSENT_GATE }; return new RecorderManager(Object.assign(defaults, opts)); } diff --git a/tests/unit/recorder.js b/tests/unit/recorder.js index 6eaabaaa..3f53fa2f 100644 --- a/tests/unit/recorder.js +++ b/tests/unit/recorder.js @@ -370,16 +370,16 @@ describe(`Recorder`, function() { expect(idbOpenSpy.callCount).to.equal(0); }); - it(`deletes the active recording when recording is stopped and disable_persistence=true`, async function () { + it(`leaves the active recording in the registry when recording is stopped and disable_persistence=true`, async function () { await verifyBasicRecording(); const getConfigStub = sinon.stub(MockMixpanelLib.prototype, 'get_config'); getConfigStub.withArgs('disable_persistence').returns(true); getConfigStub.callThrough(); await recorder.stopRecording(); - + const storedRecording = await idbGetItem(`mixpanelRecordingRegistry`, `test-tab-id`); - expect(storedRecording).to.not.exist; + expect(storedRecording).to.exist; }); }); }); diff --git a/tests/unit/recording-registry.js b/tests/unit/recording-registry.js index 7c5ddd1b..5eef8a07 100644 --- a/tests/unit/recording-registry.js +++ b/tests/unit/recording-registry.js @@ -5,6 +5,8 @@ import { window } from '../../src/window'; import localStorage from 'localStorage'; import { setupFakeIDB, idbGetItem, idbSetItem, idbCreateDatabase } from './test-utils/indexed-db'; import { RecordingRegistry } from '../../src/recorder/recording-registry'; +import { buildConsentGate } from '../../src/consent-gate'; +import { consentGateFor } from '../../src/consent-gate'; import { MockMixpanelLib } from './test-utils/mock-mixpanel-lib'; describe(`RecordingRegistry`, function() { @@ -37,6 +39,7 @@ describe(`RecordingRegistry`, function() { recordingRegistry = new RecordingRegistry({ mixpanelInstance: mockMixpanelInstance, + consentGate: consentGateFor(mockMixpanelInstance), errorReporter: console.error, sharedLockStorage: localStorage }); @@ -92,20 +95,22 @@ describe(`RecordingRegistry`, function() { }); }); - describe(`deleteActiveRecording()`, function () { - it(`deletes the active recording`, async function() { + describe(`clearActiveRecording()`, function () { + it(`leaves the entry alone, without opening the database, when persistence isn't allowed`, async function() { await idbCreateDatabase(`mixpanelBrowserDb`, 1, [`mixpanelRecordingRegistry`]); - await recordingRegistry.setActiveRecording(SERIALIZED_RECORDING); + await idbSetItem(`mixpanelRecordingRegistry`, `test-tab-id`, SERIALIZED_RECORDING); + recordingRegistry = new RecordingRegistry({ + mixpanelInstance: mockMixpanelInstance, + consentGate: buildConsentGate(capability => capability !== `store`, () => false), + errorReporter: console.error, + sharedLockStorage: localStorage, + }); + const idbOpenSpy = sinon.spy(window.indexedDB, `open`); - await recordingRegistry.deleteActiveRecording(); - const storedRecording = await idbGetItem(`mixpanelRecordingRegistry`, `test-tab-id`); - expect(storedRecording).to.not.exist; - }); + await recordingRegistry.clearActiveRecording(); - it(`doesn't try to open the database if it is not initialized (no recording to delete)`, async function() { - const idbOpenSpy = sinon.spy(window.indexedDB, `open`); - await recordingRegistry.deleteActiveRecording(); - expect(idbOpenSpy.callCount).to.be.equal(0); + expect(idbOpenSpy.callCount).to.equal(0); + expect(await idbGetItem(`mixpanelRecordingRegistry`, `test-tab-id`)).to.deep.equal(SERIALIZED_RECORDING); }); }); @@ -166,5 +171,31 @@ describe(`RecordingRegistry`, function() { const differentTabStoredEvents = await idbGetItem(`mixpanelRecordingEvents`, BATCHER_PREFIX + `diff-replay-id`); expect(differentTabStoredEvents).to.have.lengthOf(2); }); + + it(`sends no recovered recording when the registry's consent gate stops the calls`, async function() { + recordingRegistry = new RecordingRegistry({ + mixpanelInstance: mockMixpanelInstance, + consentGate: buildConsentGate(capability => capability !== `api_calls`, () => false), + errorReporter: () => {}, + sharedLockStorage: localStorage, + }); + await idbCreateDatabase(`mixpanelBrowserDb`, 1, [`mixpanelRecordingRegistry`, `mixpanelRecordingEvents`]); + const lastEventTime = NOW_MS - 10 * 1000; + const expiredRecording = Object.assign({}, SERIALIZED_RECORDING, { + maxExpires: NOW_MS - 1000, + tabId: `test-expired-tab-id`, + replayId: `expired-replay-id`, + // a later batch needs no full snapshot to send, so only the gate stops it + seqNo: 12, + }); + await idbSetItem(`mixpanelRecordingRegistry`, `test-expired-tab-id`, expiredRecording); + await idbSetItem(`mixpanelRecordingEvents`, BATCHER_PREFIX + `expired-replay-id`, [ + {id: 1, payload: {type: 3, timestamp: lastEventTime, data: {source: 4}}, flushAfter: lastEventTime}, + ]); + + await recordingRegistry.flushInactiveRecordings(); + + expect(fetchStub.called).to.be.false; + }); }); }); diff --git a/tests/unit/request-batcher.js b/tests/unit/request-batcher.js index 50cb0c67..359b21ae 100644 --- a/tests/unit/request-batcher.js +++ b/tests/unit/request-batcher.js @@ -10,6 +10,7 @@ chai.use(sinonChai); import { RequestBatcher } from '../../src/request-batcher'; import {mapValues} from 'lodash'; +import { ALLOW_ALL_CONSENT_GATE } from './test-utils/consent-gate'; const LOCALSTORAGE_KEY = `fake-rb-key`; const START_TIME = 100000; @@ -46,6 +47,7 @@ describe(`RequestBatcher`, function() { queueStorage: new LocalStorageWrapper(localStorage), sharedLockStorage: localStorage, usePersistence: true, + consentGate: ALLOW_ALL_CONSENT_GATE, }, optionOverrides)); } diff --git a/tests/unit/request-queue.js b/tests/unit/request-queue.js index b4b000b3..155ca973 100644 --- a/tests/unit/request-queue.js +++ b/tests/unit/request-queue.js @@ -8,6 +8,8 @@ import sinon from 'sinon'; import { acquireLockForPid } from './test-utils/lock'; import { RequestQueue } from '../../src/request-queue'; import { LocalStorageWrapper } from '../../src/storage/local-storage'; +import { buildConsentGate } from '../../src/consent-gate'; +import { ALLOW_ALL_CONSENT_GATE } from './test-utils/consent-gate'; const DEFAULT_FLUSH_INTERVAL = 10000; const START_TIME = 50000; @@ -26,6 +28,7 @@ describe(`RequestQueue`, function() { queueStorage: new LocalStorageWrapper(localStorage), sharedLockStorage: localStorage, usePersistence: true, + consentGate: ALLOW_ALL_CONSENT_GATE, }); }); @@ -83,6 +86,7 @@ describe(`RequestQueue`, function() { sharedLockStorage: localStorage, pid: `first-holder`, usePersistence: true, + consentGate: ALLOW_ALL_CONSENT_GATE, }); const firstItem = {event: `first`}; acquireLockForPid(queue.lock, `first-holder`); @@ -160,6 +164,7 @@ describe(`RequestQueue`, function() { sharedLockStorage: localStorage, pid: `mypid`, usePersistence: true, + consentGate: ALLOW_ALL_CONSENT_GATE, }); sinon.stub(localStorage, `setItem`) .withArgs(`fake-rq-key:Y`, `mypid`) @@ -565,6 +570,43 @@ describe(`RequestQueue`, function() { }); }); + describe(`consentGate`, function() { + it(`writes nothing for an enqueue that was already under way when it started returning true`, async function() { + let blocked = false; + queue = new RequestQueue(`fake-rq-key`, { + queueStorage: new LocalStorageWrapper(localStorage), + sharedLockStorage: localStorage, + usePersistence: true, + consentGate: buildConsentGate(() => !blocked, () => false), + }); + + const enqueued = queue.enqueue({event: `foo`, properties: {bar: `baz`}}, DEFAULT_FLUSH_INTERVAL); + blocked = true; + + expect(await enqueued).to.equal(false); + expect(localStorage.getItem(`fake-rq-key`)).to.be.null; + }); + + it(`takes no storage lock for a throttled enqueue that runs after it started returning false`, async function() { + let blocked = false; + queue = new RequestQueue(`fake-rq-key`, { + queueStorage: new LocalStorageWrapper(localStorage), + sharedLockStorage: localStorage, + usePersistence: true, + enqueueThrottleMs: 1000, + consentGate: buildConsentGate(() => !blocked, () => false), + }); + localStorage.clear(); + + const enqueued = queue.enqueue({event: `foo`, properties: {bar: `baz`}}, DEFAULT_FLUSH_INTERVAL); + blocked = true; + await clock.tickAsync(1000); + + expect(await enqueued).to.equal(false); + expect(localStorage.length).to.equal(0); + }); + }); + describe(`clear`, function() { beforeEach(async function() { await queue.enqueue({event: `foo1`, properties: {bar1: `baz1`}}, DEFAULT_FLUSH_INTERVAL); diff --git a/tests/unit/session-recording.js b/tests/unit/session-recording.js index 39e9ab08..8a3fdc86 100644 --- a/tests/unit/session-recording.js +++ b/tests/unit/session-recording.js @@ -4,6 +4,7 @@ import { expect } from 'chai'; import { SessionRecording } from '../../src/recorder/session-recording'; +import { consentGateFor } from '../../src/consent-gate'; import { IncrementalSource, EventType } from '@mixpanel/rrweb-types'; import sinon from 'sinon'; @@ -45,6 +46,7 @@ describe(`SessionRecording`, function() { sessionRecording = new SessionRecording({ mixpanelInstance: mockMixpanelInstance, + consentGate: consentGateFor(mockMixpanelInstance), replayId: replayId, onIdleTimeout: onIdleTimeoutSpy, onMaxLengthReached: onMaxLengthReachedSpy, @@ -179,7 +181,7 @@ describe(`SessionRecording`, function() { // clock time should not affect deserialized times clock.tick(10 * 60 * 1000); - const deserializedRecording = SessionRecording.deserialize(serializedRecording, {mixpanelInstance: mockMixpanelInstance}); + const deserializedRecording = SessionRecording.deserialize(serializedRecording, {mixpanelInstance: mockMixpanelInstance, consentGate: consentGateFor(mockMixpanelInstance)}); expect(deserializedRecording.replayId).to.equal(replayId); expect(deserializedRecording.replayStartTime).to.equal(NOW_MS); expect(deserializedRecording.lastEventTimestamp).to.equal(NOW_MS + 100); @@ -207,6 +209,7 @@ describe(`SessionRecording`, function() { const deserializedRecording = SessionRecording.deserialize(serializedRecording, { mixpanelInstance: mockMixpanelInstance, + consentGate: consentGateFor(mockMixpanelInstance), onMaxLengthReached: onMaxLengthReachedSpy, rrwebRecord: mockRrweb.recordStub }); @@ -232,7 +235,7 @@ describe(`SessionRecording`, function() { idleExpires: startTime + 30 * 60 * 1000, maxExpires: startTime + 24 * 60 * 60 * 1000, tabId: `test-some-other-tab-id`, - }, {mixpanelInstance: mockMixpanelInstance, sharedLockStorage: localStorage}); + }, {mixpanelInstance: mockMixpanelInstance, consentGate: consentGateFor(mockMixpanelInstance), sharedLockStorage: localStorage}); const persistedEvents = [ {type: EventType.IncrementalSnapshot, timestamp: startTime + 10, data: {source: IncrementalSource.MouseInteraction}}, @@ -289,7 +292,7 @@ describe(`SessionRecording`, function() { maxExpires: startTime + 24 * 60 * 60 * 1000, tabId: `test-some-other-tab-id`, lastEventTimestamp: lastEventTimestamp, - }, {mixpanelInstance: mockMixpanelInstance, sharedLockStorage: localStorage}); + }, {mixpanelInstance: mockMixpanelInstance, consentGate: consentGateFor(mockMixpanelInstance), sharedLockStorage: localStorage}); const persistedEvents = [ {timestamp: startTime + 10, data: {source: IncrementalSource.MouseInteraction}}, @@ -429,11 +432,21 @@ describe(`SessionRecording`, function() { expect(queue.length).to.equal(0, `batcher should have removed the items from IDB`); }); + it(`does not send a batch prepared before an opt-out`, function() { + sessionRecording.startRecording(); + sinon.stub(mockMixpanelInstance, `has_opted_out_tracking`).returns(true); + + sessionRecording._sendRequest(replayId, {}, `compressed-batch`, sinon.spy()); + + expect(fetchStub.called).to.be.false; + }); + describe(`validateAllowedOrigins via startRecording`, function() { it(`non-array config doesn't crash recording`, function() { const customMixpanel = new MockMixpanelLib({'record_allowed_iframe_origins': `https://a.com`}); const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `test-replay-id`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, @@ -450,6 +463,7 @@ describe(`SessionRecording`, function() { const customMixpanel = new MockMixpanelLib({'record_allowed_iframe_origins': [42, `https://valid.com`]}); const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `test-replay-id`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, @@ -465,6 +479,7 @@ describe(`SessionRecording`, function() { const customMixpanel = new MockMixpanelLib({'record_allowed_iframe_origins': [`not-a-url`, `https://valid.com`]}); const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `test-replay-id`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, @@ -480,6 +495,7 @@ describe(`SessionRecording`, function() { const customMixpanel = new MockMixpanelLib({'record_allowed_iframe_origins': [`not-a-url`, 42]}); const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `test-replay-id`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, @@ -495,6 +511,7 @@ describe(`SessionRecording`, function() { const customMixpanel = new MockMixpanelLib({'record_allowed_iframe_origins': [`https://a.com`, `https://b.com`]}); const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `test-replay-id`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, @@ -513,6 +530,7 @@ describe(`SessionRecording`, function() { ]}); const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `test-replay-id`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, @@ -528,6 +546,7 @@ describe(`SessionRecording`, function() { const customMixpanel = new MockMixpanelLib({'record_allowed_iframe_origins': [`data:text/html,test`]}); const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `test-replay-id`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, @@ -635,6 +654,7 @@ describe(`SessionRecording`, function() { tabId: `test-tab-id`, }, { mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, }); @@ -666,6 +686,7 @@ describe(`SessionRecording`, function() { const rec = new SessionRecording({ mixpanelInstance: customMixpanel, + consentGate: consentGateFor(customMixpanel), replayId: `min-ms-test-replay`, rrwebRecord: mockRrweb.recordStub, sharedLockStorage: localStorage, diff --git a/tests/unit/test-utils/consent-gate.js b/tests/unit/test-utils/consent-gate.js new file mode 100644 index 00000000..198e0e91 --- /dev/null +++ b/tests/unit/test-utils/consent-gate.js @@ -0,0 +1,3 @@ +import { buildConsentGate } from '../../../src/consent-gate'; + +export const ALLOW_ALL_CONSENT_GATE = buildConsentGate(() => true, () => false); diff --git a/tests/unit/test-utils/indexed-db.js b/tests/unit/test-utils/indexed-db.js index bc1872b6..1eef7c09 100644 --- a/tests/unit/test-utils/indexed-db.js +++ b/tests/unit/test-utils/indexed-db.js @@ -16,10 +16,15 @@ const STORE_TO_DB_NAME = { [FLAGS_STORE_NAME]: MIXPANEL_FLAGS_DB_NAME, }; +// jsdom-global's cleanup deletes the global DOMException, which fake-indexeddb throws when a +// transaction aborts +const NODE_DOM_EXCEPTION = global.DOMException; + export function setupFakeIDB() { beforeEach(function () { window.indexedDB = new IDBFactory(); window.IDBDatabase = IDBDatabase; + global.DOMException = global.DOMException || NODE_DOM_EXCEPTION; }); afterEach(function () { diff --git a/tests/unit/test-utils/mock-mixpanel-lib.js b/tests/unit/test-utils/mock-mixpanel-lib.js index 8972f89d..69520c91 100644 --- a/tests/unit/test-utils/mock-mixpanel-lib.js +++ b/tests/unit/test-utils/mock-mixpanel-lib.js @@ -50,4 +50,8 @@ export class MockMixpanelLib { has_opted_out_tracking() { return false; } + + _consent_allows(capability) { + return capability !== `api_calls` || !this.has_opted_out_tracking(); + } } From 346d7b3c4bd9b1ac71bbdb1acca10882e68c3d92 Mon Sep 17 00:00:00 2001 From: Jakub Grzegorzewski <25271819+jakewski@users.noreply.github.com> Date: Wed, 28 Oct 2026 21:24:54 +0000 Subject: [PATCH 09/13] build 2.85.0 rc1 --- ...3yyAg.js => mixpanel-recorder-BSb8F2GO.js} | 431 +- .../mixpanel-recorder-CcIR1Do8.min.js | 2 - .../mixpanel-recorder-CcIR1Do8.min.js.map | 1 - .../mixpanel-recorder-ud-sZFul.min.js | 2 + .../mixpanel-recorder-ud-sZFul.min.js.map | 1 + .../mixpanel-targeting-Dv-okZB7.min.js | 2 - .../mixpanel-targeting-Dv-okZB7.min.js.map | 1 - ...oAEA.js => mixpanel-targeting-SfM6RnV-.js} | 2 +- .../mixpanel-targeting-z3yre0-D.min.js | 2 + .../mixpanel-targeting-z3yre0-D.min.js.map | 1 + dist/mixpanel-browser.cdx.json | 2 +- dist/mixpanel-core.cjs.d.ts | 10 + dist/mixpanel-core.cjs.js | 3481 ++++++++++------ dist/mixpanel-recorder.js | 431 +- dist/mixpanel-recorder.min.js | 2 +- dist/mixpanel-recorder.min.js.map | 2 +- dist/mixpanel-targeting.js | 2 +- dist/mixpanel-targeting.min.js | 2 +- dist/mixpanel-targeting.min.js.map | 2 +- dist/mixpanel-with-async-modules.cjs.d.ts | 10 + dist/mixpanel-with-async-modules.cjs.js | 3485 ++++++++++------ dist/mixpanel-with-async-recorder.cjs.d.ts | 10 + dist/mixpanel-with-async-recorder.cjs.js | 3485 ++++++++++------ dist/mixpanel-with-recorder.d.ts | 10 + dist/mixpanel-with-recorder.js | 3490 +++++++++++------ dist/mixpanel-with-recorder.min.d.ts | 10 + dist/mixpanel-with-recorder.min.js | 2 +- dist/mixpanel.amd.d.ts | 10 + dist/mixpanel.amd.js | 3490 +++++++++++------ dist/mixpanel.cjs.d.ts | 10 + dist/mixpanel.cjs.js | 3490 +++++++++++------ dist/mixpanel.globals.js | 3485 ++++++++++------ dist/mixpanel.min.js | 414 +- dist/mixpanel.module.d.ts | 10 + dist/mixpanel.module.js | 3490 +++++++++++------ dist/mixpanel.umd.d.ts | 10 + dist/mixpanel.umd.js | 3490 +++++++++++------ .../javascript-full-api-reference.md | 57 +- 38 files changed, 20455 insertions(+), 12382 deletions(-) rename dist/async-modules/{mixpanel-recorder-Cbb3yyAg.js => mixpanel-recorder-BSb8F2GO.js} (98%) delete mode 100644 dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js delete mode 100644 dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js.map create mode 100644 dist/async-modules/mixpanel-recorder-ud-sZFul.min.js create mode 100644 dist/async-modules/mixpanel-recorder-ud-sZFul.min.js.map delete mode 100644 dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js delete mode 100644 dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js.map rename dist/async-modules/{mixpanel-targeting-DVY6oAEA.js => mixpanel-targeting-SfM6RnV-.js} (99%) create mode 100644 dist/async-modules/mixpanel-targeting-z3yre0-D.min.js create mode 100644 dist/async-modules/mixpanel-targeting-z3yre0-D.min.js.map diff --git a/dist/async-modules/mixpanel-recorder-Cbb3yyAg.js b/dist/async-modules/mixpanel-recorder-BSb8F2GO.js similarity index 98% rename from dist/async-modules/mixpanel-recorder-Cbb3yyAg.js rename to dist/async-modules/mixpanel-recorder-BSb8F2GO.js index 8c6674d6..4cfeca9c 100644 --- a/dist/async-modules/mixpanel-recorder-Cbb3yyAg.js +++ b/dist/async-modules/mixpanel-recorder-BSb8F2GO.js @@ -27,7 +27,7 @@ } var Config = { - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; var RECORDER_GLOBAL_NAME = '__mp_recorder'; @@ -20763,11 +20763,13 @@ /** * @type {import('./wrapper').StorageWrapper} */ - var IDBStorageWrapper = function (dbName, storeName, versionData) { + var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -20778,25 +20780,47 @@ var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -20896,196 +20920,6 @@ storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME] }; - /** - * GDPR utils - * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. - * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. - */ - - - /** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ - - /** Public **/ - - var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; - - /** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ - function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); - } - return optedOut; - } - - /** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); - } - - /** Private **/ - - /** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage - */ - function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; - } - - /** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type - */ - function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; - } - - /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type - */ - function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); - } - - /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read - */ - function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; - } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; - } - - /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true - */ - function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; - } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; - - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; - } - }); - - return hasDntOn; - } - - /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out - */ - function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; - - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console$1.error('Unexpected error when checking tracking opt-out status: ' + err); - } - - if (!optedOut) { - return method.apply(this, arguments); - } - - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { - callback(0); - } - - return; - }; - } - var logger$5 = console_with_prefix('lock'); /** @@ -21318,6 +21152,7 @@ }); } this.reportError = options.errorReporter || _.bind(logger$4.error, logger$4); + this.consentGate = options.consentGate; this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios @@ -21369,7 +21204,7 @@ 'payload': item }; - if (!this.usePersistence) { + if (!this._persists()) { this.memQueue.push(queueEntry); return PromisePolyfill.resolve(true); } else { @@ -21377,7 +21212,20 @@ } }; + /** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ + RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); + }; + RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -21477,7 +21325,7 @@ }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -21565,7 +21413,7 @@ */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -21620,11 +21468,14 @@ RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); }, this)) - .then(function () { - return true; - }) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -21669,7 +21520,8 @@ sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -22940,6 +22792,8 @@ /** * @typedef {Object} SessionRecordingOptions * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib + * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks + * before it stores or sends * @property {String} [options.replayId] - unique uuid for a single replay * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length @@ -22970,6 +22824,7 @@ */ var SessionRecording = function(options) { this._mixpanel = options.mixpanelInstance; + this.consentGate = options.consentGate; this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC; this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC; this._onBatchSent = options.onBatchSent || NOOP_FUNC; @@ -22996,7 +22851,7 @@ // disable persistence if localStorage is not supported // request-queue will automatically disable persistence if indexedDB fails to initialize - var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence'); + var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence(); // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId; @@ -23010,6 +22865,7 @@ sharedLockStorage: options.sharedLockStorage, usePersistence: usePersistence, stopAllBatchingFunc: this.stopRecording.bind(this), + consentGate: this.consentGate, // increased throttle and shared lock timeout because recording events are very high frequency. // this will minimize the amount of lock contention between enqueued events. @@ -23065,13 +22921,6 @@ return this._mixpanel.get_config(configVar); }; - // Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which - // reaches into this class instance and expects the snake case version of the function. - // eslint-disable-next-line camelcase - SessionRecording.prototype.get_config = function(configVar) { - return this.getConfig(configVar); - }; - SessionRecording.prototype.startRecording = function (shouldStopBatcher) { if (this._rrwebRecord === null) { this.reportError('rrweb record function not provided. '); @@ -23246,19 +23095,15 @@ /** - * Flushes the current batch of events to the server, but passes an opt-out callback to make sure - * we stop recording and dump any queued events if the user has opted out. + * Flushes the current batch of events to the server, or stops recording if consent stops the calls. */ SessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) { - var onOptOut = function (code) { - // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out - if (code === 0) { - this.stopRecording(); - cb({error: 'Tracking has been opted out, stopping recording.'}); - } - }.bind(this); - - this._flushEvents(data, options, cb, onOptOut); + if (!this.consentGate.allowsApiCalls()) { + this.stopRecording(); + cb({error: 'Tracking has been opted out, stopping recording.'}); + return; + } + this._flushEvents(data, options, cb); }; /** @@ -23314,7 +23159,12 @@ return this.getConfig('api_routes')['record']; }; + // consent can be withdrawn while the batch is compressed, so it is checked again before sending SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) { + if (!this.consentGate.allowsApiCalls()) { + callback(0); + return; + } var onSuccess = function (response, responseBody) { // Update batch specific props only if the request was successful to guarantee ordering. // RequestBatcher will always flush the next batch after the previous one succeeds. @@ -23351,7 +23201,7 @@ }); }; - SessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) { + SessionRecording.prototype._flushEvents = function(data, options, callback) { var numEvents = data.length; if (numEvents > 0) { @@ -23418,7 +23268,7 @@ sendUncompressed(); } } - }); + }; SessionRecording.prototype.reportError = function(msg, err) { @@ -23473,9 +23323,10 @@ */ SessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) { return function(text, element) { - // prevent visual artifacts from random whitespace + // whitespace-only text has nothing to mask, and dropping it would join adjacent words + // (e.g. a space text node between two inline elements) if (!text.trim().length) { - return ''; + return text; } var shouldMask = true; @@ -23503,11 +23354,12 @@ this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA); this.errorReporter = options.errorReporter; this.mixpanelInstance = options.mixpanelInstance; + this.consentGate = options.consentGate; this.sharedLockStorage = options.sharedLockStorage; }; RecordingRegistry.prototype.isPersistenceEnabled = function() { - return !this.mixpanelInstance.get_config('disable_persistence'); + return this.consentGate.allowsPersistence(); }; RecordingRegistry.prototype.handleError = function (err) { @@ -23518,6 +23370,7 @@ * @param {import('./session-recording').SerializedRecording} serializedRecording */ RecordingRegistry.prototype.setActiveRecording = function (serializedRecording) { + // a recording that resumes after consent stops storage writes nothing if (!this.isPersistenceEnabled()) { return PromisePolyfill.resolve(); } @@ -23554,13 +23407,10 @@ }; RecordingRegistry.prototype.clearActiveRecording = function () { - if (this.isPersistenceEnabled()) { - // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. - // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. - return this.markActiveRecordingExpired(); - } else { - return this.deleteActiveRecording(); - } + // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. + // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. + // without persistence the entry is left as it is, and its unsent events wait for a load that allows them. + return this.markActiveRecordingExpired(); }; RecordingRegistry.prototype.markActiveRecordingExpired = function () { @@ -23574,16 +23424,6 @@ .catch(this.handleError.bind(this)); }; - RecordingRegistry.prototype.deleteActiveRecording = function () { - // avoid initializing IDB if this registry instance hasn't already written a recording - if (this.idb.isInitialized()) { - return this.idb.removeItem(this.mixpanelInstance.get_tab_id()) - .catch(this.handleError.bind(this)); - } else { - return PromisePolyfill.resolve(); - } - }; - /** * Flush any inactive recordings from the registry to minimize data loss. * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch. @@ -23606,6 +23446,7 @@ .map(function (serializedRecording) { var sessionRecording = SessionRecording.deserialize(serializedRecording, { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, sharedLockStorage: this.sharedLockStorage }); return sessionRecording.unloadPersistedData() @@ -23621,6 +23462,79 @@ .catch(this.handleError.bind(this)); }; + /** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + + /** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ + function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console$1.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; + } + + /** + * The consent gate the recorder bundle builds when it starts, and hands to its services. The core + * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name, + * the bundle being built separately. A core without it only knows the opt-out, through + * has_opted_out_tracking(). + * @param {Object} mixpanelInstance + * @returns {ConsentGate} + */ + function consentGateFor(mixpanelInstance) { + return buildConsentGate( + function(capability) { + var consentAllows = mixpanelInstance['_consent_allows']; + if (typeof consentAllows === 'function') { + return !!consentAllows.call(mixpanelInstance, capability); + } + return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking(); + }, + function(key) { + return mixpanelInstance.get_config(key); + } + ); + } + var logger = console_with_prefix('recorder'); /** @@ -23631,12 +23545,14 @@ this.mixpanelInstance = mixpanelInstance; this.rrwebRecord = rrwebRecord || record; this.sharedLockStorage = sharedLockStorage; + this.consentGate = consentGateFor(mixpanelInstance); /** * @member {import('./registry').RecordingRegistry} */ this.recordingRegistry = new RecordingRegistry({ mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, errorReporter: logger.error, sharedLockStorage: sharedLockStorage }); @@ -23673,6 +23589,7 @@ */ var sessionRecordingOptions = { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, onBatchSent: onBatchSent, onIdleTimeout: onIdleTimeout, onMaxLengthReached: onMaxLengthReached, diff --git a/dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js b/dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js deleted file mode 100644 index 8c68d770..00000000 --- a/dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(){"use strict";var H;if(typeof window=="undefined"){var zs={hostname:""};H={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:zs,referrer:""},screen:{width:0,height:0},location:zs,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else H=window;var Si={LIB_VERSION:"2.84.0"},Rc="__mp_recorder";function Ws(r,i){(i==null||i>r.length)&&(i=r.length);for(var o=0,e=new Array(i);o=0)&&(o[t]=r[t]);return o}function Jt(r,i){return Jt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Jt(r,i)}function M(r){"@swc/helpers - typeof";return r&&typeof Symbol!="undefined"&&r.constructor===Symbol?"symbol":typeof r}function Ac(r,i){if(r){if(typeof r=="string")return Ws(r,i);var o=Object.prototype.toString.call(r).slice(8,-1);if(o==="Object"&&r.constructor&&(o=r.constructor.name),o==="Map"||o==="Set")return Array.from(o);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return Ws(r,i)}}function Zt(r){var i=typeof Map=="function"?new Map:void 0;return Zt=function(e){if(e===null||!Ec(e))return e;if(typeof e!="function")throw new TypeError("Super expression must either be null or a function");if(typeof i!="undefined"){if(i.has(e))return i.get(e);i.set(e,t)}function t(){return Nr(e,arguments,Ci(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),Jt(t,e)},Zt(r)}function Gs(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(i){}return(Gs=function(){return!!r})()}function I(r,i){var o=typeof Symbol!="undefined"&&r[Symbol.iterator]||r["@@iterator"];if(o)return(o=o.call(r)).next.bind(o);if(Array.isArray(r)||(o=Ac(r))||i){o&&(r=o);var e=0;return function(){return e>=r.length?{done:!0}:{done:!1,value:r[e++]}}}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 rt(r,i){var o,e,t,n,s={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return n={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(n[Symbol.iterator]=function(){return this}),n;function a(f){return function(l){return u([f,l])}}function u(f){if(o)throw new TypeError("Generator is already executing.");for(;s;)try{if(o=1,e&&(t=f[0]&2?e.return:f[0]?e.throw||((t=e.return)&&t.call(e),0):e.next)&&!(t=t.call(e,f[1])).done)return t;switch(e=0,t&&(f=[f[0]&2,t.value]),f[0]){case 0:case 1:t=f;break;case 4:return s.label++,{value:f[1],done:!1};case 5:s.label++,e=f[1],f=[0];continue;case 7:f=s.ops.pop(),s.trys.pop();continue;default:if(t=s.trys,!(t=t.length>0&&t[t.length-1])&&(f[0]===6||f[0]===2)){s=0;continue}if(f[0]===3&&(!t||f[1]>t[0]&&f[1]=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}};throw new TypeError(i?"Object is not iterable.":"Symbol.iterator is not defined.")}var Mc=Object.defineProperty,$c=function(r,i,o){return i in r?Mc(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},O=function(r,i,o){return $c(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},qs,kc=Object.defineProperty,_c=function(r,i,o){return i in r?kc(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},Vs=function(r,i,o){return _c(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},he=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(he||{}),Hs={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Ys={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Lr={},Pc=function(){return!!globalThis.Zone};function Oi(r){if(Lr[r])return Lr[r];var i=globalThis[r],o=i.prototype,e=r in Hs?Hs[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Ys?Ys[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!Pc())return Lr[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Lr[r]=f:o}catch(l){return o}}var Ri={};function je(r,i,o){var e,t=r+"."+String(o);if(Ri[t])return Ri[t].call(i);var n=Oi(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(Ri[t]=s,s.call(i)):i[o]}var xi={};function Js(r,i,o){var e=r+"."+String(o);if(xi[e])return xi[e].bind(i);var t=Oi(r),n=t[o];return typeof n!="function"?i[o]:(xi[e]=n,n.bind(i))}function Tc(r){return je("Node",r,"childNodes")}function Nc(r){return je("Node",r,"parentNode")}function Lc(r){return je("Node",r,"parentElement")}function Dc(r){return je("Node",r,"textContent")}function Fc(r,i){return Js("Node",r,"contains")(i)}function Bc(r){return Js("Node",r,"getRootNode")()}function Uc(r){return!r||!("host"in r)?null:je("ShadowRoot",r,"host")}function zc(r){return r.styleSheets}function Wc(r){return!r||!("shadowRoot"in r)?null:je("Element",r,"shadowRoot")}function jc(r,i){return je("Element",r,"querySelector")(i)}function Gc(r,i){return je("Element",r,"querySelectorAll")(i)}function qc(){return Oi("MutationObserver").constructor}function Vc(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var ve={childNodes:Tc,parentNode:Nc,parentElement:Lc,textContent:Dc,contains:Fc,getRootNode:Bc,host:Uc,styleSheets:zc,shadowRoot:Wc,querySelector:jc,querySelectorAll:Gc,mutationObserver:qc,patch:Vc};function Zs(r){return r.nodeType===r.ELEMENT_NODE}function Kt(r){var i=r&&"host"in r&&"mode"in r&&ve.host(r)||null;return!!(i&&"shadowRoot"in i&&ve.shadowRoot(i)===r)}function Xt(r){return Object.prototype.toString.call(r)==="[object ShadowRoot]"}function Hc(r){return r.includes(" background-clip: text;")&&!r.includes(" -webkit-background-clip: text;")&&(r=r.replace(/\sbackground-clip:\s*text;/g," -webkit-background-clip: text; background-clip: text;")),r}function Yc(r){var i=r.cssText;if(i.split('"').length<3)return i;var o=["@import","url("+JSON.stringify(r.href)+")"];return r.layerName===""?o.push("layer"):r.layerName&&o.push("layer("+r.layerName+")"),r.supportsText&&o.push("supports("+r.supportsText+")"),r.media.length&&o.push(r.media.mediaText),o.join(" ")+";"}function Ei(r){try{var i=r.rules||r.cssRules;if(!i)return null;var o=r.href;!o&&r.ownerNode&&r.ownerNode.ownerDocument&&(o=r.ownerNode.ownerDocument.location.href);var e=Array.from(i,function(t){return Ks(t,o)}).join("");return Hc(e)}catch(t){return null}}function Ks(r,i){if(Zc(r)){var o;try{o=Ei(r.styleSheet)||Yc(r)}catch(t){o=r.cssText}return r.styleSheet.href?Dr(o,r.styleSheet.href):o}else{var e=r.cssText;return Kc(r)&&r.selectorText.includes(":")&&(e=Jc(e)),i?Dr(e,i):e}}function Jc(r){var i=/(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;return r.replace(i,"$1\\$2")}function Zc(r){return"styleSheet"in r}function Kc(r){return"selectorText"in r}var Xs=(function(){function r(){Vs(this,"idNodeMap",new Map),Vs(this,"nodeMetaMap",new WeakMap)}var i=r.prototype;return i.getId=function(e){var t;if(!e)return-1;var n=(t=this.getMeta(e))==null?void 0:t.id;return n!=null?n:-1},i.getNode=function(e){return this.idNodeMap.get(e)||null},i.getIds=function(){return Array.from(this.idNodeMap.keys())},i.getMeta=function(e){return this.nodeMetaMap.get(e)||null},i.removeNodeFromMap=function(e,t){var n=this;t===void 0&&(t=!1);var s=this.getId(e);this.idNodeMap.delete(s),t&&this.nodeMetaMap.delete(e),e.childNodes&&e.childNodes.forEach(function(a){return n.removeNodeFromMap(a,t)})},i.has=function(e){return this.idNodeMap.has(e)},i.hasNode=function(e){return this.nodeMetaMap.has(e)},i.add=function(e,t){var n=t.id;this.idNodeMap.set(n,e),this.nodeMetaMap.set(e,t)},i.replace=function(e,t){var n=this.getNode(e);if(n){var s=this.nodeMetaMap.get(n);s&&this.nodeMetaMap.set(t,s)}this.idNodeMap.set(e,t)},i.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},r})();function Xc(){return new Xs}function Qt(r){var i=r.element,o=r.maskInputOptions,e=r.tagName,t=r.type,n=r.value,s=r.maskInputFn,a=n||"",u=t&&nt(t);return(o[e.toLowerCase()]||u&&o[u])&&(s?a=s(a,i):a="*".repeat(a.length)),a}function nt(r){return r.toLowerCase()}var Qs="__rrweb_original__";function Qc(r){var i=r.getContext("2d");if(!i)return!0;for(var o=50,e=0;e-1?i=r.split("/").slice(0,3).join("/"):i=r.split("/")[0],i=i.split("?")[0],i}var th=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,rh=/^(?:[a-z+]+:)?\/\//i,nh=/^www\..*/i,ih=/^(data:)([^,]*),(.*)/i;function Dr(r,i){return(r||"").replace(th,function(o,e,t,n,s,a){var u=t||s||a,f=e||n||"";if(!u)return o;if(rh.test(u)||nh.test(u)||ih.test(u))return"url("+f+u+f+")";if(u[0]==="/")return"url("+f+(eh(i)+u)+f+")";var l=i.split("/"),c=u.split("/");l.pop();for(var h=I(c),v;!(v=h()).done;){var p=v.value;p!=="."&&(p===".."?l.pop():l.push(p))}return"url("+f+l.join("/")+f+")"})}function Fr(r,i){return i===void 0&&(i=!1),i?r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,""):r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,"").replace(/0px/g,"0")}function oh(r,i,o){o===void 0&&(o=!1);var e=Array.from(i.childNodes),t=[],n=0;if(e.length>1&&r&&typeof r=="string"){for(var s=Fr(r,o),a=s.length/r.length,u=1;u2&&v[0]===""&&e[u-1].textContent!=="")p=s.indexOf(h,1);else if(v.length===1){if(h=h.substring(0,h.length-1),v=s.split(h),v.length<=1)return t.push(r),t;c=l+1}else c===f.length-1&&(p=s.indexOf(h));if(v.length>=2&&c>l){var m=e[u-1].textContent;if(m&&typeof m=="string"){var d=Fr(m).length;p=s.indexOf(h,d)}p===-1&&(p=v[0].length)}if(p!==-1){for(var g=Math.floor(p/a);g>0&&g50*e.length)return t.push(r),t;var w=Fr(r.substring(0,g),o);if(w.length===p){t.push(r.substring(0,g)),r=r.substring(g),s=s.substring(p);break}else w.length=i.length);){var n=e(lh);if(n.slice(-1)===",")n=Ot(r,n.substring(0,n.length-1)),t.push(n);else{var s="";n=Ot(r,n);for(var a=!1;;){var u=i.charAt(o);if(u===""){t.push((n+s).trim());break}else if(a)u===")"&&(a=!1);else if(u===","){o+=1,t.push((n+s).trim());break}else u==="("&&(a=!0);s+=u,o+=1}}}return t.join(", ")}var na=new WeakMap;function Ot(r,i){return!i||i.trim()===""?i:Ai(r,i)}function dh(r){return!!(r.tagName==="svg"||r.ownerSVGElement)}function Ai(r,i){var o=na.get(r);if(o||(o=r.createElement("a"),na.set(r,o)),!i)i="";else if(i.startsWith("blob:")||i.startsWith("data:"))return i;return o.setAttribute("href",i),o.href}function ia(r,i,o,e){return e&&(o==="src"||o==="href"&&!(i==="use"&&e[0]==="#")||o==="xlink:href"&&e[0]!=="#"||o==="background"&&(i==="table"||i==="td"||i==="th")?Ot(r,e):o==="srcset"?hh(r,e):o==="style"?Dr(e,Ai(r)):i==="object"&&o==="data"?Ot(r,e):e)}function oa(r,i,o){return(r==="video"||r==="audio")&&i==="autoplay"}function ph(r,i,o){try{if(typeof i=="string"){if(r.classList.contains(i))return!0}else for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}if(o)return r.matches(o)}catch(n){}return!1}function Br(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return o?Br(ve.parentNode(r),i,o):!1;for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return o?Br(ve.parentNode(r),i,o):!1}function sa(r,i,o,e){var t;if(Zs(r)){if(t=r,!ve.childNodes(t).length)return!1}else{if(ve.parentElement(r)===null)return!1;t=ve.parentElement(r)}try{if(typeof i=="string"){if(e){if(t.closest("."+i))return!0}else if(t.classList.contains(i))return!0}else if(Br(t,i,e))return!0;if(o){if(e){if(t.closest(o))return!0}else if(t.matches(o))return!0}}catch(n){}return!1}function vh(r,i,o){var e=r.contentWindow;if(e){var t=!1,n;try{n=e.document.readyState}catch(u){return}if(n!=="complete"){var s=setTimeout(function(){t||(i(),t=!0)},o);r.addEventListener("load",function(){clearTimeout(s),t=!0,i()});return}var a="about:blank";if(e.location.href!==a||r.src===a||r.src==="")return setTimeout(i,0),r.addEventListener("load",i);r.addEventListener("load",i)}}function mh(r,i,o){var e=!1,t;try{t=r.sheet}catch(s){return}if(!t){var n=setTimeout(function(){e||(i(),e=!0)},o);r.addEventListener("load",function(){clearTimeout(n),e=!0,i()})}}function gh(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.needsMask,a=i.inlineStylesheet,u=i.maskInputOptions,f=u===void 0?{}:u,l=i.maskTextFn,c=i.maskInputFn,h=i.dataURLOptions,v=h===void 0?{}:h,p=i.inlineImages,m=i.recordCanvas,d=i.keepIframeSrcFn,g=i.newlyAddedElement,w=g===void 0?!1:g,b=i.cssCaptured,S=b===void 0?!1:b,C=yh(o,e);switch(r.nodeType){case r.DOCUMENT_NODE:return r.compatMode!=="CSS1Compat"?{type:he.Document,childNodes:[],compatMode:r.compatMode}:{type:he.Document,childNodes:[]};case r.DOCUMENT_TYPE_NODE:return{type:he.DocumentType,name:r.name,publicId:r.publicId,systemId:r.systemId,rootId:C};case r.ELEMENT_NODE:return bh(r,{doc:o,blockClass:t,blockSelector:n,inlineStylesheet:a,maskInputOptions:f,maskInputFn:c,dataURLOptions:v,inlineImages:p,recordCanvas:m,keepIframeSrcFn:d,newlyAddedElement:w,rootId:C});case r.TEXT_NODE:return wh(r,{doc:o,needsMask:s,maskTextFn:l,rootId:C,cssCaptured:S});case r.CDATA_SECTION_NODE:return{type:he.CDATA,textContent:"",rootId:C};case r.COMMENT_NODE:return{type:he.Comment,textContent:ve.textContent(r)||"",rootId:C};default:return!1}}function yh(r,i){if(i.hasNode(r)){var o=i.getId(r);return o===1?void 0:o}}function wh(r,i){var o=i.needsMask,e=i.maskTextFn,t=i.rootId,n=i.cssCaptured,s=ve.parentNode(r),a=s&&s.tagName,u="",f=a==="STYLE"?!0:void 0,l=a==="SCRIPT"?!0:void 0;return l?u="SCRIPT_PLACEHOLDER":n||(u=ve.textContent(r),f&&u&&(u=Dr(u,Ai(i.doc)))),!f&&!l&&u&&o&&(u=e?e(u,ve.parentElement(r)):u.replace(/[\S]/g,"*")),{type:he.Text,textContent:u||"",rootId:t}}function bh(r,i){for(var o=i.doc,e=i.blockClass,t=i.blockSelector,n=i.inlineStylesheet,s=i.maskInputOptions,a=s===void 0?{}:s,u=i.maskInputFn,f=i.dataURLOptions,l=f===void 0?{}:f,c=i.inlineImages,h=i.recordCanvas,v=i.keepIframeSrcFn,p=i.newlyAddedElement,m=p===void 0?!1:p,d=i.rootId,g=ph(r,e,t),w=fh(r),b={},S=r.attributes.length,C=0;C1&&(k=sh(k,r)),b._cssText=k)}if(w==="input"||w==="textarea"||w==="select"){var N=r.value,ae=r.checked;b.type!=="radio"&&b.type!=="checkbox"&&b.type!=="submit"&&b.type!=="button"&&N?b.value=Qt({element:r,type:er(r),tagName:w,value:N,maskInputOptions:a,maskInputFn:u}):ae&&(b.checked=ae)}if((w==="input"||w==="textarea")&&b.placeholder&&(b.placeholder=Qt({element:r,type:er(r),tagName:w,value:b.placeholder,maskInputOptions:a,maskInputFn:u})),w==="option"&&(r.selected&&!a.select?b.selected=!0:delete b.selected),w==="dialog"&&r.open&&(b.rr_open_mode=r.matches("dialog:modal")?"modal":"non-modal"),w==="canvas"&&h){if(r.__context==="2d")Qc(r)||(b.rr_dataURL=r.toDataURL(l.type,l.quality));else if(!("__context"in r)){var _=r.toDataURL(l.type,l.quality),L=o.createElement("canvas");L.width=r.width,L.height=r.height;var oe=L.toDataURL(l.type,l.quality);_!==oe&&(b.rr_dataURL=_)}}if(w==="img"&&c){It||(It=o.createElement("canvas"),ra=It.getContext("2d"));var z=r,Ce=z.currentSrc||z.getAttribute("src")||"",be=z.crossOrigin,pe=function(){z.removeEventListener("load",pe);try{It.width=z.naturalWidth,It.height=z.naturalHeight,ra.drawImage(z,0,0),b.rr_dataURL=It.toDataURL(l.type,l.quality)}catch(Re){if(z.crossOrigin!=="anonymous"){z.crossOrigin="anonymous",z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe);return}else console.warn("Cannot inline img src="+Ce+"! Error: "+Re)}z.crossOrigin==="anonymous"&&(be?b.crossOrigin=be:z.removeAttribute("crossorigin"))};z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe)}if(w==="audio"||w==="video"){var ie=b;ie.rr_mediaState=r.paused?"paused":"played",ie.rr_mediaCurrentTime=r.currentTime,ie.rr_mediaPlaybackRate=r.playbackRate,ie.rr_mediaMuted=r.muted,ie.rr_mediaLoop=r.loop,ie.rr_mediaVolume=r.volume}if(m||(r.scrollLeft&&(b.rr_scrollLeft=r.scrollLeft),r.scrollTop&&(b.rr_scrollTop=r.scrollTop)),g){var de=r.getBoundingClientRect(),dt=de.width,Ne=de.height;b={class:b.class,rr_width:""+dt+"px",rr_height:""+Ne+"px"}}w==="iframe"&&!v(b.src)&&(r.contentDocument||(b.rr_src=b.src),delete b.src);var pt;try{customElements.get(w)&&(pt=!0)}catch(Re){}return{type:he.Element,tagName:w,attributes:b,childNodes:[],isSVG:dh(r)||void 0,needBlock:g,rootId:d,isCustom:pt}}function Y(r){return r==null?"":r.toLowerCase()}function Sh(r,i){if(i.comment&&r.type===he.Comment)return!0;if(r.type===he.Element){if(i.script&&(r.tagName==="script"||r.tagName==="link"&&(r.attributes.rel==="preload"&&r.attributes.as==="script"||r.attributes.rel==="modulepreload")||r.tagName==="link"&&r.attributes.rel==="prefetch"&&typeof r.attributes.href=="string"&&ea(r.attributes.href)==="js"))return!0;if(i.headFavicon&&(r.tagName==="link"&&r.attributes.rel==="shortcut icon"||r.tagName==="meta"&&(Y(r.attributes.name).match(/^msapplication-tile(image|color)$/)||Y(r.attributes.name)==="application-name"||Y(r.attributes.rel)==="icon"||Y(r.attributes.rel)==="apple-touch-icon"||Y(r.attributes.rel)==="shortcut icon")))return!0;if(r.tagName==="meta"){if(i.headMetaDescKeywords&&Y(r.attributes.name).match(/^description|keywords$/))return!0;if(i.headMetaSocial&&(Y(r.attributes.property).match(/^(og|twitter|fb):/)||Y(r.attributes.name).match(/^(og|twitter):/)||Y(r.attributes.name)==="pinterest"))return!0;if(i.headMetaRobots&&(Y(r.attributes.name)==="robots"||Y(r.attributes.name)==="googlebot"||Y(r.attributes.name)==="bingbot"))return!0;if(i.headMetaHttpEquiv&&r.attributes["http-equiv"]!==void 0)return!0;if(i.headMetaAuthorship&&(Y(r.attributes.name)==="author"||Y(r.attributes.name)==="generator"||Y(r.attributes.name)==="framework"||Y(r.attributes.name)==="publisher"||Y(r.attributes.name)==="progid"||Y(r.attributes.property).match(/^article:/)||Y(r.attributes.property).match(/^product:/)))return!0;if(i.headMetaVerification&&(Y(r.attributes.name)==="google-site-verification"||Y(r.attributes.name)==="yandex-verification"||Y(r.attributes.name)==="csrf-token"||Y(r.attributes.name)==="p:domain_verify"||Y(r.attributes.name)==="verify-v1"||Y(r.attributes.name)==="verification"||Y(r.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function Rt(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.maskTextClass,a=i.maskTextSelector,u=i.skipChild,f=u===void 0?!1:u,l=i.inlineStylesheet,c=l===void 0?!0:l,h=i.maskInputOptions,v=h===void 0?{}:h,p=i.maskTextFn,m=i.maskInputFn,d=i.slimDOMOptions,g=i.dataURLOptions,w=g===void 0?{}:g,b=i.inlineImages,S=b===void 0?!1:b,C=i.recordCanvas,R=C===void 0?!1:C,E=i.onSerialize,x=i.onIframeLoad,k=i.iframeLoadTimeout,N=k===void 0?5e3:k,ae=i.onStylesheetLoad,_=i.stylesheetLoadTimeout,L=_===void 0?5e3:_,oe=i.keepIframeSrcFn,z=oe===void 0?function(){return!1}:oe,Ce=i.newlyAddedElement,be=Ce===void 0?!1:Ce,pe=i.cssCaptured,ie=pe===void 0?!1:pe,de=i.needsMask,dt=i.preserveWhiteSpace,Ne=dt===void 0?!0:dt;if(!de){var pt=de===void 0;de=sa(r,s,a,pt)}var Re=gh(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,dataURLOptions:w,inlineImages:S,recordCanvas:R,keepIframeSrcFn:z,newlyAddedElement:be,cssCaptured:ie});if(!Re)return console.warn(r,"not serialized"),null;var Qe;e.hasNode(r)?Qe=e.getId(r):Sh(Re,d)||!Ne&&Re.type===he.Text&&!Re.textContent.replace(/^\s+|\s+$/gm,"").length?Qe=tr:Qe=ta();var j=Object.assign(Re,{id:Qe});if(e.add(r,j),Qe===tr)return null;E&&E(r);var qt=!f;if(j.type===he.Element){qt=qt&&!j.needBlock,delete j.needBlock;var Vt=ve.shadowRoot(r);Vt&&Xt(Vt)&&(j.isShadowHost=!0)}if((j.type===he.Document||j.type===he.Element)&&qt){d.headWhitespace&&j.type===he.Element&&j.tagName==="head"&&(Ne=!1);var et={doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:f,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:L,keepIframeSrcFn:z,cssCaptured:!1};if(!(j.type===he.Element&&j.tagName==="textarea"&&j.attributes.value!==void 0)){j.type===he.Element&&j.attributes._cssText!==void 0&&typeof j.attributes._cssText=="string"&&(et.cssCaptured=!0);for(var mi=I(Array.from(ve.childNodes(r))),Ht;!(Ht=mi()).done;){var gi=Ht.value,yi=Rt(gi,et);yi&&j.childNodes.push(yi)}}var Pr=null;if(Zs(r)&&(Pr=ve.shadowRoot(r)))for(var vt=I(Array.from(ve.childNodes(Pr))),mt;!(mt=vt()).done;){var gt=mt.value,yt=Rt(gt,et);yt&&(Xt(Pr)&&(yt.isShadow=!0),j.childNodes.push(yt))}}var wt=ve.parentNode(r);return wt&&Kt(wt)&&Xt(wt)&&(j.isShadow=!0),j.type===he.Element&&j.tagName==="iframe"&&vh(r,function(){var ze=r.contentDocument;if(ze&&x){var Yt=Rt(ze,{doc:ze,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:L,keepIframeSrcFn:z});Yt&&x(r,Yt)}},N),j.type===he.Element&&j.tagName==="link"&&typeof j.attributes.rel=="string"&&(j.attributes.rel==="stylesheet"||j.attributes.rel==="preload"&&typeof j.attributes.href=="string"&&ea(j.attributes.href)==="css")&&mh(r,function(){if(ae){var ze=Rt(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:L,keepIframeSrcFn:z});ze&&ae(r,ze)}},L),j}function Ch(r,i){var o=i||{},e=o.mirror,t=e===void 0?new Xs:e,n=o.blockClass,s=n===void 0?"rr-block":n,a=o.blockSelector,u=a===void 0?null:a,f=o.maskTextClass,l=f===void 0?"rr-mask":f,c=o.maskTextSelector,h=c===void 0?null:c,v=o.inlineStylesheet,p=v===void 0?!0:v,m=o.inlineImages,d=m===void 0?!1:m,g=o.recordCanvas,w=g===void 0?!1:g,b=o.maskAllInputs,S=b===void 0?!1:b,C=o.maskTextFn,R=o.maskInputFn,E=o.slimDOM,x=E===void 0?!1:E,k=o.dataURLOptions,N=o.preserveWhiteSpace,ae=o.onSerialize,_=o.onIframeLoad,L=o.iframeLoadTimeout,oe=o.onStylesheetLoad,z=o.stylesheetLoadTimeout,Ce=o.keepIframeSrcFn,be=Ce===void 0?function(){return!1}:Ce,pe=S===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:S===!1?{password:!0}:S,ie=x===!0||x==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:x==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:x===!1?{}:x;return Rt(r,{doc:r,mirror:t,blockClass:s,blockSelector:u,maskTextClass:l,maskTextSelector:h,skipChild:!1,inlineStylesheet:p,maskInputOptions:pe,maskTextFn:C,maskInputFn:R,slimDOMOptions:ie,dataURLOptions:k,inlineImages:d,recordCanvas:w,preserveWhiteSpace:N,onSerialize:ae,onIframeLoad:_,iframeLoadTimeout:L,onStylesheetLoad:oe,stylesheetLoadTimeout:z,keepIframeSrcFn:be,newlyAddedElement:!1})}function Ih(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function Oh(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Mi={exports:{}},K=String,aa=function(){return{isColorSupported:!1,reset:K,bold:K,dim:K,italic:K,underline:K,inverse:K,hidden:K,strikethrough:K,black:K,red:K,green:K,yellow:K,blue:K,magenta:K,cyan:K,white:K,gray:K,bgBlack:K,bgRed:K,bgGreen:K,bgYellow:K,bgBlue:K,bgMagenta:K,bgCyan:K,bgWhite:K}};Mi.exports=aa(),Mi.exports.createColors=aa;var Rh=Mi.exports,xh={},Eh=Object.freeze(Object.defineProperty({__proto__:null,default:xh},Symbol.toStringTag,{value:"Module"})),ue=Oh(Eh),ua=Rh,fa=ue,$i=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ua.isColorSupported),fa&&t&&(s=fa(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ua.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Zt(Error)),ki=$i;$i.default=$i;var Ge={};Ge.isClean=Symbol("isClean"),Ge.my=Symbol("my");var la={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Ah(r){return r[0].toUpperCase()+r.slice(1)}var _i=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),ca=_i;_i.default=_i;var Mh=ca;function Pi(r,i){var o=new Mh(i);o.stringify(r)}var Ur=Pi;Pi.default=Pi;var zr=Ge.isClean,$h=Ge.my,kh=ki,_h=ca,Ph=Ur;function Ti(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Ti(s,o)}):(n==="object"&&t!==null&&(t=Ti(t)),o[e]=t)}return o}var Ni=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[zr]=!1,this[$h]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Ti(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new kh(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[zr]){this[zr]=!1;for(var e=this;e=e.parent;)e[zr]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=Di(e),Fh(e))return this.mapFile=e,Bh(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,ha))return da.fromSourceMap(t).toString();if(A(t,da))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Uh(Di(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),pa=Fi;Fi.default=Fi;var Wh=ue.SourceMapConsumer,jh=ue.SourceMapGenerator,va=ue.fileURLToPath,Gr=ue.pathToFileURL,Bi=ue.isAbsolute,Ui=ue.resolve,Gh=Dh.nanoid,zi=ue,ma=ki,qh=pa,Wi=Symbol("fromOffsetCache"),Vh=!!(Wh&&jh),ga=!!(Ui&&Bi),qr=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!ga||/^\w+:\/\//.test(e.from)||Bi(e.from)?this.file=e.from:this.file=Ui(e.from)),ga&&Vh){var t=new qh(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new ma(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new ma(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(Gr&&(a.input.url=Gr(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[Wi])n=this[Wi];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Ui(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;Bi(u.source)?l=Gr(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Gr(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(va)c.file=va(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Jh&&Yh&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Hr.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Hr({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new Hr({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?Yr(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=Yr(ba(n,this.mapOpts.annotation)));var s=wa(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Hh(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(Ca){var n=Ca(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;Sa==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),Ia=Zh,Kh=Wr,ji=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Kh),Jr=ji;ji.default=ji;var Oa=Ge.isClean,Ra=Ge.my,xa=jr,Ea=Jr,Xh=Wr,Aa,Gi,qi,Ma;function $a(r){return r.map(function(i){return i.nodes&&(i.nodes=$a(i.nodes)),delete i.source,i})}function ka(r){if(r[Oa]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ka(e)}}var Le=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Xh);Le.registerParse=function(r){Aa=r},Le.registerRule=function(r){Gi=r},Le.registerAtRule=function(r){qi=r},Le.registerRoot=function(r){Ma=r};var it=Le;Le.default=Le,Le.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,qi.prototype):r.type==="rule"?Object.setPrototypeOf(r,Gi.prototype):r.type==="decl"?Object.setPrototypeOf(r,xa.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ea.prototype):r.type==="root"&&Object.setPrototypeOf(r,Ma.prototype),r[Ra]=!0,r.nodes&&r.nodes.forEach(function(i){Le.rebuild(i)})};var Qh=it,_a,Pa,rr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new _a(new Pa,this,t);return n.stringify()},i})(Qh);rr.registerLazyResult=function(r){_a=r},rr.registerProcessor=function(r){Pa=r};var Vi=rr;rr.default=rr;var Ta={},Na=function(i){Ta[i]||(Ta[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Hi=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),La=Hi;Hi.default=Hi;var ed=La,Yi=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new ed(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ji=Yi;Yi.default=Yi;var Zi=39,Da=34,Zr=92,Fa=47,Kr=10,nr=32,Xr=12,Qr=9,en=13,td=91,rd=93,nd=40,id=41,od=123,sd=125,ad=59,ud=42,fd=58,ld=64,tn=/[\t\n\f\r "#'()/;[\\\]{}]/g,rn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,cd=/.[\r\n"'(/\\]/,Ba=/[\da-f]/i,hd=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Kr:case nr:case Qr:case en:case Xr:{s=d;do s+=1,n=e.charCodeAt(s);while(n===nr||n===Kr||n===Qr||n===en||n===Xr);p=["space",e.slice(d,s)],d=s-1;break}case td:case rd:case od:case sd:case fd:case ad:case id:{var N=String.fromCharCode(n);p=[N,N,d];break}case nd:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==Zi&&v!==Da&&v!==nr&&v!==Kr&&v!==Qr&&v!==Xr&&v!==en){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Zr;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||cd.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case Zi:case Da:{a=n===Zi?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Zr;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case ld:{tn.lastIndex=d+1,tn.test(e),tn.lastIndex===0?s=e.length-1:s=tn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Zr:{for(s=d,f=!0;e.charCodeAt(s+1)===Zr;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Fa&&n!==nr&&n!==Kr&&n!==Qr&&n!==en&&n!==Xr&&(s+=1,Ba.test(e.charAt(s)))){for(;Ba.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===nr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Fa&&e.charCodeAt(d+1)===ud?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(rn.lastIndex=d+1,rn.test(e),rn.lastIndex===0?s=e.length-1:s=rn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Ua=it,nn=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Wa(new ja,this,t);return n.stringify()},i})(za);xt.registerLazyResult=function(r){Wa=r},xt.registerProcessor=function(r){ja=r};var ir=xt;xt.default=xt,za.registerRoot(xt);var or={comma:function(i){return or.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return or.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},Ga=or;or.default=or;var qa=it,dd=Ga,on=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return dd.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(qa),Xi=on;on.default=on,qa.registerRule(on);var pd=jr,vd=hd,md=Jr,gd=Ki,yd=ir,Va=Xi,Ha={empty:!0,space:!0};function wd(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var bd=(function(){function r(o){this.input=o,this.root=new yd,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new gd;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new md;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=vd(this.input)},i.decl=function(e,t){var n=new pd;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||wd(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Va;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!Td[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Nd[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return Tr(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!sr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return sr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=Ed;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new xd(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(sr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Ae];)a[Ae]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||$d("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(sr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ou.isColorSupported),su&&t&&(s=su(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ou.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Zt(Error)),so=oo;oo.default=oo;var qe={};qe.isClean=Symbol("isClean"),qe.my=Symbol("my");var au={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function bp(r){return r[0].toUpperCase()+r.slice(1)}var ao=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),uu=ao;ao.default=ao;var Sp=uu;function uo(r,i){var o=new Sp(i);o.stringify(r)}var an=uo;uo.default=uo;var un=qe.isClean,Cp=qe.my,Ip=so,Op=uu,Rp=an;function fo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return fo(s,o)}):(n==="object"&&t!==null&&(t=fo(t)),o[e]=t)}return o}var lo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[un]=!1,this[Cp]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=fo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new Ip(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[un]){this[un]=!1;for(var e=this;e=e.parent;)e[un]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ho(e),$p(e))return this.mapFile=e,kp(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,fu))return lu.fromSourceMap(t).toString();if(A(t,lu))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=_p(ho(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),cu=po;po.default=po;var Tp=fe.SourceMapConsumer,Np=fe.SourceMapGenerator,hu=fe.fileURLToPath,cn=fe.pathToFileURL,vo=fe.isAbsolute,mo=fe.resolve,Lp=Mp.nanoid,go=fe,du=so,Dp=cu,yo=Symbol("fromOffsetCache"),Fp=!!(Tp&&Np),pu=!!(mo&&vo),hn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!pu||/^\w+:\/\//.test(e.from)||vo(e.from)?this.file=e.from:this.file=mo(e.from)),pu&&Fp){var t=new Dp(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new du(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new du(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(cn&&(a.input.url=cn(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[yo])n=this[yo];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:mo(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;vo(u.source)?l=cn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||cn(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(hu)c.file=hu(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),zp&&Up&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=pn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new pn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new pn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?vn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=vn(gu(n,this.mapOpts.annotation)));var s=mu(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Bp(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(wu){var n=wu(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;yu==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),bu=Wp,jp=fn,wo=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(jp),mn=wo;wo.default=wo;var Su=qe.isClean,Cu=qe.my,Iu=ln,Ou=mn,Gp=fn,Ru,bo,So,xu;function Eu(r){return r.map(function(i){return i.nodes&&(i.nodes=Eu(i.nodes)),delete i.source,i})}function Au(r){if(r[Su]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;Au(e)}}var De=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Gp);De.registerParse=function(r){Ru=r},De.registerRule=function(r){bo=r},De.registerAtRule=function(r){So=r},De.registerRoot=function(r){xu=r};var ot=De;De.default=De,De.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,So.prototype):r.type==="rule"?Object.setPrototypeOf(r,bo.prototype):r.type==="decl"?Object.setPrototypeOf(r,Iu.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ou.prototype):r.type==="root"&&Object.setPrototypeOf(r,xu.prototype),r[Cu]=!0,r.nodes&&r.nodes.forEach(function(i){De.rebuild(i)})};var qp=ot,Mu,$u,fr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new Mu(new $u,this,t);return n.stringify()},i})(qp);fr.registerLazyResult=function(r){Mu=r},fr.registerProcessor=function(r){$u=r};var Co=fr;fr.default=fr;var ku={},_u=function(i){ku[i]||(ku[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Io=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),Pu=Io;Io.default=Io;var Vp=Pu,Oo=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Vp(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ro=Oo;Oo.default=Oo;var xo=39,Tu=34,gn=92,Nu=47,yn=10,lr=32,wn=12,bn=9,Sn=13,Hp=91,Yp=93,Jp=40,Zp=41,Kp=123,Xp=125,Qp=59,ev=42,tv=58,rv=64,Cn=/[\t\n\f\r "#'()/;[\\\]{}]/g,In=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,nv=/.[\r\n"'(/\\]/,Lu=/[\da-f]/i,iv=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case yn:case lr:case bn:case Sn:case wn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===lr||n===yn||n===bn||n===Sn||n===wn);p=["space",e.slice(d,s)],d=s-1;break}case Hp:case Yp:case Kp:case Xp:case tv:case Qp:case Zp:{var N=String.fromCharCode(n);p=[N,N,d];break}case Jp:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==xo&&v!==Tu&&v!==lr&&v!==yn&&v!==bn&&v!==wn&&v!==Sn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===gn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||nv.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case xo:case Tu:{a=n===xo?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===gn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case rv:{Cn.lastIndex=d+1,Cn.test(e),Cn.lastIndex===0?s=e.length-1:s=Cn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case gn:{for(s=d,f=!0;e.charCodeAt(s+1)===gn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Nu&&n!==lr&&n!==yn&&n!==bn&&n!==Sn&&n!==wn&&(s+=1,Lu.test(e.charAt(s)))){for(;Lu.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===lr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Nu&&e.charCodeAt(d+1)===ev?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(In.lastIndex=d+1,In.test(e),In.lastIndex===0?s=e.length-1:s=In.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Du=ot,On=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Bu(new Uu,this,t);return n.stringify()},i})(Fu);Mt.registerLazyResult=function(r){Bu=r},Mt.registerProcessor=function(r){Uu=r};var cr=Mt;Mt.default=Mt,Fu.registerRoot(Mt);var hr={comma:function(i){return hr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return hr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},zu=hr;hr.default=hr;var Wu=ot,ov=zu,Rn=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return ov.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Wu),Ao=Rn;Rn.default=Rn,Wu.registerRule(Rn);var sv=ln,av=iv,uv=mn,fv=Eo,lv=cr,ju=Ao,Gu={empty:!0,space:!0};function cv(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var hv=(function(){function r(o){this.input=o,this.root=new lv,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new fv;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new uv;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=av(this.input)},i.decl=function(e,t){var n=new sv;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||cv(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new ju;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!xv[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Ev[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return Tr(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!dr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return dr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=wv;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new yv(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(dr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Me];)a[Me]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Cv("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(dr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndexi?(e&&(clearTimeout(e),e=null),t=u,r.apply(l,s)):!e&&o.trailing!==!1&&(e=setTimeout(function(){t=o.leading===!1?0:Date.now(),e=null,r.apply(l,s)},f))}}function An(r,i,o,e,t){t===void 0&&(t=window);var n=t.Object.getOwnPropertyDescriptor(r,i);return t.Object.defineProperty(r,i,e?o:{set:function(a){var u=this;setTimeout(function(){o.set.call(u,a)},0),n&&n.set&&n.set.call(this,a)}}),function(){return An(r,i,n||{},!0)}}var Mn=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(Mn=function(){return new Date().getTime()});function af(r){var i,o,e,t,n=r.document;return{left:n.scrollingElement?n.scrollingElement.scrollLeft:r.pageXOffset!==void 0?r.pageXOffset:n.documentElement.scrollLeft||(n==null?void 0:n.body)&&((i=D.parentElement(n.body))==null?void 0:i.scrollLeft)||((o=n==null?void 0:n.body)==null?void 0:o.scrollLeft)||0,top:n.scrollingElement?n.scrollingElement.scrollTop:r.pageYOffset!==void 0?r.pageYOffset:(n==null?void 0:n.documentElement.scrollTop)||(n==null?void 0:n.body)&&((e=D.parentElement(n.body))==null?void 0:e.scrollTop)||((t=n==null?void 0:n.body)==null?void 0:t.scrollTop)||0}}function uf(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function ff(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function lf(r){if(!r)return null;var i=r.nodeType===r.ELEMENT_NODE?r:D.parentElement(r);return i}function ge(r,i,o,e){if(!r)return!1;var t=lf(r);if(!t)return!1;try{if(typeof i=="string"){if(t.classList.contains(i)||e&&t.closest("."+i)!==null)return!0}else if(Br(t,i,e))return!0}catch(n){}return!!(o&&(t.matches(o)||e&&t.closest(o)!==null))}function ym(r,i){return i.getId(r)!==-1}function Do(r,i,o){return r.tagName==="TITLE"&&o.headTitleMutations?!0:i.getId(r)===tr}function cf(r,i){if(Kt(r))return!1;var o=i.getId(r);if(!i.has(o))return!0;var e=D.parentNode(r);return e&&e.nodeType===r.DOCUMENT_NODE?!1:e?cf(e,i):!0}function Fo(r){return!!r.changedTouches}function wm(r){r===void 0&&(r=window),"NodeList"in r&&!r.NodeList.prototype.forEach&&(r.NodeList.prototype.forEach=Array.prototype.forEach),"DOMTokenList"in r&&!r.DOMTokenList.prototype.forEach&&(r.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function hf(r,i){return!!(r.nodeName==="IFRAME"&&i.getMeta(r))}function df(r,i){return!!(r.nodeName==="LINK"&&r.nodeType===r.ELEMENT_NODE&&r.getAttribute&&r.getAttribute("rel")==="stylesheet"&&i.getMeta(r))}function Bo(r){return r?A(r,om)&&"shadowRoot"in r?!!r.shadowRoot:!!D.shadowRoot(r):!1}var bm=(function(){function r(){O(this,"id",1),O(this,"styleIDMap",new WeakMap),O(this,"idStyleMap",new Map)}var i=r.prototype;return i.getId=function(e){var t;return(t=this.styleIDMap.get(e))!=null?t:-1},i.has=function(e){return this.styleIDMap.has(e)},i.add=function(e,t){if(this.has(e))return this.getId(e);var n;return t===void 0?n=this.id++:n=t,this.styleIDMap.set(e,n),this.idStyleMap.set(n,e),n},i.getStyle=function(e){return this.idStyleMap.get(e)||null},i.reset=function(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1},i.generateId=function(){return this.id++},i.remove=function(e){var t=this.styleIDMap.get(e);return t!==void 0?(this.styleIDMap.delete(e),this.idStyleMap.delete(t),!0):!1},r})();function pf(r){var i,o=null;return"getRootNode"in r&&((i=D.getRootNode(r))==null?void 0:i.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&D.host(D.getRootNode(r))&&(o=D.host(D.getRootNode(r))),o}function Sm(r){for(var i=r,o;o=pf(i);)i=o;return i}function Cm(r){var i=r.ownerDocument;if(!i)return!1;var o=Sm(r);return D.contains(i,o)}function vf(r){var i=r.ownerDocument;return i?D.contains(i,r)||Cm(r):!1}var B=(function(r){return r[r.DomContentLoaded=0]="DomContentLoaded",r[r.Load=1]="Load",r[r.FullSnapshot=2]="FullSnapshot",r[r.IncrementalSnapshot=3]="IncrementalSnapshot",r[r.Meta=4]="Meta",r[r.Custom=5]="Custom",r[r.Plugin=6]="Plugin",r})(B||{}),P=(function(r){return r[r.Mutation=0]="Mutation",r[r.MouseMove=1]="MouseMove",r[r.MouseInteraction=2]="MouseInteraction",r[r.Scroll=3]="Scroll",r[r.ViewportResize=4]="ViewportResize",r[r.Input=5]="Input",r[r.TouchMove=6]="TouchMove",r[r.MediaInteraction=7]="MediaInteraction",r[r.StyleSheetRule=8]="StyleSheetRule",r[r.CanvasMutation=9]="CanvasMutation",r[r.Font=10]="Font",r[r.Log=11]="Log",r[r.Drag=12]="Drag",r[r.StyleDeclaration=13]="StyleDeclaration",r[r.Selection=14]="Selection",r[r.AdoptedStyleSheet=15]="AdoptedStyleSheet",r[r.CustomElement=16]="CustomElement",r})(P||{}),we=(function(r){return r[r.MouseUp=0]="MouseUp",r[r.MouseDown=1]="MouseDown",r[r.Click=2]="Click",r[r.ContextMenu=3]="ContextMenu",r[r.DblClick=4]="DblClick",r[r.Focus=5]="Focus",r[r.Blur=6]="Blur",r[r.TouchStart=7]="TouchStart",r[r.TouchMove_Departed=8]="TouchMove_Departed",r[r.TouchEnd=9]="TouchEnd",r[r.TouchCancel=10]="TouchCancel",r})(we||{}),Fe=(function(r){return r[r.Mouse=0]="Mouse",r[r.Pen=1]="Pen",r[r.Touch=2]="Touch",r})(Fe||{}),Pt=(function(r){return r[r["2D"]=0]="2D",r[r.WebGL=1]="WebGL",r[r.WebGL2=2]="WebGL2",r})(Pt||{}),Tt=(function(r){return r[r.Play=0]="Play",r[r.Pause=1]="Pause",r[r.Seeked=2]="Seeked",r[r.VolumeChange=3]="VolumeChange",r[r.RateChange=4]="RateChange",r})(Tt||{}),mf=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(mf||{});function gf(r){return"__ln"in r}var Im=(function(){function r(){O(this,"length",0),O(this,"head",null),O(this,"tail",null)}var i=r.prototype;return i.get=function(e){if(e>=this.length)throw new Error("Position outside of list range");for(var t=this.head,n=0;n=0;i--){var o=$e[i];o.getDoc()===r&&$e.splice(i,1)}}function $m(r){var i=r.mousemoveCb,o=r.sampling,e=r.doc,t=r.mirror;if(o.mousemove===!1)return function(){};var n=typeof o.mousemove=="number"?o.mousemove:50,s=typeof o.mousemoveCallback=="number"?o.mousemoveCallback:500,a=[],u,f=mr(U(function(h){var v=Date.now()-u;i(a.map(function(p){return p.timeOffset-=v,p}),h),a=[],u=null}),s),l=U(mr(U(function(h){var v=yr(h),p=Fo(h)?h.changedTouches[0]:h,m=p.clientX,d=p.clientY;u||(u=Mn()),a.push({x:m,y:d,id:t.getId(v),timeOffset:Mn()-u}),f(typeof DragEvent!="undefined"&&A(h,DragEvent)?P.Drag:A(h,MouseEvent)?P.MouseMove:P.TouchMove)}),n,{trailing:!1})),c=[me("mousemove",l,e),me("touchmove",l,e),me("drag",l,e)];return U(function(){c.forEach(function(h){return h()})})}function km(r){var i=r.mouseInteractionCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling;if(s.mouseInteraction===!1)return function(){};var a=s.mouseInteraction===!0||s.mouseInteraction===void 0?{}:s.mouseInteraction,u=[],f=null,l=function(c){return function(h){var v=yr(h);if(!ge(v,t,n,!0)){var p=null,m=c;if("pointerType"in h){switch(h.pointerType){case"mouse":p=Fe.Mouse;break;case"touch":p=Fe.Touch;break;case"pen":p=Fe.Pen;break}p===Fe.Touch?we[c]===we.MouseDown?m="TouchStart":we[c]===we.MouseUp&&(m="TouchEnd"):Fe.Pen}else Fo(h)&&(p=Fe.Touch);p!==null?(f=p,(m.startsWith("Touch")&&p===Fe.Touch||m.startsWith("Mouse")&&p===Fe.Mouse)&&(p=null)):we[c]===we.Click&&(p=f,f=null);var d=Fo(h)?h.changedTouches[0]:h;if(d){var g=e.getId(v),w=d.clientX,b=d.clientY;U(i)(T({type:we[m],id:g,x:w,y:b},p!==null&&{pointerType:p}))}}}};return Object.keys(we).filter(function(c){return Number.isNaN(Number(c))&&!c.endsWith("_Departed")&&a[c]!==!1}).forEach(function(c){var h=nt(c),v=l(c);if(window.PointerEvent)switch(we[c]){case we.MouseDown:case we.MouseUp:h=h.replace("mouse","pointer");break;case we.TouchStart:case we.TouchEnd:return}u.push(me(h,v,o))}),U(function(){u.forEach(function(c){return c()})})}function If(r){var i=r.scrollCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling,a=U(mr(U(function(u){var f=yr(u);if(!(!f||ge(f,t,n,!0))){var l=e.getId(f);if(f===o&&o.defaultView){var c=af(o.defaultView);i({id:l,x:c.left,y:c.top})}else i({id:l,x:f.scrollLeft,y:f.scrollTop})}}),s.scroll||100));return me("scroll",a,o)}function _m(r,i){var o=r.viewportResizeCb,e=i.win,t=-1,n=-1,s=U(mr(U(function(){var a=uf(),u=ff();(t!==a||n!==u)&&(o({width:Number(u),height:Number(a)}),t=a,n=u)}),200));return me("resize",s,e)}var Pm=["INPUT","TEXTAREA","SELECT"],Of=new WeakMap;function Tm(r){var i=r.inputCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.ignoreClass,a=r.ignoreSelector,u=r.maskInputOptions,f=r.maskInputFn,l=r.sampling,c=r.userTriggeredOnInput;function h(S){var C=yr(S),R=S.isTrusted,E=C&&C.tagName;if(C&&E==="OPTION"&&(C=D.parentElement(C)),!(!C||!E||Pm.indexOf(E)<0||ge(C,t,n,!0))&&!(C.classList.contains(s)||a&&C.matches(a))){var x=C.value,k=!1,N=er(C)||"";N==="radio"||N==="checkbox"?k=C.checked:(u[E.toLowerCase()]||u[N])&&(x=Qt({element:C,maskInputOptions:u,tagName:E,type:N,value:x,maskInputFn:f})),v(C,c?{text:x,isChecked:k,userTriggered:R}:{text:x,isChecked:k});var ae=C.name;N==="radio"&&ae&&k&&o.querySelectorAll('input[type="radio"][name="'+ae+'"]').forEach(function(_){if(_!==C){var L=_.value;v(_,c?{text:L,isChecked:!k,userTriggered:!1}:{text:L,isChecked:!k})}})}}function v(S,C){var R=Of.get(S);if(!R||R.text!==C.text||R.isChecked!==C.isChecked){Of.set(S,C);var E=e.getId(S);U(i)(T({},C,{id:E}))}}var p=l.input==="last"?["change"]:["input","change"],m=p.map(function(S){return me(S,U(h),o)}),d=o.defaultView;if(!d)return function(){m.forEach(function(S){return S()})};var g=d.Object.getOwnPropertyDescriptor(d.HTMLInputElement.prototype,"value"),w=[[d.HTMLInputElement.prototype,"value"],[d.HTMLInputElement.prototype,"checked"],[d.HTMLSelectElement.prototype,"value"],[d.HTMLTextAreaElement.prototype,"value"],[d.HTMLSelectElement.prototype,"selectedIndex"],[d.HTMLOptionElement.prototype,"selected"]];if(g&&g.set){var b;(b=m).push.apply(b,[].concat(w.map(function(S){return An(S[0],S[1],{set:function(){U(h)({target:this,isTrusted:!1})}},!1,d)})))}return U(function(){m.forEach(function(S){return S()})})}function $n(r){var i=[];function o(e,t){if(kn("CSSGroupingRule")&&A(e.parentRule,CSSGroupingRule)||kn("CSSMediaRule")&&A(e.parentRule,CSSMediaRule)||kn("CSSSupportsRule")&&A(e.parentRule,CSSSupportsRule)||kn("CSSConditionRule")&&A(e.parentRule,CSSConditionRule)){var n=Array.from(e.parentRule.cssRules),s=n.indexOf(e);t.unshift(s)}else if(e.parentStyleSheet){var a=Array.from(e.parentStyleSheet.cssRules),u=a.indexOf(e);t.unshift(u)}return t}return o(r,i)}function He(r,i,o){var e,t;return r?(r.ownerNode?e=i.getId(r.ownerNode):t=o.getId(r),{styleId:t,id:e}):{}}function Nm(r,i){var o=r.styleSheetRuleCb,e=r.mirror,t=r.stylesheetManager,n=i.win;if(!n.CSSStyleSheet||!n.CSSStyleSheet.prototype)return function(){};var s=n.CSSStyleSheet.prototype.insertRule;n.CSSStyleSheet.prototype.insertRule=new Proxy(s,{apply:U(function(h,v,p){var m=p[0],d=p[1],g=He(v,e,t.styleMirror),w=g.id,b=g.styleId;return(w&&w!==-1||b&&b!==-1)&&o({id:w,styleId:b,adds:[{rule:m,index:d}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.addRule=function(h,v,p){p===void 0&&(p=this.cssRules.length);var m=h+" { "+v+" }";return n.CSSStyleSheet.prototype.insertRule.apply(this,[m,p])};var a=n.CSSStyleSheet.prototype.deleteRule;n.CSSStyleSheet.prototype.deleteRule=new Proxy(a,{apply:U(function(h,v,p){var m=p[0],d=He(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,removes:[{index:m}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.removeRule=function(h){return n.CSSStyleSheet.prototype.deleteRule.apply(this,[h])};var u;n.CSSStyleSheet.prototype.replace&&(u=n.CSSStyleSheet.prototype.replace,n.CSSStyleSheet.prototype.replace=new Proxy(u,{apply:U(function(h,v,p){var m=p[0],d=He(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replace:m}),h.apply(v,p)})}));var f;n.CSSStyleSheet.prototype.replaceSync&&(f=n.CSSStyleSheet.prototype.replaceSync,n.CSSStyleSheet.prototype.replaceSync=new Proxy(f,{apply:U(function(h,v,p){var m=p[0],d=He(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replaceSync:m}),h.apply(v,p)})}));var l={};_n("CSSGroupingRule")?l.CSSGroupingRule=n.CSSGroupingRule:(_n("CSSMediaRule")&&(l.CSSMediaRule=n.CSSMediaRule),_n("CSSConditionRule")&&(l.CSSConditionRule=n.CSSConditionRule),_n("CSSSupportsRule")&&(l.CSSSupportsRule=n.CSSSupportsRule));var c={};return Object.entries(l).forEach(function(h){var v=h[0],p=h[1];c[v]={insertRule:p.prototype.insertRule,deleteRule:p.prototype.deleteRule},p.prototype.insertRule=new Proxy(c[v].insertRule,{apply:U(function(m,d,g){var w=g[0],b=g[1],S=He(d.parentStyleSheet,e,t.styleMirror),C=S.id,R=S.styleId;return(C&&C!==-1||R&&R!==-1)&&o({id:C,styleId:R,adds:[{rule:w,index:[].concat($n(d),[b||0])}]}),m.apply(d,g)})}),p.prototype.deleteRule=new Proxy(c[v].deleteRule,{apply:U(function(m,d,g){var w=g[0],b=He(d.parentStyleSheet,e,t.styleMirror),S=b.id,C=b.styleId;return(S&&S!==-1||C&&C!==-1)&&o({id:S,styleId:C,removes:[{index:[].concat($n(d),[w])}]}),m.apply(d,g)})})}),U(function(){n.CSSStyleSheet.prototype.insertRule=s,n.CSSStyleSheet.prototype.deleteRule=a,u&&(n.CSSStyleSheet.prototype.replace=u),f&&(n.CSSStyleSheet.prototype.replaceSync=f),Object.entries(l).forEach(function(h){var v=h[0],p=h[1];p.prototype.insertRule=c[v].insertRule,p.prototype.deleteRule=c[v].deleteRule})})}function Rf(r,i){var o=r.mirror,e=r.stylesheetManager,t,n,s,a=null;i.nodeName==="#document"?a=o.getId(i):a=o.getId(D.host(i));var u=i.nodeName==="#document"?(t=i.defaultView)==null?void 0:t.Document:(s=(n=i.ownerDocument)==null?void 0:n.defaultView)==null?void 0:s.ShadowRoot,f=u!=null&&u.prototype?Object.getOwnPropertyDescriptor(u==null?void 0:u.prototype,"adoptedStyleSheets"):void 0;return a===null||a===-1||!u||!f?function(){}:(Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:function(){var c;return(c=f.get)==null?void 0:c.call(this)},set:function(c){var h,v=(h=f.set)==null?void 0:h.call(this,c);if(a!==null&&a!==-1)try{e.adoptStyleSheets(c,a)}catch(p){}return v}}),U(function(){Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:f.get,set:f.set})}))}function Lm(r,i){var o=r.styleDeclarationCb,e=r.mirror,t=r.ignoreCSSAttributes,n=r.stylesheetManager,s=i.win,a=s.CSSStyleDeclaration.prototype.setProperty;s.CSSStyleDeclaration.prototype.setProperty=new Proxy(a,{apply:U(function(f,l,c){var h,v=c[0],p=c[1],m=c[2];if(t.has(v))return a.apply(l,[v,p,m]);var d=He((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,set:{property:v,value:p,priority:m},index:$n(l.parentRule)}),f.apply(l,c)})});var u=s.CSSStyleDeclaration.prototype.removeProperty;return s.CSSStyleDeclaration.prototype.removeProperty=new Proxy(u,{apply:U(function(f,l,c){var h,v=c[0];if(t.has(v))return u.apply(l,[v]);var p=He((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),m=p.id,d=p.styleId;return(m&&m!==-1||d&&d!==-1)&&o({id:m,styleId:d,remove:{property:v},index:$n(l.parentRule)}),f.apply(l,c)})}),U(function(){s.CSSStyleDeclaration.prototype.setProperty=a,s.CSSStyleDeclaration.prototype.removeProperty=u})}function Dm(r){var i=r.mediaInteractionCb,o=r.blockClass,e=r.blockSelector,t=r.mirror,n=r.sampling,s=r.doc,a=U(function(f){return mr(U(function(l){var c=yr(l);if(!(!c||ge(c,o,e,!0))){var h=c.currentTime,v=c.volume,p=c.muted,m=c.playbackRate,d=c.loop;i({type:f,id:t.getId(c),currentTime:h,volume:v,muted:p,playbackRate:m,loop:d})}}),n.media||500)}),u=[me("play",a(Tt.Play),s),me("pause",a(Tt.Pause),s),me("seeked",a(Tt.Seeked),s),me("volumechange",a(Tt.VolumeChange),s),me("ratechange",a(Tt.RateChange),s)];return U(function(){u.forEach(function(f){return f()})})}function Fm(r){var i=r.fontCb,o=r.doc,e=o.defaultView;if(!e)return function(){};var t=[],n=new WeakMap,s=e.FontFace;e.FontFace=function(f,l,c){var h=new s(f,l,c);return n.set(h,{family:f,buffer:typeof l!="string",descriptors:c,fontSource:typeof l=="string"?l:JSON.stringify(Array.from(new Uint8Array(l)))}),h};var a=st(o.fonts,"add",function(u){return function(f){return setTimeout(U(function(){var l=n.get(f);l&&(i(l),n.delete(f))}),0),u.apply(this,[f])}});return t.push(function(){e.FontFace=s}),t.push(a),U(function(){t.forEach(function(u){return u()})})}function Bm(r){var i=r.doc,o=r.mirror,e=r.blockClass,t=r.blockSelector,n=r.selectionCb,s=!0,a=U(function(){var u=i.getSelection();if(!(!u||s&&(u!=null&&u.isCollapsed))){s=u.isCollapsed||!1;for(var f=[],l=u.rangeCount||0,c=0;c0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))},i.handleMessage=function(e){var t=e;if(!(t.data.type!=="rrweb"||t.origin!==t.data.origin)){var n=e.source;if(n){var s=this.crossOriginIframeMap.get(e.source);if(s){var a=this.transformCrossOriginEvent(s,t.data.event);a&&this.wrappedEmit(a,t.data.isCheckout)}}}},i.transformCrossOriginEvent=function(e,t){var n=this,s;switch(t.type){case B.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(t.data.node,e);var a=t.data.node.id;return this.crossOriginIframeRootIdMap.set(e,a),this.patchRootIdOnNode(t.data.node,a),{timestamp:t.timestamp,type:B.IncrementalSnapshot,data:{source:P.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:t.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case B.Meta:case B.Load:case B.DomContentLoaded:return!1;case B.Plugin:return t;case B.Custom:return this.replaceIds(t.data.payload,e,["id","parentId","previousId","nextId"]),t;case B.IncrementalSnapshot:switch(t.data.source){case P.Mutation:return t.data.adds.forEach(function(u){n.replaceIds(u,e,["parentId","nextId","previousId"]),n.replaceIdOnNode(u.node,e);var f=n.crossOriginIframeRootIdMap.get(e);f&&n.patchRootIdOnNode(u.node,f)}),t.data.removes.forEach(function(u){n.replaceIds(u,e,["parentId","id"])}),t.data.attributes.forEach(function(u){n.replaceIds(u,e,["id"])}),t.data.texts.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case P.Drag:case P.TouchMove:case P.MouseMove:return t.data.positions.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case P.ViewportResize:return!1;case P.MediaInteraction:case P.MouseInteraction:case P.Scroll:case P.CanvasMutation:case P.Input:return this.replaceIds(t.data,e,["id"]),t;case P.StyleSheetRule:case P.StyleDeclaration:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleId"]),t;case P.Font:return t;case P.Selection:return t.data.ranges.forEach(function(u){n.replaceIds(u,e,["start","end"])}),t;case P.AdoptedStyleSheet:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleIds"]),(s=t.data.styles)==null||s.forEach(function(u){n.replaceStyleIds(u,e,["styleId"])}),t}}return!1},i.replace=function(e,t,n,s){for(var a=I(s),u;!(u=a()).done;){var f=u.value;!Array.isArray(t[f])&&typeof t[f]!="number"||(Array.isArray(t[f])?t[f]=e.getIds(n,t[f]):t[f]=e.getId(n,t[f]))}return t},i.replaceIds=function(e,t,n){return this.replace(this.crossOriginIframeMirror,e,t,n)},i.replaceStyleIds=function(e,t,n){return this.replace(this.crossOriginIframeStyleMirror,e,t,n)},i.replaceIdOnNode=function(e,t){var n=this;this.replaceIds(e,t,["id","rootId"]),"childNodes"in e&&e.childNodes.forEach(function(s){n.replaceIdOnNode(s,t)})},i.patchRootIdOnNode=function(e,t){var n=this;e.type!==mf.Document&&!e.rootId&&(e.rootId=t),"childNodes"in e&&e.childNodes.forEach(function(s){n.patchRootIdOnNode(s,t)})},r})(),Gm=(function(){function r(o){O(this,"shadowDoms",new WeakSet),O(this,"mutationCb"),O(this,"scrollCb"),O(this,"bypassOptions"),O(this,"mirror"),O(this,"restoreHandlers",[]),this.mutationCb=o.mutationCb,this.scrollCb=o.scrollCb,this.bypassOptions=o.bypassOptions,this.mirror=o.mirror,this.init()}var i=r.prototype;return i.init=function(){this.reset(),this.patchAttachShadow(Element,document)},i.addShadowRoot=function(e,t){var n=this;if(Xt(e)&&!this.shadowDoms.has(e)){this.shadowDoms.add(e);var s=Cf(T({},this.bypassOptions,{doc:t,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(function(){return s.disconnect()}),this.restoreHandlers.push(If(T({},this.bypassOptions,{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(function(){e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&n.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,n.mirror.getId(D.host(e))),n.restoreHandlers.push(Rf({mirror:n.mirror,stylesheetManager:n.bypassOptions.stylesheetManager},e))},0)}},i.observeAttachShadow=function(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)},i.patchAttachShadow=function(e,t){var n=this;this.restoreHandlers.push(st(e.prototype,"attachShadow",function(s){return function(a){var u=s.call(this,a),f=D.shadowRoot(this);return f&&vf(this)&&n.addShadowRoot(f,t),u}}))},i.reset=function(){this.restoreHandlers.forEach(function(e){try{e()}catch(t){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet},r})(),Nt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",qm=typeof Uint8Array=="undefined"?[]:new Uint8Array(256),Pn=0;Pn>2],n+=Nt[(o[e]&3)<<4|o[e+1]>>4],n+=Nt[(o[e+1]&15)<<2|o[e+2]>>6],n+=Nt[o[e+2]&63];return t%3===2?n=n.substring(0,n.length-1)+"=":t%3===1&&(n=n.substring(0,n.length-2)+"=="),n},Ef=new Map;function Hm(r,i){var o=Ef.get(r);return o||(o=new Map,Ef.set(r,o)),o.has(i)||o.set(i,[]),o.get(i)}var Af=function(r,i,o){if(!(!r||!($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"))){var e=r.constructor.name,t=Hm(o,e),n=t.indexOf(r);return n===-1&&(n=t.length,t.push(r)),n}};function Tn(r,i,o){if(A(r,Array))return r.map(function(p){return Tn(p,i,o)});if(r===null)return r;if(A(r,Float32Array)||A(r,Float64Array)||A(r,Int32Array)||A(r,Uint32Array)||A(r,Uint8Array)||A(r,Uint16Array)||A(r,Int16Array)||A(r,Int8Array)||A(r,Uint8ClampedArray)){var e=r.constructor.name;return{rr_type:e,args:[Object.values(r)]}}else if(A(r,ArrayBuffer)){var t=r.constructor.name,n=Vm(r);return{rr_type:t,base64:n}}else if(A(r,DataView)){var s=r.constructor.name;return{rr_type:s,args:[Tn(r.buffer,i,o),r.byteOffset,r.byteLength]}}else if(A(r,HTMLImageElement)){var a=r.constructor.name,u=r.src;return{rr_type:a,src:u}}else if(A(r,HTMLCanvasElement)){var f="HTMLImageElement",l=r.toDataURL();return{rr_type:f,src:l}}else if(A(r,ImageData)){var c=r.constructor.name;return{rr_type:c,args:[Tn(r.data,i,o),r.width,r.height]}}else if($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"){var h=r.constructor.name,v=Af(r,i,o);return{rr_type:h,index:v}}return r}var Mf=function(r,i,o){return r.map(function(e){return Tn(e,i,o)})},$f=function(r,i){var o=["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"],e=o.filter(function(t){return typeof i[t]=="function"});return!!e.find(function(t){return A(r,i[t])})};function Ym(r,i,o,e){for(var t=function(){var f=u.value;try{if(typeof i.CanvasRenderingContext2D.prototype[f]!="function")return"continue";var l=st(i.CanvasRenderingContext2D.prototype,f,function(h){return function(){for(var v=this,p=arguments.length,m=new Array(p),d=0;d1?u-1:0),l=1;l0&&(a.styles=u),this.adoptedStyleSheetCb(a)}},i.reset=function(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet},i.cleanupStylesheetsForRemovedNode=function(e){var t=this;try{if(e.nodeType===Node.DOCUMENT_NODE){var n=e;if(n.adoptedStyleSheets)for(var s=I(n.adoptedStyleSheets),a;!(a=s()).done;){var u=a.value;this.styleMirror.remove(u)}}if(e.nodeName==="STYLE"){var f=e;f.sheet&&this.styleMirror.remove(f.sheet)}if(e.nodeName==="LINK"&&e.rel==="stylesheet"){var l=e;l.sheet&&this.styleMirror.remove(l.sheet)}e.childNodes&&e.childNodes.forEach(function(c){t.cleanupStylesheetsForRemovedNode(c)})}catch(c){}},i.trackStylesheetInLinkElement=function(e){},r})(),tg=(function(){function r(){O(this,"nodeMap",new WeakMap),O(this,"active",!1)}var i=r.prototype;return i.inOtherBuffer=function(e,t){var n=this.nodeMap.get(e);return n&&Array.from(n).some(function(s){return s!==t})},i.add=function(e,t){var n=this;this.active||(this.active=!0,requestAnimationFrame(function(){n.nodeMap=new WeakMap,n.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(t))},i.destroy=function(){},r})();function rg(r){try{var i=new URL(r).origin;return i!=="null"?i:null}catch(o){return null}}function ng(r){if(!Array.isArray(r)||r.length===0)throw new Error("[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.");for(var i=new Set,o=0;o0&&(vt=ng(de),vt.size===0&&(vt=void 0));var mt=ie?window.parent===window:!0,gt=!1;if(!mt)try{window.parent.document&&(gt=!1)}catch(W){gt=!0}if(mt&&!i)throw new Error("emit function is required");if(!mt&&!gt)return function(){};L!==void 0&&N.mousemove===void 0&&(N.mousemove=L),xe.reset();var yt=w===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:b!==void 0?b:{password:!0},wt=S===!0||S==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:S==="all",headMetaDescKeywords:S==="all",headTitleMutations:S==="all"}:S||{};wm();var ze,Yt=0,yc=function(W){for(var ye=I(et||[]),$;!($=ye()).done;){var J=$.value;J.eventProcessor&&(W=J.eventProcessor(W))}return x&&!gt&&(W=x(W)),W};se=function(W,ye){var $,J=W;if(J.timestamp=Mn(),($=$e[0])!=null&&$.isFrozen()&&J.type!==B.FullSnapshot&&!(J.type===B.IncrementalSnapshot&&J.data.source===P.Mutation)&&$e.forEach(function(pb){return pb.unfreeze()}),mt)i==null||i(yc(J),ye);else if(gt){var Ct={type:"rrweb",event:yc(J),origin:window.location.origin,isCheckout:ye};if(vt)for(var Us=I(vt),Oc;!(Oc=Us()).done;){var cb=Oc.value;window.parent.postMessage(Ct,cb)}else window.parent.postMessage(Ct,"*")}if(J.type===B.FullSnapshot)ze=J,Yt=0;else if(J.type===B.IncrementalSnapshot){if(J.data.source===P.Mutation&&J.data.isAttachIframe)return;Yt++;var hb=e&&Yt>=e,db=o&&J.timestamp-ze.timestamp>o;(hb||db)&&Nn(!0)}};for(var wi=function(W){se({type:B.IncrementalSnapshot,data:T({source:P.Mutation},W)})},wc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:P.Scroll},W)})},bc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:P.CanvasMutation},W)})},fb=function(W){return se({type:B.IncrementalSnapshot,data:T({source:P.AdoptedStyleSheet},W)})},bt=new eg({mutationCb:wi,adoptedStyleSheetCb:fb}),We=new jm({mirror:xe,mutationCb:wi,stylesheetManager:bt,recordCrossOriginIframes:ie,wrappedEmit:se}),lb=I(et||[]),Sc;!(Sc=lb()).done;){var Cc=Sc.value;Cc.getMirror&&Cc.getMirror({nodeMirror:xe,crossOriginIframeMirror:We.crossOriginIframeMirror,crossOriginIframeStyleMirror:We.crossOriginIframeStyleMirror})}var Fs=new tg;zo=new Qm({recordCanvas:be,mutationCb:bc,win:window,blockClass:n,blockSelector:a,mirror:xe,sampling:N.canvas,dataURLOptions:_});var bi=new Gm({mutationCb:wi,scrollCb:wc,bypassOptions:{blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskInputOptions:yt,dataURLOptions:_,maskTextFn:R,maskInputFn:C,recordCanvas:be,inlineImages:Vt,sampling:N,slimDOMOptions:wt,iframeManager:We,stylesheetManager:bt,canvasManager:zo,keepIframeSrcFn:Ht,processedNodeManager:Fs},mirror:xe});Nn=function(W){if(W===void 0&&(W=!1),!!z){se({type:B.Meta,data:{href:window.location.href,width:ff(),height:uf()}},W),bt.reset(),bi.init(),$e.forEach(function($){return $.lock()});var ye=Ch(document,{mirror:xe,blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskAllInputs:yt,maskTextFn:R,maskInputFn:C,slimDOM:wt,dataURLOptions:_,recordCanvas:be,inlineImages:Vt,onSerialize:function($){hf($,xe)&&We.addIframe($),df($,xe)&&bt.trackLinkElement($),Bo($)&&bi.addShadowRoot(D.shadowRoot($),document)},onIframeLoad:function($,J){We.attachIframe($,J),bi.observeAttachShadow($)},onStylesheetLoad:function($,J){bt.attachLinkElement($,J)},keepIframeSrcFn:Ht});if(!ye)return console.warn("Failed to snapshot the document");se({type:B.FullSnapshot,data:{node:ye,initialOffset:af(window)}},W),$e.forEach(function($){return $.unlock()}),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&bt.adoptStyleSheets(document.adoptedStyleSheets,xe.getId(document))}};try{var St=[],Ic=function(W){var ye;return U(Wm)({mutationCb:wi,mousemoveCb:function($,J){return se({type:B.IncrementalSnapshot,data:{source:J,positions:$}})},mouseInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.MouseInteraction},$)})},scrollCb:wc,viewportResizeCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.ViewportResize},$)})},inputCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.Input},$)})},mediaInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.MediaInteraction},$)})},styleSheetRuleCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.StyleSheetRule},$)})},styleDeclarationCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.StyleDeclaration},$)})},canvasMutationCb:bc,fontCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.Font},$)})},selectionCb:function($){se({type:B.IncrementalSnapshot,data:T({source:P.Selection},$)})},customElementCb:function($){se({type:B.IncrementalSnapshot,data:T({source:P.CustomElement},$)})},blockClass:n,ignoreClass:f,ignoreSelector:c,maskTextClass:v,maskTextSelector:m,maskInputOptions:yt,inlineStylesheet:g,sampling:N,recordDOM:z,recordCanvas:be,inlineImages:Vt,userTriggeredOnInput:Re,collectFonts:j,doc:W,maskInputFn:C,maskTextFn:R,keepIframeSrcFn:Ht,blockSelector:a,slimDOMOptions:wt,dataURLOptions:_,mirror:xe,iframeManager:We,stylesheetManager:bt,shadowDomManager:bi,processedNodeManager:Fs,canvasManager:zo,ignoreCSSAttributes:yi,plugins:((ye=et==null?void 0:et.filter(function($){return $.observer}))==null?void 0:ye.map(function($){return{observer:$.observer,options:$.options,callback:function(J){return se({type:B.Plugin,data:{plugin:$.name,payload:J}})}}}))||[]},E)};We.addLoadListener(function(W){try{var ye=W.contentDocument,$=Ic(ye);St.push($);var J=We.getObserverCleanup(W);We.setObserverCleanup(W,function(){if(J)try{J()}catch(Us){}try{$();var Ct=St.indexOf($);Ct!==-1&&St.splice(Ct,1),Mm(ye)}catch(Us){}})}catch(Ct){console.warn(Ct)}});var Bs=function(){Nn(),St.push(Ic(document)),Ln=!0};return document.readyState==="interactive"||document.readyState==="complete"?Bs():(St.push(me("DOMContentLoaded",function(){se({type:B.DomContentLoaded,data:{}}),Ne==="DOMContentLoaded"&&Bs()})),St.push(me("load",function(){se({type:B.Load,data:{}}),Ne==="load"&&Bs()},window))),function(){St.forEach(function(W){try{W()}catch($){var ye=String($).toLowerCase();ye.includes("cross-origin")||console.warn($)}}),Fs.destroy(),Ln=!1,Am()}}catch(W){console.warn(W)}}Ye.addCustomEvent=function(r,i){if(!Ln)throw new Error("please add custom event after start recording");se({type:B.Custom,data:{tag:r,payload:i}})},Ye.freezePage=function(){$e.forEach(function(r){return r.freeze()})},Ye.takeFullSnapshot=function(r){if(!Ln)throw new Error("please take full snapshot after start recording");Nn(r)},Ye.mirror=xe;var Nf;(function(r){r[r.NotStarted=0]="NotStarted",r[r.Running=1]="Running",r[r.Stopped=2]="Stopped"})(Nf||(Nf={})),Ye.addCustomEvent,Ye.freezePage,Ye.takeFullSnapshot;var Lf={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Df={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Dn={},ig=function(){return!!globalThis.Zone};function jo(r){if(Dn[r])return Dn[r];var i=globalThis[r],o=i.prototype,e=r in Lf?Lf[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Df?Df[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!ig())return Dn[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Dn[r]=f:o}catch(l){return o}}var Go={};function Je(r,i,o){var e,t=r+"."+String(o);if(Go[t])return Go[t].call(i);var n=jo(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(Go[t]=s,s.call(i)):i[o]}var qo={};function Ff(r,i,o){var e=r+"."+String(o);if(qo[e])return qo[e].bind(i);var t=jo(r),n=t[o];return typeof n!="function"?i[o]:(qo[e]=n,n.bind(i))}function og(r){return Je("Node",r,"childNodes")}function sg(r){return Je("Node",r,"parentNode")}function ag(r){return Je("Node",r,"parentElement")}function ug(r){return Je("Node",r,"textContent")}function fg(r,i){return Ff("Node",r,"contains")(i)}function lg(r){return Ff("Node",r,"getRootNode")()}function cg(r){return!r||!("host"in r)?null:Je("ShadowRoot",r,"host")}function hg(r){return r.styleSheets}function dg(r){return!r||!("shadowRoot"in r)?null:Je("Element",r,"shadowRoot")}function pg(r,i){return Je("Element",r,"querySelector")(i)}function vg(r,i){return Je("Element",r,"querySelectorAll")(i)}function mg(){return jo("MutationObserver").constructor}function gg(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var Bf={childNodes:og,parentNode:sg,parentElement:ag,textContent:ug,contains:fg,getRootNode:lg,host:cg,styleSheets:hg,shadowRoot:dg,querySelector:pg,querySelectorAll:vg,mutationObserver:mg,patch:gg};function Vo(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return Vo(Bf.parentNode(r),i);for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return Vo(Bf.parentNode(r),i)}function yg(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function wg(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Ho={exports:{}},Q=String,Uf=function(){return{isColorSupported:!1,reset:Q,bold:Q,dim:Q,italic:Q,underline:Q,inverse:Q,hidden:Q,strikethrough:Q,black:Q,red:Q,green:Q,yellow:Q,blue:Q,magenta:Q,cyan:Q,white:Q,gray:Q,bgBlack:Q,bgRed:Q,bgGreen:Q,bgYellow:Q,bgBlue:Q,bgMagenta:Q,bgCyan:Q,bgWhite:Q}};Ho.exports=Uf(),Ho.exports.createColors=Uf;var bg=Ho.exports,Sg={},Cg=Object.freeze(Object.defineProperty({__proto__:null,default:Sg},Symbol.toStringTag,{value:"Module"})),le=wg(Cg),zf=bg,Wf=le,Yo=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=zf.isColorSupported),Wf&&t&&(s=Wf(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=zf.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Zt(Error)),Jo=Yo;Yo.default=Yo;var Ze={};Ze.isClean=Symbol("isClean"),Ze.my=Symbol("my");var jf={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Ig(r){return r[0].toUpperCase()+r.slice(1)}var Zo=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),Gf=Zo;Zo.default=Zo;var Og=Gf;function Ko(r,i){var o=new Og(i);o.stringify(r)}var Fn=Ko;Ko.default=Ko;var Bn=Ze.isClean,Rg=Ze.my,xg=Jo,Eg=Gf,Ag=Fn;function Xo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Xo(s,o)}):(n==="object"&&t!==null&&(t=Xo(t)),o[e]=t)}return o}var Qo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[Bn]=!1,this[Rg]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Xo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new xg(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[Bn]){this[Bn]=!1;for(var e=this;e=e.parent;)e[Bn]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ts(e),Pg(e))return this.mapFile=e,Tg(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,qf))return Vf.fromSourceMap(t).toString();if(A(t,Vf))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Ng(ts(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),Hf=rs;rs.default=rs;var Dg=le.SourceMapConsumer,Fg=le.SourceMapGenerator,Yf=le.fileURLToPath,Wn=le.pathToFileURL,ns=le.isAbsolute,is=le.resolve,Bg=_g.nanoid,os=le,Jf=Jo,Ug=Hf,ss=Symbol("fromOffsetCache"),zg=!!(Dg&&Fg),Zf=!!(is&&ns),jn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!Zf||/^\w+:\/\//.test(e.from)||ns(e.from)?this.file=e.from:this.file=is(e.from)),Zf&&zg){var t=new Ug(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new Jf(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new Jf(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(Wn&&(a.input.url=Wn(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[ss])n=this[ss];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:is(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;ns(u.source)?l=Wn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Wn(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(Yf)c.file=Yf(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Gg&&jg&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=qn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new qn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new qn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?Vn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=Vn(Qf(n,this.mapOpts.annotation)));var s=Xf(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Wg(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(tl){var n=tl(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;el==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),rl=qg,Vg=Un,as=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Vg),Hn=as;as.default=as;var nl=Ze.isClean,il=Ze.my,ol=zn,sl=Hn,Hg=Un,al,us,fs,ul;function fl(r){return r.map(function(i){return i.nodes&&(i.nodes=fl(i.nodes)),delete i.source,i})}function ll(r){if(r[nl]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ll(e)}}var Be=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Hg);Be.registerParse=function(r){al=r},Be.registerRule=function(r){us=r},Be.registerAtRule=function(r){fs=r},Be.registerRoot=function(r){ul=r};var at=Be;Be.default=Be,Be.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,fs.prototype):r.type==="rule"?Object.setPrototypeOf(r,us.prototype):r.type==="decl"?Object.setPrototypeOf(r,ol.prototype):r.type==="comment"?Object.setPrototypeOf(r,sl.prototype):r.type==="root"&&Object.setPrototypeOf(r,ul.prototype),r[il]=!0,r.nodes&&r.nodes.forEach(function(i){Be.rebuild(i)})};var Yg=at,cl,hl,wr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new cl(new hl,this,t);return n.stringify()},i})(Yg);wr.registerLazyResult=function(r){cl=r},wr.registerProcessor=function(r){hl=r};var ls=wr;wr.default=wr;var dl={},pl=function(i){dl[i]||(dl[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},cs=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),vl=cs;cs.default=cs;var Jg=vl,hs=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Jg(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),ds=hs;hs.default=hs;var ps=39,ml=34,Yn=92,gl=47,Jn=10,br=32,Zn=12,Kn=9,Xn=13,Zg=91,Kg=93,Xg=40,Qg=41,ey=123,ty=125,ry=59,ny=42,iy=58,oy=64,Qn=/[\t\n\f\r "#'()/;[\\\]{}]/g,ei=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,sy=/.[\r\n"'(/\\]/,yl=/[\da-f]/i,ay=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Jn:case br:case Kn:case Xn:case Zn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===br||n===Jn||n===Kn||n===Xn||n===Zn);p=["space",e.slice(d,s)],d=s-1;break}case Zg:case Kg:case ey:case ty:case iy:case ry:case Qg:{var N=String.fromCharCode(n);p=[N,N,d];break}case Xg:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==ps&&v!==ml&&v!==br&&v!==Jn&&v!==Kn&&v!==Zn&&v!==Xn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Yn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||sy.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case ps:case ml:{a=n===ps?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Yn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case oy:{Qn.lastIndex=d+1,Qn.test(e),Qn.lastIndex===0?s=e.length-1:s=Qn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Yn:{for(s=d,f=!0;e.charCodeAt(s+1)===Yn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==gl&&n!==br&&n!==Jn&&n!==Kn&&n!==Xn&&n!==Zn&&(s+=1,yl.test(e.charAt(s)))){for(;yl.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===br&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===gl&&e.charCodeAt(d+1)===ny?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(ei.lastIndex=d+1,ei.test(e),ei.lastIndex===0?s=e.length-1:s=ei.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},wl=at,ti=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Sl(new Cl,this,t);return n.stringify()},i})(bl);Lt.registerLazyResult=function(r){Sl=r},Lt.registerProcessor=function(r){Cl=r};var Sr=Lt;Lt.default=Lt,bl.registerRoot(Lt);var Cr={comma:function(i){return Cr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return Cr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},Il=Cr;Cr.default=Cr;var Ol=at,uy=Il,ri=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return uy.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Ol),ms=ri;ri.default=ri,Ol.registerRule(ri);var fy=zn,ly=ay,cy=Hn,hy=vs,dy=Sr,Rl=ms,xl={empty:!0,space:!0};function py(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var vy=(function(){function r(o){this.input=o,this.root=new dy,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new hy;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new cy;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=ly(this.input)},i.decl=function(e,t){var n=new fy;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||py(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Rl;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!My[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!$y[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return Tr(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!Ir(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return Ir(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=Cy;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new Sy(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(Ir(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[ke];)a[ke]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Ry("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(Ir(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var t=e.replace(/^\s+/,"").replace(/\(eval code/g,"("),n=t.match(/ (\((.+):(\d+):(\d+)\)$)/);t=n?t.replace(n[0],""):t;var s=t.split(/\s+/).slice(1),a=this.extractLocation(n?n[1]:s.pop()),u=s.join(" ")||void 0,f=["eval",""].indexOf(a[0])>-1?void 0:a[0];return new Bt({functionName:u,fileName:f,lineNumber:a[1],columnNumber:a[2]})},this)},parseFFOrSafari:function(i){var o=i.stack.split("\n").filter(function(e){return!e.match(hw)},this);return o.map(function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new Bt({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),s=n&&n[1]?n[1]:void 0,a=this.extractLocation(e.replace(t,""));return new Bt({functionName:s,fileName:a[0],lineNumber:a[1],columnNumber:a[2]})},this)},parseOpera:function(i){return!i.stacktrace||i.message.indexOf("\n")>-1&&i.message.split("\n").length>i.stacktrace.split("\n").length?this.parseOpera9(i):i.stack?this.parseOpera11(i):this.parseOpera10(i)},parseOpera9:function(i){for(var o=/Line (\d+).*script (?:in )?(\S+)/i,e=i.message.split("\n"),t=[],n=2,s=e.length;n/,"$2").replace(/\([^)]*\)/g,"")||void 0;return new Bt({functionName:a,fileName:n[0],lineNumber:n[1],columnNumber:n[2]})},this)}};function dw(r){if(!r||!r.outerHTML)return"";for(var i="";r.parentElement;){var o=r.localName;if(!o)break;o=o.toLowerCase();var e=r.parentElement,t=[];if(e.children&&e.children.length>0)for(var n=0;n1&&(o+=":eq("+t.indexOf(r)+")"),i=o+(i?">"+i:""),r=e}return i}function Is(r){return Object.prototype.toString.call(r)==="[object Object]"}function Fl(r,i){if(i===0)return!0;for(var o=Object.keys(r),e=I(o),t;!(t=e()).done;){var n=t.value;if(Is(r[n])&&Fl(r[n],i-1))return!0}return!1}function Ut(r,i){var o={numOfKeysLimit:50,depthOfLimit:4};Object.assign(o,i);var e=[],t=[];return JSON.stringify(r,function(a,u){if(e.length>0){var f=e.indexOf(this);~f?e.splice(f+1):e.push(this),~f?t.splice(f,1/0,a):t.push(a),~e.indexOf(u)&&(e[0]===u?u="[Circular ~]":u="[Circular ~."+t.slice(0,e.indexOf(u)).join(".")+"]")}else e.push(u);if(u===null)return u;if(u===void 0)return"undefined";if(n(u))return s(u);if((typeof u=="undefined"?"undefined":M(u))==="bigint")return u.toString()+"n";if(A(u,Event)){var l={};for(var c in u){var h=u[c];Array.isArray(h)?l[c]=dw(h.length?h[0]:null):l[c]=h}return l}else{if(A(u,Node))return A(u,HTMLElement)?u?u.outerHTML:"":u.nodeName;if(A(u,Error))return u.stack?u.stack+"\nEnd of stack for Error object":u.name+": "+u.message}return u});function n(a){return!!(Is(a)&&Object.keys(a).length>o.numOfKeysLimit||typeof a=="function"||Is(a)&&Fl(a,o.depthOfLimit))}function s(a){var u=a.toString();return o.stringLengthLimit&&u.length>o.stringLengthLimit&&(u=""+u.slice(0,o.stringLengthLimit)+"..."),u}}var Bl={level:["assert","clear","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],lengthThreshold:1e3,logger:"console"};function pw(r,i,o){var e=o?Object.assign({},Bl,o):Bl,t=e.logger;if(!t)return function(){};var n;typeof t=="string"?n=i[t]:n=t;var s=0,a=!1,u=[];if(e.level.includes("error")){var f=function(m){var d=m.message,g=m.error,w=Cs.parse(g).map(function(S){return S.toString()}),b=[Ut(d,e.stringifyOptions)];r({level:"error",trace:w,payload:b})};i.addEventListener("error",f),u.push(function(){i.removeEventListener("error",f)});var l=function(m){var d,g;A(m.reason,Error)?(d=m.reason,g=[Ut("Uncaught (in promise) "+d.name+": "+d.message,e.stringifyOptions)]):(d=new Error,g=[Ut("Uncaught (in promise)",e.stringifyOptions),Ut(m.reason,e.stringifyOptions)]);var w=Cs.parse(d).map(function(b){return b.toString()});r({level:"error",trace:w,payload:g})};i.addEventListener("unhandledrejection",l),u.push(function(){i.removeEventListener("unhandledrejection",l)})}for(var c=I(e.level),h;!(h=c()).done;){var v=h.value;u.push(p(n,v))}return function(){u.forEach(function(m){return m()})};function p(m,d){var g=this;return m[d]?lw(m,d,function(w){var b=g;return function(){for(var S=arguments.length,C=new Array(S),R=0;R0&&oi(xs,o))}catch(e){xr.call(new ql(o),e)}}}function xr(r){var i=this;i.triggered||(i.triggered=!0,i.def&&(i=i.def),i.msg=r,i.state=2,i.chain.length>0&&oi(xs,i))}function Gl(r,i,o,e){for(var t=0;t0&&(i[e]=o)}),i},y.truncate=function(r,i){var o;return typeof r=="string"?o=r.slice(0,i):y.isArray(r)?(o=[],y.each(r,function(e){o.push(y.truncate(e,i))})):y.isObject(r)?(o={},y.each(r,function(e,t){o[t]=y.truncate(e,i)})):o=r,o},y.JSONEncode=(function(){return function(r){var i=r,o=function(t){var n=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return n.lastIndex=0,n.test(t)?'"'+t.replace(n,function(a){var u=s[a];return typeof u=="string"?u:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'},e=function(t,n){var s="",a=" ",u=0,f="",l="",c=0,h=s,v=[],p=n[t];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(t)),typeof p){case"string":return o(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(s+=a,v=[],Er.apply(p)==="[object Array]"){for(c=p.length,u=0;u="0"&&i<="9";)p+=i,n();if(i===".")for(p+=".";n()&&i>="0"&&i<="9";)p+=i;if(i==="e"||i==="E")for(p+=i,n(),(i==="-"||i==="+")&&(p+=i,n());i>="0"&&i<="9";)p+=i,n();if(v=+p,!isFinite(v))t("Bad number");else return v},a=function(){var v,p,m="",d;if(i==='"')for(;n();){if(i==='"')return n(),m;if(i==="\\")if(n(),i==="u"){for(d=0,p=0;p<4&&(v=parseInt(n(),16),!!isFinite(v));p+=1)d=d*16+v;m+=String.fromCharCode(d)}else if(typeof o[i]=="string")m+=o[i];else break;else m+=i}t("Bad string")},u=function(){for(;i&&i<=" ";)n()},f=function(){switch(i){case"t":return n("t"),n("r"),n("u"),n("e"),!0;case"f":return n("f"),n("a"),n("l"),n("s"),n("e"),!1;case"n":return n("n"),n("u"),n("l"),n("l"),null}t('Unexpected "'+i+'"')},l,c=function(){var v=[];if(i==="["){if(n("["),u(),i==="]")return n("]"),v;for(;i;){if(v.push(l()),u(),i==="]")return n("]"),v;n(","),u()}}t("Bad array")},h=function(){var v,p={};if(i==="{"){if(n("{"),u(),i==="}")return n("}"),p;for(;i;){if(v=a(),u(),n(":"),Object.hasOwnProperty.call(p,v)&&t('Duplicate key "'+v+'"'),p[v]=l(),u(),i==="}")return n("}"),p;n(","),u()}}t("Bad object")};return l=function(){switch(u(),i){case"{":return h();case"[":return c();case'"':return a();case"-":return s();default:return i>="0"&&i<="9"?s():f()}},function(v){var p;return e=v,r=0,i=" ",p=l(),u(),i&&t("Syntax error"),p}})(),y.base64Encode=function(r){var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o,e,t,n,s,a,u,f,l=0,c=0,h="",v=[];if(!r)return r;r=y.utf8Encode(r);do o=r.charCodeAt(l++),e=r.charCodeAt(l++),t=r.charCodeAt(l++),f=o<<16|e<<8|t,n=f>>18&63,s=f>>12&63,a=f>>6&63,u=f&63,v[c++]=i.charAt(n)+i.charAt(s)+i.charAt(a)+i.charAt(u);while(l127&&s<2048?a=String.fromCharCode(s>>6|192,s&63|128):a=String.fromCharCode(s>>12|224,s>>6&63|128,s&63|128),a!==null&&(e>o&&(i+=r.substring(o,e)),i+=a,o=e=n+1)}return e>o&&(i+=r.substring(o,r.length)),i},y.UUID=function(){try{return H.crypto.randomUUID()}catch(o){for(var r=new Array(36),i=0;i<36;i++)r[i]=Math.floor(Math.random()*16);return r[14]=4,r[19]=r[19]&=-5,r[19]=r[19]|=8,r[8]=r[13]=r[18]=r[23]="-",y.map(r,function(e){return e.toString(16)}).join("")}};var Xl=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];y.isBlockedUA=function(r){var i;for(r=r.toLowerCase(),i=0;i=0}function e(t){if(!Se.getElementsByTagName)return[];var n=t.split(" "),s,a,u,f,l,c,h,v,p,m,d=[Se];for(c=0;c-1){a=s.split("#"),u=a[0];var g=a[1],w=Se.getElementById(g);if(!w||u&&w.nodeName.toLowerCase()!=u)return[];d=[w];continue}if(s.indexOf(".")>-1){a=s.split("."),u=a[0];var b=a[1];for(u||(u="*"),f=[],l=0,h=0;h-1};break;default:x=function(k){return k.getAttribute(C)}}for(d=[],m=0,h=0;h=3?i[2]:""},currentUrl:function(){return H.location.href},properties:function(r){return typeof r!="object"&&(r={}),y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Mr),$referrer:Se.referrer,$referring_domain:y.info.referringDomain(Se.referrer),$device:y.info.device(ft)}),{$current_url:y.info.currentUrl(),$browser_version:y.info.browserVersion(ft,zt.vendor,Mr),$screen_height:Yl.height,$screen_width:Yl.width,mp_lib:"web",$lib_version:Si.LIB_VERSION,$insert_id:_s(),time:y.timestamp()/1e3},y.strip_empty_properties(r))},people_properties:function(){return y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Mr)}),{$browser_version:y.info.browserVersion(ft,zt.vendor,Mr)})},mpPageViewProperties:function(){return y.strip_empty_properties({current_page_title:Se.title,current_domain:H.location.hostname,current_url_path:H.location.pathname,current_url_protocol:H.location.protocol,current_url_search:H.location.search})}};var Ew=function(r,i){var o=null,e=[];return function(t){var n=this;return e.push(t),o||(o=new F(function(s){setTimeout(function(){var a=r.apply(n,[e]);o=null,e=[],s(a)},i)})),o}},_s=function(r){var i=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return r?i.substring(0,r):i},Aw=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Mw=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,tc=function(r){var i=Mw,o=r.split("."),e=o[o.length-1];(e.length>4||e==="com"||e==="org")&&(i=Aw);var t=r.match(i);return t?t[0]:""},$w=function(){var r=H.navigator.onLine;return y.isUndefined(r)||r},Ps=function(){},rc=function(r,i){for(var o=!1,e=0;e=16.4&&t<16.6)};y.info=y.info,y.info.browser=y.info.browser,y.info.browserVersion=y.info.browserVersion,y.info.device=y.info.device,y.info.properties=y.info.properties,y.isBlockedUA=y.isBlockedUA,y.isEmptyObject=y.isEmptyObject,y.isObject=y.isObject,y.JSONDecode=y.JSONDecode,y.JSONEncode=y.JSONEncode,y.toArray=y.toArray,y.NPO=Xe;var _e=function(r,i,o){this.dbName=r,this.storeName=i,this.version=o.version,this.storeNamesInDb=o.storeNames,this.dbPromise=null};_e.prototype._openDb=function(){var r=this.dbName,i=this.version,o=this.storeNamesInDb;return new F(function(e,t){var n=H.indexedDB.open(r,i);n.onerror=function(){t(n.error)},n.onsuccess=function(){e(n.result)},n.onupgradeneeded=function(s){var a=s.target.result;o.forEach(function(u){a.objectStoreNames.contains(u)||a.createObjectStore(u)})}})},_e.prototype.init=function(){return H.indexedDB?(this.dbPromise||(this.dbPromise=this._openDb()),this.dbPromise.then(function(r){return r instanceof H.IDBDatabase?F.resolve():F.reject(r)})):F.reject("indexedDB is not supported in this browser")},_e.prototype.isInitialized=function(){return!!this.dbPromise},_e.prototype.makeTransaction=function(r,i){var o=this.storeName,e=function(t){return new F(function(n,s){var a=t.transaction(o,r);a.oncomplete=function(){n(a)},a.onabort=a.onerror=function(){s(a.error)},i(a.objectStore(o))})};return this.dbPromise.then(e).catch(function(t){return t&&t.name==="InvalidStateError"?(this.dbPromise=this._openDb(),this.dbPromise.then(e)):F.reject(t)}.bind(this))},_e.prototype.setItem=function(r,i){return this.makeTransaction("readwrite",function(o){o.put(i,r)})},_e.prototype.getItem=function(r){var i;return this.makeTransaction("readonly",function(o){i=o.get(r)}).then(function(){return i.result})},_e.prototype.removeItem=function(r){return this.makeTransaction("readwrite",function(i){i.delete(r)})},_e.prototype.getAll=function(){var r;return this.makeTransaction("readonly",function(i){r=i.getAll()}).then(function(){return r.result})};var nc="mixpanelBrowserDb",ic="mixpanelRecordingEvents",oc="mixpanelRecordingRegistry",sc={version:1,storeNames:[ic,oc]},_w="__mp_opt_in_out_";function Pw(r,i){if(Fw(i))return Oe.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'),!0;var o=ac(r,i)==="0";return o&&Oe.warn("You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data."),o}function Tw(r){return Bw(r,function(i){return this.get_config(i)})}function Nw(r){return r=r||{},r.persistenceType==="localStorage"?y.localStorage:y.cookie}function Lw(r,i){return i=i||{},(i.persistencePrefix||_w)+r}function ac(r,i){return Nw(i).get(Lw(r,i))}function Dw(r,i,o){if(i!=="localStorage")return i;var e=Wt($r())?"localStorage":"cookie",t=ac(r,{persistenceType:e,persistencePrefix:o})!==null;return t?e:e==="localStorage"?"cookie":"localStorage"}function Fw(r){if(r&&r.ignoreDnt)return!1;var i=r&&r.window||H,o=i.navigator||{},e=!1;return y.each([o.doNotTrack,o.msDoNotTrack,i.doNotTrack],function(t){y.includes([!0,1,"1","yes"],t)&&(e=!0)}),e}function Bw(r,i){return function(){var o=!1;try{var e=i.call(this,"token"),t=i.call(this,"ignore_dnt"),n=i.call(this,"opt_out_tracking_persistence_type"),s=i.call(this,"opt_out_tracking_cookie_prefix"),a=i.call(this,"window");e&&(o=Pw(e,{ignoreDnt:t,persistenceType:Dw(e,n,s),persistencePrefix:s,window:a}))}catch(f){Oe.error("Unexpected error when checking tracking opt-out status: "+f)}if(!o)return r.apply(this,arguments);var u=arguments[arguments.length-1];typeof u=="function"&&u(0)}}var Uw=lt("lock"),uc=function(r,i){i=i||{},this.storageKey=r,this.storage=i.storage||$r(),this.pollIntervalMS=i.pollIntervalMS||100,this.timeoutMS=i.timeoutMS||2e3,this.promiseImpl=i.promiseImpl||F};uc.prototype.withLock=function(r,i){var o=this.promiseImpl;return new o(y.bind(function(e,t){var n=i||new Date().getTime()+"|"+Math.random(),s=new Date().getTime(),a=this.storageKey,u=this.pollIntervalMS,f=this.timeoutMS,l=this.storage,c=a+":X",h=a+":Y",v=a+":Z",p=function(b){if(new Date().getTime()-s>f){Uw.error("Timeout waiting for mutex on "+a+"; clearing lock. ["+n+"]"),l.removeItem(v),l.removeItem(h),g();return}setTimeout(function(){try{b()}catch(S){t(S)}},u*(Math.random()+.1))},m=function(b,S){b()?S():p(function(){m(b,S)})},d=function(){var b=l.getItem(h);return b&&b!==n?!1:(l.setItem(h,n),l.getItem(h)===n?!0:(Wt(l,!0)||t(new Error("localStorage support dropped while acquiring lock")),!1))},g=function(){l.setItem(c,n),m(d,function(){if(l.getItem(c)===n){w();return}p(function(){if(l.getItem(h)!==n){g();return}m(function(){return!l.getItem(v)},w)})})},w=function(){l.setItem(v,"1");var b=function(){l.removeItem(v),l.getItem(h)===n&&l.removeItem(h),l.getItem(c)===n&&l.removeItem(c)};r().then(function(S){b(),e(S)}).catch(function(S){b(),t(S)})};try{if(Wt(l,!0))g();else throw new Error("localStorage support check failed")}catch(b){t(b)}},this))};var jt=function(r){this.storage=r||$r()};jt.prototype.init=function(){return this.storage?F.resolve():F.reject(new Error("localStorage is not available"))},jt.prototype.isInitialized=function(){return!0},jt.prototype.setItem=function(r,i){return new F(y.bind(function(o,e){try{this.storage.setItem(r,li(i))}catch(t){e(t)}o()},this))},jt.prototype.getItem=function(r){return new F(y.bind(function(i,o){var e;try{e=ci(this.storage.getItem(r))}catch(t){o(t)}i(e)},this))},jt.prototype.removeItem=function(r){return new F(y.bind(function(i,o){try{this.storage.removeItem(r)}catch(e){o(e)}i()},this))};var fc=lt("batch"),Pe=function(r,i){i=i||{},this.storageKey=r,this.usePersistence=i.usePersistence,this.usePersistence&&(this.queueStorage=i.queueStorage||new jt,this.lock=new uc(r,{storage:i.sharedLockStorage,timeoutMS:i.sharedLockTimeoutMS})),this.reportError=i.errorReporter||y.bind(fc.error,fc),this.pid=i.pid||null,this.memQueue=[],this.initialized=!1,i.enqueueThrottleMs?this.enqueuePersisted=Ew(y.bind(this._enqueuePersisted,this),i.enqueueThrottleMs):this.enqueuePersisted=y.bind(function(o){return this._enqueuePersisted([o])},this)};Pe.prototype.ensureInit=function(){return this.initialized||!this.usePersistence?F.resolve():this.queueStorage.init().then(y.bind(function(){this.initialized=!0},this)).catch(y.bind(function(r){this.reportError("Error initializing queue persistence. Disabling persistence",r),this.initialized=!0,this.usePersistence=!1},this))},Pe.prototype.enqueue=function(r,i){var o={id:_s(),flushAfter:new Date().getTime()+i*2,payload:r};return this.usePersistence?this.enqueuePersisted(o):(this.memQueue.push(o),F.resolve(!0))},Pe.prototype._enqueuePersisted=function(r){var i=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(o){return this.saveToStorage(o.concat(r))},this)).then(y.bind(function(o){return o&&(this.memQueue=this.memQueue.concat(r)),o},this)).catch(y.bind(function(o){return this.reportError("Error enqueueing items",o,r),!1},this))},this);return this.lock.withLock(i,this.pid).catch(y.bind(function(o){return this.reportError("Error acquiring storage lock",o),!1},this))},Pe.prototype.fillBatch=function(r){var i=this.memQueue.slice(0,r);return this.usePersistence&&i.lengthn.flushAfter&&!e[n.id]&&(n.orphaned=!0,i.push(n),i.length>=r))break}}return i},this)):F.resolve(i)};var lc=function(r,i){var o=[];return y.each(r,function(e){e.id&&!i[e.id]&&o.push(e)}),o};Pe.prototype.removeItemsByID=function(r){var i={};if(y.each(r,function(e){i[e]=!0}),this.memQueue=lc(this.memQueue,i),this.usePersistence){var o=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){return e=lc(e,i),this.saveToStorage(e)},this)).then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){for(var t=0;t5&&(this.reportError("[dupe] item ID sent too many times, not sending",{item:c,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[p]}),v=!1):this.reportError("[dupe] found item with no ID",{item:c}),v&&s.push(h)}a[c.id]=h},this),s.length<1)return this.requestInProgress=!1,this.resetFlush(),F.resolve();var u=y.bind(function(){return this.queue.removeItemsByID(y.map(t,function(c){return c.id})).then(y.bind(function(c){return y.each(t,y.bind(function(h){var v=h.id;v?(this.itemIdsSentSuccessfully[v]=this.itemIdsSentSuccessfully[v]||0,this.itemIdsSentSuccessfully[v]++,this.itemIdsSentSuccessfully[v]>5&&this.reportError("[dupe] item ID sent too many times",{item:h,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[v]})):this.reportError("[dupe] found item with no ID while removing",{item:h})},this)),c?(this.consecutiveRemovalFailures=0,this.flushOnlyOnInterval&&!n?(this.resetFlush(),F.resolve()):this.flush()):(++this.consecutiveRemovalFailures>5?(this.reportError("Too many queue failures; disabling batching system."),this.stopAllBatching()):this.resetFlush(),F.resolve())},this))},this),f=y.bind(function(c){this.requestInProgress=!1;try{if(r.unloading)return this.queue.updatePayloads(a);if(y.isObject(c)&&c.error==="timeout"&&new Date().getTime()-o>=i)return this.reportError("Network timeout; retrying"),this.flush();if(y.isObject(c)&&(c.httpStatusCode>=500||c.httpStatusCode===429||c.httpStatusCode<=0&&!$w()||c.error==="timeout")){var h=this.flushInterval*2;return c.retryAfter&&(h=parseInt(c.retryAfter,10)*1e3||h),h=Math.min(zw,h),this.reportError("Error; retry in "+h+" ms"),this.scheduleFlush(h),F.resolve()}else if(y.isObject(c)&&c.httpStatusCode===413)if(t.length>1){var v=Math.max(1,Math.floor(e/2));return this.batchSize=Math.min(this.batchSize,v,t.length-1),this.reportError("413 response; reducing batch size to "+this.batchSize),this.resetFlush(),F.resolve()}else return this.reportError("Single-event request too large; dropping",t),this.resetBatchSize(),u();else return u()}catch(p){this.reportError("Error handling API response",p),this.resetFlush()}},this),l={method:"POST",verbose:!0,ignore_json_errors:!0,timeout_ms:i};return r.unloading&&(l.transport="sendBeacon"),kr.log("MIXPANEL REQUEST:",s),this.sendRequestPromise(s,l).then(f)},this)).catch(y.bind(function(t){this.reportError("Error flushing request queue",t),this.resetFlush()},this))},Ee.prototype.reportError=function(r,i){if(kr.error.apply(kr.error,arguments),this.errorReporter)try{i instanceof Error||(i=new Error(r)),this.errorReporter(r,i)}catch(o){kr.error(o)}};var hc=function(r){var i=Date.now();return!r||i>r.maxExpires||i>r.idleExpires},Ww=250,jw=function(r,i){if(!y.isArray(r))return r&&i.critical("record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled."),[];for(var o=[],e=0;e=0;e-=1)if(i(r[e]))return r[e]}function pc(r,i,o){if(!(i in r)||typeof r[i]!="function")return function(){};var e=r[i],t=o(e);return r[i]=t,function(){r[i]=e}}var Ls=1024*1024;function vc(r){return!r||typeof r!="string"?r:r.length>Ls?(ct.error("Body truncated from "+r.length+" to "+Ls+" characters"),r.substring(0,Ls)+"... [truncated]"):r}function Xw(r,i,o){if(!i.PerformanceObserver)return ct.error("PerformanceObserver not supported"),function(){};if(o.recordInitialRequests){var e=i.performance.getEntries().filter(function(n){return Zw(n)||Ns(n)&&o.initiatorTypes.includes(n.initiatorType)});r({requests:e.map(function(n){return{url:n.name,initiatorType:n.initiatorType,status:"responseStatus"in n?n.responseStatus:void 0,startTime:Math.round(n.startTime),endTime:Math.round(n.responseEnd),timeOrigin:di(i)}}),isInitial:!0})}var t=new i.PerformanceObserver(function(n){var s=n.getEntries().filter(function(a){return Ns(a)&&o.initiatorTypes.includes(a.initiatorType)&&a.initiatorType!=="xmlhttprequest"&&a.initiatorType!=="fetch"});r({requests:s.map(function(a){return{url:a.name,initiatorType:a.initiatorType,status:"responseStatus"in a?a.responseStatus:void 0,startTime:Math.round(a.startTime),endTime:Math.round(a.responseEnd),timeOrigin:di(i)}})})});return t.observe({entryTypes:["navigation","resource"]}),function(){t.disconnect()}}function pi(r,i,o){return!i[r]||i[r].length===0?!1:i[r].includes(o.toLowerCase())}function vi(r,i,o){return!i[r]||i[r].length===0?!1:rc(o,i[r])}function mc(r){if(r==null)return null;var i;if(typeof r=="string")i=r;else if(r instanceof Document)i=r.textContent;else if(r instanceof FormData)i=y.HTTPBuildQuery(r);else if(y.isObject(r))try{i=JSON.stringify(r)}catch(o){return"Failed to stringify response object"}else return"Cannot read body of type "+typeof r;return vc(i)}function gc(r){return new Promise(function(i){var o=setTimeout(function(){i("Timeout while trying to read body")},500);try{r.clone().text().then(function(e){clearTimeout(o),i(vc(e))},function(e){clearTimeout(o),i("Failed to read body: "+String(e))})}catch(e){clearTimeout(o),i("Failed to read body: "+String(e))}})}function Ds(r,i,o,e,t,n){if(n===void 0&&(n=0),n>10)return ct.error("Cannot find performance entry"),Promise.resolve(null);var s=r.performance.getEntriesByName(o),a=Kw(s,function(u){return Ns(u)&&u.initiatorType===i&&(!e||u.startTime>=e)&&(!t||u.startTime<=t)});return a?Promise.resolve(a):new Promise(function(u){setTimeout(u,50*n)}).then(function(){return Ds(r,i,o,e,t,n+1)})}function Qw(r,i,o){if(!o.initiatorTypes.includes("xmlhttprequest"))return function(){};var e=pc(i.XMLHttpRequest.prototype,"open",function(t){return function(n,s,a,u,f){a===void 0&&(a=!0);var l=this,c=new Request(s,{method:n}),h={},v,p,m={},d=l.setRequestHeader.bind(l);l.setRequestHeader=function(w,b){return pi("request",o.recordHeaders,w)&&(m[w]=b),d(w,b)},h.requestHeaders=m;var g=l.send.bind(l);l.send=function(w){return vi("request",o.recordBodyUrls,c.url)&&(h.requestBody=mc(w)),v=i.performance.now(),g(w)},l.addEventListener("readystatechange",function(){if(l.readyState===l.DONE){p=i.performance.now();var w={},b=l.getAllResponseHeaders();if(b){var S=b.trim().split(/[\r\n]+/);S.forEach(function(C){if(C){var R=C.indexOf(": ");if(R!==-1){var E=C.substring(0,R),x=C.substring(R+2);E&&pi("response",o.recordHeaders,E)&&(w[E]=x)}}})}h.responseHeaders=w,vi("response",o.recordBodyUrls,c.url)&&(h.responseBody=mc(l.response)),Ds(i,"xmlhttprequest",c.url,v,p).then(function(C){if(!C){ct.error("Failed to get performance entry for XHR request to "+c.url);return}var R={url:C.name,method:c.method,initiatorType:C.initiatorType,status:l.status,startTime:Math.round(C.startTime),endTime:Math.round(C.responseEnd),timeOrigin:di(i),requestHeaders:h.requestHeaders,requestBody:h.requestBody,responseHeaders:h.responseHeaders,responseBody:h.responseBody};r({requests:[R]})}).catch(function(C){ct.error("Error recording XHR request to "+c.url+": "+String(C))})}}),t.call(l,n,s,a,u,f)}});return function(){e()}}function eb(r,i){if(typeof Request!="undefined"&&r instanceof Request){var o=r.clone();return i?new Request(o,i):o}return new Request(r,i)}function tb(r,i,o){if(!o.initiatorTypes.includes("fetch"))return function(){};var e=pc(i,"fetch",function(t){return function(){var n=eb(arguments[0],arguments[1]),s,a={},u,f,l,c=Promise.resolve(void 0),h,v=new Promise(function(m){h=m});try{var p={};n.headers.forEach(function(m,d){pi("request",o.recordHeaders,d)&&(p[d]=m)}),a.requestHeaders=p,vi("request",o.recordBodyUrls,n.url)&&(c=gc(n).then(function(m){a.requestBody=m})),u=i.performance.now(),l=t.apply(i,arguments).then(function(m){s=m,f=i.performance.now();var d={};return s.headers.forEach(function(g,w){pi("response",o.recordHeaders,w)&&(d[w]=g)}),a.responseHeaders=d,vi("response",o.recordBodyUrls,n.url)?gc(s).then(function(g){a.responseBody=g,h()}):h(),s})}catch(m){l=Promise.reject(m)}return Promise.all([c,v,l]).then(function(){return Ds(i,"fetch",n.url,u,f)}).then(function(m){if(!m){ct.error("Failed to get performance entry for fetch request to "+n.url);return}var d={url:m.name,method:n.method,initiatorType:m.initiatorType,status:s?s.status:void 0,startTime:Math.round(m.startTime),endTime:Math.round(m.responseEnd),timeOrigin:di(i),requestHeaders:a.requestHeaders,requestBody:a.requestBody,responseHeaders:a.responseHeaders,responseBody:a.responseBody};r({requests:[d]})}).catch(function(m){ct.error("Error recording fetch request to "+n.url+": "+String(m))}),l}});return function(){e()}}function rb(r,i,o){if(!("performance"in i))return function(){};var e=Object.assign({},Ts.recordHeaders,o.recordHeaders||{}),t=Object.assign({},Ts.recordBodyUrls,o.recordBodyUrls||{});o=Object.assign({},o,{recordHeaders:e,recordBodyUrls:t});var n=Object.assign({},Ts,o),s=function(l){var c=l.requests.filter(function(h){var v=rc(h.url,n.ignoreRequestUrls||[]);return!v&&!n.ignoreRequestFn(h)});(c.length>0||l.isInitial)&&r(Object.assign({},l,{requests:c}))},a=Xw(s,i,n),u=Qw(s,i,n),f=tb(s,i,n);return function(){a(),u(),f()}}var nb="rrweb/network@1.mp",ib=function(r){return{name:nb,observer:rb,options:r}},ht=lt("recorder"),ob=H.CompressionStream,sb={batch_size:1e3,batch_flush_interval_ms:10*1e3,batch_request_timeout_ms:90*1e3,batch_autostart:!0},ab=new Set([P.MouseMove,P.MouseInteraction,P.Scroll,P.ViewportResize,P.Input,P.TouchMove,P.MediaInteraction,P.Drag,P.Selection]);function ub(r){return r.type===B.IncrementalSnapshot&&ab.has(r.data.source)}var ce=function(r){this._mixpanel=r.mixpanelInstance,this._onIdleTimeout=r.onIdleTimeout||Ps,this._onMaxLengthReached=r.onMaxLengthReached||Ps,this._onBatchSent=r.onBatchSent||Ps,this._rrwebRecord=r.rrwebRecord||null,this._stopRecording=null,this.replayId=r.replayId,this.batchStartUrl=r.batchStartUrl||null,this.replayStartUrl=r.replayStartUrl||null,this.idleExpires=r.idleExpires||null,this.maxExpires=r.maxExpires||null,this.replayStartTime=r.replayStartTime||null,this.lastEventTimestamp=r.lastEventTimestamp||null,this.seqNo=r.seqNo||0,this.idleTimeoutId=null,this.maxTimeoutId=null,this.recordMaxMs=si,this.recordMinMs=0,this._recordMinMsCheckStart=null;var i=Wt(r.sharedLockStorage||$r(),!0)&&!this.getConfig("disable_persistence");this.batcherKey="__mprec_"+this.getConfig("name")+"_"+this.getConfig("token")+"_"+this.replayId,this.queueStorage=new _e(nc,ic,sc),this.batcher=new Ee(this.batcherKey,{errorReporter:this.reportError.bind(this),flushOnlyOnInterval:!0,libConfig:sb,sendRequestFunc:this.flushEventsWithOptOut.bind(this),queueStorage:this.queueStorage,sharedLockStorage:r.sharedLockStorage,usePersistence:i,stopAllBatchingFunc:this.stopRecording.bind(this),enqueueThrottleMs:Ww,sharedLockTimeoutMS:10*1e3})};ce.prototype.getUserIdInfo=function(){if(this.finalFlushUserIdInfo)return this.finalFlushUserIdInfo;var r={distinct_id:String(this._mixpanel.get_distinct_id())},i=this._mixpanel.get_property("$device_id");i&&(r.$device_id=i);var o=this._mixpanel.get_property("$user_id");return o&&(r.$user_id=o),r},ce.prototype.unloadPersistedData=function(){return this.batcher.stop(),this.queueStorage.init().catch(function(){this.reportError("Error initializing IndexedDB storage for unloading persisted data.")}.bind(this)).then(function(){return this.getDurationMs()si&&(this.recordMaxMs=si,ht.critical("record_max_ms cannot be greater than "+si+"ms. Capping value.")),this.maxExpires||(this.maxExpires=new Date().getTime()+this.recordMaxMs),this.recordMinMs=this._getRecordMinMs(),this.replayStartTime||(this.replayStartTime=new Date().getTime(),this.batchStartUrl=y.info.currentUrl(),this.replayStartUrl=y.info.currentUrl()),r||this.recordMinMs>0?(this.batcher.stop(),this._recordMinMsCheckStart=null):this.batcher.start();var i=function(){clearTimeout(this.idleTimeoutId);var f=this.getConfig("record_idle_timeout_ms");this.idleTimeoutId=setTimeout(this._onIdleTimeout,f),this.idleExpires=new Date().getTime()+f}.bind(this);i();var o=this.getConfig("record_block_selector");(o===""||o===null)&&(o=void 0);var e=Hw(this._mixpanel),t=[];if(this.getConfig("record_network")){var n=this.getConfig("record_network_options")||{},s=(n.ignoreRequestUrls||[]).slice();s.push(this._getApiRoute()),n.ignoreRequestUrls=s,t.push(ib(n))}this.getConfig("record_console")&&t.push(mw({stringifyOptions:{stringLengthLimit:1e3,numOfKeysLimit:50,depthOfLimit:2}}));var a=jw(this.getConfig("record_allowed_iframe_origins"),ht);try{this._stopRecording=this._rrwebRecord({emit:function(f){if(this.idleExpires&&this.idleExpires=this.recordMinMs&&this.batcher.start(),i()),this.__enqueuePromise=this.batcher.enqueue(f),(this.lastEventTimestamp===null||f.timestamp>this.lastEventTimestamp)&&(this.lastEventTimestamp=f.timestamp)}.bind(this),blockClass:this.getConfig("record_block_class"),blockSelector:o,collectFonts:this.getConfig("record_collect_fonts"),dataURLOptions:{type:"image/webp",quality:.6},maskAllInputs:!0,maskTextSelector:"*",maskInputFn:this._getMaskFn(Yw,e),maskTextFn:this._getMaskFn(Jw,e),recordCrossOriginIframes:a.length>0,allowedIframeOrigins:a,recordCanvas:this.getConfig("record_canvas"),sampling:{canvas:15},plugins:t})}catch(f){this.reportError("Unexpected error when starting rrweb recording.",f)}if(typeof this._stopRecording!="function"){this.reportError("rrweb failed to start, skipping this recording."),this._stopRecording=null,this.stopRecording();return}var u=this.maxExpires-new Date().getTime();this.maxTimeoutId=setTimeout(this._onMaxLengthReached.bind(this),u)},ce.prototype.stopRecording=function(r){if(this.finalFlushUserIdInfo=this.getUserIdInfo(),!this.isRrwebStopped()){try{this._stopRecording()}catch(o){this.reportError("Error with rrweb stopRecording",o)}this._stopRecording=null}var i;return this.batcher.stopped?i=this.batcher.clear():r||(i=this.batcher.flush()),this.batcher.stop(),clearTimeout(this.idleTimeoutId),clearTimeout(this.maxTimeoutId),i},ce.prototype.isRrwebStopped=function(){return this._stopRecording===null},ce.prototype.flushEventsWithOptOut=function(r,i,o){var e=function(t){t===0&&(this.stopRecording(),o({error:"Tracking has been opted out, stopping recording."}))}.bind(this);this._flushEvents(r,i,o,e)},ce.prototype.serialize=function(){var r;try{r=this._mixpanel.get_tab_id()}catch(i){this.reportError("Error getting tab ID for serialization ",i),r=null}return{replayId:this.replayId,seqNo:this.seqNo,replayStartTime:this.replayStartTime,batchStartUrl:this.batchStartUrl,replayStartUrl:this.replayStartUrl,lastEventTimestamp:this.lastEventTimestamp,idleExpires:this.idleExpires,maxExpires:this.maxExpires,tabId:r}},ce.deserialize=function(r,i){var o=new ce(y.extend({},i,{replayId:r.replayId,batchStartUrl:r.batchStartUrl,replayStartUrl:r.replayStartUrl,idleExpires:r.idleExpires,maxExpires:r.maxExpires,replayStartTime:r.replayStartTime,lastEventTimestamp:r.lastEventTimestamp,seqNo:r.seqNo,sharedLockStorage:i.sharedLockStorage}));return o},ce.prototype._getApiRoute=function(){return this.getConfig("api_routes").record},ce.prototype._sendRequest=function(r,i,o,e){var t=function(s,a){s.status===200&&this.replayId===r&&(this.seqNo++,this.batchStartUrl=y.info.currentUrl()),this._onBatchSent(),e({status:0,httpStatusCode:s.status,responseBody:a,retryAfter:s.headers.get("Retry-After")})}.bind(this),n=this._mixpanel.get_api_host&&this._mixpanel.get_api_host("record")||this.getConfig("api_host");H.fetch(n+"/"+this._getApiRoute()+"?"+new URLSearchParams(i),{method:"POST",headers:{Authorization:"Basic "+btoa(this.getConfig("token")+":"),"Content-Type":"application/octet-stream"},body:o}).then(function(s){s.json().then(function(a){t(s,a)}).catch(function(a){e({error:a})})}).catch(function(s){e({error:s,httpStatusCode:0})})},ce.prototype._flushEvents=Tw(function(r,i,o){var e=r.length;if(e>0){for(var t=this.replayId,n=1/0,s=-1/0,a=!1,u=0;uEs?(ht.critical("record_min_ms cannot be greater than "+Es+"ms. Capping value."),Es):r},ce.prototype._getMaskFn=function(r,i){return function(o,e){if(!o.trim().length)return"";var t=!0;try{t=r(e,i)}catch(s){this.reportError("Error checking if text should be masked, defaulting to masked",s)}if(t){var n=Math.min(o.length,1e4);return"*".repeat(n)}else return o}.bind(this)};var Ue=function(r){this.idb=new _e(nc,oc,sc),this.errorReporter=r.errorReporter,this.mixpanelInstance=r.mixpanelInstance,this.sharedLockStorage=r.sharedLockStorage};Ue.prototype.isPersistenceEnabled=function(){return!this.mixpanelInstance.get_config("disable_persistence")},Ue.prototype.handleError=function(r){this.errorReporter("IndexedDB error: ",r)},Ue.prototype.setActiveRecording=function(r){if(!this.isPersistenceEnabled())return F.resolve();var i=r.tabId;return i?this.idb.init().then(function(){return this.idb.setItem(i,r)}.bind(this)).catch(this.handleError.bind(this)):(console.warn("No tab ID is set, cannot persist recording metadata."),F.resolve())},Ue.prototype.getActiveRecording=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getItem(this.mixpanelInstance.get_tab_id())}.bind(this)).then(function(r){return hc(r)?null:r}.bind(this)).catch(this.handleError.bind(this)):F.resolve(null)},Ue.prototype.clearActiveRecording=function(){return this.isPersistenceEnabled()?this.markActiveRecordingExpired():this.deleteActiveRecording()},Ue.prototype.markActiveRecordingExpired=function(){return this.getActiveRecording().then(function(r){if(r)return r.maxExpires=0,this.setActiveRecording(r)}.bind(this)).catch(this.handleError.bind(this))},Ue.prototype.deleteActiveRecording=function(){return this.idb.isInitialized()?this.idb.removeItem(this.mixpanelInstance.get_tab_id()).catch(this.handleError.bind(this)):F.resolve()},Ue.prototype.flushInactiveRecordings=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getAll()}.bind(this)).then(function(r){var i=r.filter(function(o){return hc(o)}).map(function(o){var e=ce.deserialize(o,{mixpanelInstance:this.mixpanelInstance,sharedLockStorage:this.sharedLockStorage});return e.unloadPersistedData().then(function(){return this.idb.removeItem(o.tabId)}.bind(this)).catch(this.handleError.bind(this))}.bind(this));return F.all(i)}.bind(this)).catch(this.handleError.bind(this)):F.resolve([])};var _r=lt("recorder"),Te=function(r,i,o){this.mixpanelInstance=r,this.rrwebRecord=i||Ye,this.sharedLockStorage=o,this.recordingRegistry=new Ue({mixpanelInstance:this.mixpanelInstance,errorReporter:_r.error,sharedLockStorage:o}),this._flushInactivePromise=this.recordingRegistry.flushInactiveRecordings(),this.activeRecording=null,this.stopRecordingInProgress=!1};Te.prototype.startRecording=function(r){if(r=r||{},this.activeRecording&&!this.activeRecording.isRrwebStopped()){_r.log("Recording already in progress, skipping startRecording.");return}var i=function(){_r.log("Idle timeout reached, restarting recording."),this.resetRecording()}.bind(this),o=function(){_r.log("Max recording length reached, stopping recording."),this.resetRecording()}.bind(this),e=function(){this.recordingRegistry.setActiveRecording(this.activeRecording.serialize()),this.__flushPromise=this.activeRecording.batcher._flushPromise}.bind(this),t={mixpanelInstance:this.mixpanelInstance,onBatchSent:e,onIdleTimeout:i,onMaxLengthReached:o,replayId:y.UUID(),rrwebRecord:this.rrwebRecord,sharedLockStorage:this.sharedLockStorage};return r.activeSerializedRecording?this.activeRecording=ce.deserialize(r.activeSerializedRecording,t):this.activeRecording=new ce(t),this.activeRecording.startRecording(r.shouldStopBatcher),this.recordingRegistry.setActiveRecording(this.activeRecording.serialize())},Te.prototype.stopRecording=function(){return this.stopRecordingInProgress=!0,this._stopCurrentRecording(!1,!0).then(function(){return this.recordingRegistry.clearActiveRecording()}.bind(this)).then(function(){this.stopRecordingInProgress=!1}.bind(this))},Te.prototype.pauseRecording=function(){return this._stopCurrentRecording(!1)},Te.prototype._stopCurrentRecording=function(r,i){if(this.activeRecording){var o=this.activeRecording.stopRecording(r);return i&&(this.activeRecording=null),o}return F.resolve()},Te.prototype.resumeRecording=function(r){return this.activeRecording&&this.activeRecording.isRrwebStopped()?(this.activeRecording.startRecording(!1),F.resolve(null)):this.recordingRegistry.getActiveRecording().then(function(i){return i&&!this.stopRecordingInProgress?this.startRecording({activeSerializedRecording:i}):r?this.startRecording({shouldStopBatcher:!1}):(_r.log("No resumable recording found."),null)}.bind(this))},Te.prototype.resetRecording=function(){this.stopRecording(),this.startRecording({shouldStopBatcher:!0})},Te.prototype.isRecording=function(){return this.activeRecording&&!this.activeRecording.isRrwebStopped()},Te.prototype.getActiveReplayId=function(){return this.isRecording()?this.activeRecording.replayId:null},Object.defineProperty(Te.prototype,"replayId",{get:function(){return this.getActiveReplayId()}}),H[Rc]=Te})(); -//# sourceMappingURL=mixpanel-recorder-CcIR1Do8.min.js.map diff --git a/dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js.map b/dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js.map deleted file mode 100644 index 1942f1a0..00000000 --- a/dist/async-modules/mixpanel-recorder-CcIR1Do8.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mixpanel-recorder-CcIR1Do8.min.js","sources":["../../src/window.js","../../src/config.js","../rrweb-compiled.js","../../src/promise-polyfill.js","../../src/utils.js","../../src/storage/indexed-db.js","../../src/recorder/idb-config.js","../../src/gdpr-utils.js","../../src/shared-lock.js","../../src/storage/local-storage.js","../../src/request-queue.js","../../src/request-batcher.js","../../src/recorder/utils.js","../../src/autocapture/utils.js","../../src/recorder/masking.js","../../src/recorder/rrweb-network-plugin.js","../../src/recorder/session-recording.js","../../src/recorder/recording-registry.js","../../src/recorder/recorder.js","../../src/recorder/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.84.0'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function construct(Parent, args, Class) {\n var a = [\n null\n ];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _set_prototype_of(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n return Constructor;\n}\nfunction _extends() {\n _extends = Object.assign || function(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i];\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _get_prototype_of(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _set_prototype_of(o, p);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function wrapNativeSuper(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _set_prototype_of(Wrapper, Class);\n };\n return _wrap_native_super(Class);\n}\nfunction _is_native_reflect_construct() {\n try {\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike) {\n if (it) o = it;\n var i = 0;\n return function() {\n if (i >= o.length) {\n return {\n done: true\n };\n }\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction _ts_values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = function(obj, key, value) {\n return key in obj ? __defProp$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1 = function(obj, key, value) {\n return __defNormalProp$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar _a;\nvar __defProp$1$1 = Object.defineProperty;\nvar __defNormalProp$1$1 = function(obj, key, value) {\n return key in obj ? __defProp$1$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1$1 = function(obj, key, value) {\n return __defNormalProp$1$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar NodeType$3 = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType$3 || {});\nvar testableAccessors$1 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$1 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$1 = {};\nvar isAngularZonePresent$1 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key]) return untaintedBasePrototype$1[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$1()) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$1[cacheKey]) return untaintedAccessorCache$1[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$1[cacheKey]) return untaintedMethodCache$1[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nfunction patch$1$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1,\n patch: patch$1$1\n};\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n var hostEl = // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null;\n return Boolean(hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2);\n}\nfunction isNativeShadowDom(shadowRoot2) {\n return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(/\\sbackground-clip:\\s*text;/g, \" -webkit-background-clip: text; background-clip: text;\");\n }\n return cssText;\n}\nfunction escapeImportStatement(rule2) {\n var cssText = rule2.cssText;\n if (cssText.split('\"').length < 3) return cssText;\n var statement = [\n \"@import\",\n \"url(\" + JSON.stringify(rule2.href) + \")\"\n ];\n if (rule2.layerName === \"\") {\n statement.push(\"layer\");\n } else if (rule2.layerName) {\n statement.push(\"layer(\" + rule2.layerName + \")\");\n }\n if (rule2.supportsText) {\n statement.push(\"supports(\" + rule2.supportsText + \")\");\n }\n if (rule2.media.length) {\n statement.push(rule2.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n var rules2 = s2.rules || s2.cssRules;\n if (!rules2) {\n return null;\n }\n var sheetHref = s2.href;\n if (!sheetHref && s2.ownerNode && s2.ownerNode.ownerDocument) {\n sheetHref = s2.ownerNode.ownerDocument.location.href;\n }\n var stringifiedRules = Array.from(rules2, function(rule2) {\n return stringifyRule(rule2, sheetHref);\n }).join(\"\");\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule2, sheetHref) {\n if (isCSSImportRule(rule2)) {\n var importStringified;\n try {\n importStringified = // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule2);\n } catch (error) {\n importStringified = rule2.cssText;\n }\n if (rule2.styleSheet.href) {\n return absolutifyURLs(importStringified, rule2.styleSheet.href);\n }\n return importStringified;\n } else {\n var ruleStringified = rule2.cssText;\n if (isCSSStyleRule(rule2) && rule2.selectorText.includes(\":\")) {\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\nfunction fixSafariColons(cssStringified) {\n var regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule2) {\n return \"styleSheet\" in rule2;\n}\nfunction isCSSStyleRule(rule2) {\n return \"selectorText\" in rule2;\n}\nvar Mirror = /*#__PURE__*/ function() {\n function Mirror() {\n __publicField$1$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n var _proto = Mirror.prototype;\n _proto.getId = function getId(n2) {\n var _a2;\n if (!n2) return -1;\n var id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id != null ? id : -1;\n };\n _proto.getNode = function getNode(id) {\n return this.idNodeMap.get(id) || null;\n };\n _proto.getIds = function getIds() {\n return Array.from(this.idNodeMap.keys());\n };\n _proto.getMeta = function getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n };\n // removes the node from idNodeMap\n // if permanent is true, also removes from nodeMetaMap\n _proto.removeNodeFromMap = function removeNodeFromMap(n2, permanent) {\n var _this = this;\n if (permanent === void 0) permanent = false;\n var id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (permanent) this.nodeMetaMap.delete(n2);\n if (n2.childNodes) {\n n2.childNodes.forEach(function(childNode) {\n return _this.removeNodeFromMap(childNode, permanent);\n });\n }\n };\n _proto.has = function has(id) {\n return this.idNodeMap.has(id);\n };\n _proto.hasNode = function hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n };\n _proto.add = function add(n2, meta) {\n var id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n };\n _proto.replace = function replace(id, n2) {\n var oldNode = this.getNode(id);\n if (oldNode) {\n var meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n };\n _proto.reset = function reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n };\n return Mirror;\n}();\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue(param) {\n var element = param.element, maskInputOptions = param.maskInputOptions, tagName = param.tagName, type = param.type, value = param.value, maskInputFn = param.maskInputFn;\n var text = value || \"\";\n var actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nvar ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n var ctx = canvas.getContext(\"2d\");\n if (!ctx) return true;\n var chunkSize = 50;\n for(var x2 = 0; x2 < canvas.width; x2 += chunkSize){\n for(var y = 0; y < canvas.height; y += chunkSize){\n var getImageData = ctx.getImageData;\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n var pixelBuffer = new Uint32Array(// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(ctx, x2, y, Math.min(chunkSize, canvas.width - x2), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some(function(pixel) {\n return pixel !== 0;\n })) return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n var type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n var url;\n try {\n url = new URL(path, baseURL != null ? baseURL : window.location.href);\n } catch (err) {\n return null;\n }\n var regex = /\\.([0-9a-z]+)(?:$)/i;\n var match = url.pathname.match(regex);\n var _ref;\n return (_ref = match == null ? void 0 : match[1]) != null ? _ref : null;\n}\nfunction extractOrigin(url) {\n var origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nvar URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nvar URL_WWW_MATCH = /^www\\..*/i;\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n return (cssText || \"\").replace(URL_IN_CSS_REF, function(origin, quote1, path1, quote2, path2, path3) {\n var filePath = path1 || path2 || path3;\n var maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (DATA_URI.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (filePath[0] === \"/\") {\n return \"url(\" + maybeQuote + (extractOrigin(href) + filePath) + maybeQuote + \")\";\n }\n var stack = href.split(\"/\");\n var parts = filePath.split(\"/\");\n stack.pop();\n for(var _iterator = _create_for_of_iterator_helper_loose(parts), _step; !(_step = _iterator()).done;){\n var part = _step.value;\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return \"url(\" + maybeQuote + stack.join(\"/\") + maybeQuote + \")\";\n });\n}\nfunction normalizeCssString(cssText, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n if (_testNoPxNorm) {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\");\n } else {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\").replace(/0px/g, \"0\");\n }\n}\nfunction splitCssText(cssText, style, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n var childNodes2 = Array.from(style.childNodes);\n var splits = [];\n var iterCount = 0;\n if (childNodes2.length > 1 && cssText && typeof cssText === \"string\") {\n var cssTextNorm = normalizeCssString(cssText, _testNoPxNorm);\n var normFactor = cssTextNorm.length / cssText.length;\n for(var i2 = 1; i2 < childNodes2.length; i2++){\n if (childNodes2[i2].textContent && typeof childNodes2[i2].textContent === \"string\") {\n var textContentNorm = normalizeCssString(childNodes2[i2].textContent, _testNoPxNorm);\n var jLimit = 100;\n var j = 3;\n for(; j < textContentNorm.length; j++){\n if (// keep consuming css identifiers (to get a decent chunk more quickly)\n textContentNorm[j].match(/[a-zA-Z0-9]/) || // substring needs to be unique to this section\n textContentNorm.indexOf(textContentNorm.substring(0, j), 1) !== -1) {\n continue;\n }\n break;\n }\n for(; j < textContentNorm.length; j++){\n var startSubstring = textContentNorm.substring(0, j);\n var cssNormSplits = cssTextNorm.split(startSubstring);\n var splitNorm = -1;\n if (cssNormSplits.length === 2) {\n splitNorm = cssNormSplits[0].length;\n } else if (cssNormSplits.length > 2 && cssNormSplits[0] === \"\" && childNodes2[i2 - 1].textContent !== \"\") {\n splitNorm = cssTextNorm.indexOf(startSubstring, 1);\n } else if (cssNormSplits.length === 1) {\n startSubstring = startSubstring.substring(0, startSubstring.length - 1);\n cssNormSplits = cssTextNorm.split(startSubstring);\n if (cssNormSplits.length <= 1) {\n splits.push(cssText);\n return splits;\n }\n j = jLimit + 1;\n } else if (j === textContentNorm.length - 1) {\n splitNorm = cssTextNorm.indexOf(startSubstring);\n }\n if (cssNormSplits.length >= 2 && j > jLimit) {\n var prevTextContent = childNodes2[i2 - 1].textContent;\n if (prevTextContent && typeof prevTextContent === \"string\") {\n var prevMinLength = normalizeCssString(prevTextContent).length;\n splitNorm = cssTextNorm.indexOf(startSubstring, prevMinLength);\n }\n if (splitNorm === -1) {\n splitNorm = cssNormSplits[0].length;\n }\n }\n if (splitNorm !== -1) {\n var k = Math.floor(splitNorm / normFactor);\n for(; k > 0 && k < cssText.length;){\n iterCount += 1;\n if (iterCount > 50 * childNodes2.length) {\n splits.push(cssText);\n return splits;\n }\n var normPart = normalizeCssString(cssText.substring(0, k), _testNoPxNorm);\n if (normPart.length === splitNorm) {\n splits.push(cssText.substring(0, k));\n cssText = cssText.substring(k);\n cssTextNorm = cssTextNorm.substring(splitNorm);\n break;\n } else if (normPart.length < splitNorm) {\n k += Math.max(1, Math.floor((splitNorm - normPart.length) / normFactor));\n } else {\n k -= Math.max(1, Math.floor((normPart.length - splitNorm) * normFactor));\n }\n }\n break;\n }\n }\n }\n }\n }\n splits.push(cssText);\n return splits;\n}\nfunction markCssSplits(cssText, style) {\n return splitCssText(cssText, style).join(\"/* rr_split */\");\n}\nvar _id = 1;\nvar tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nvar IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (_instanceof(element, HTMLFormElement)) {\n return \"form\";\n }\n var processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nvar canvasService;\nvar canvasCtx;\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n var pos = 0;\n function collectCharacters(regEx) {\n var chars2;\n var match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n var output = [];\n while(true){\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n var url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n var descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n var inParens = false;\n while(true){\n var c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nvar cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n var a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absolutifyURLs(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for(var eIndex = element.classList.length; eIndex--;){\n var className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {}\n return false;\n}\nfunction classMatchesRegex$1(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction needMaskingText(node2, maskTextClass, maskTextSelector, checkAncestors) {\n var el;\n if (isElement(node2)) {\n el = node2;\n if (!index$1.childNodes(el).length) {\n return false;\n }\n } else if (index$1.parentElement(node2) === null) {\n return false;\n } else {\n el = index$1.parentElement(node2);\n }\n try {\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(\".\" + maskTextClass)) return true;\n } else {\n if (el.classList.contains(maskTextClass)) return true;\n }\n } else {\n if (classMatchesRegex$1(el, maskTextClass, checkAncestors)) return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector)) return true;\n } else {\n if (el.matches(maskTextSelector)) return true;\n }\n }\n } catch (e2) {}\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n var win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n var fired = false;\n var readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n var blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n var fired = false;\n var styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded) return;\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, needsMask = options.needsMask, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var rootId = getRootId(doc, mirror2);\n switch(n2.nodeType){\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n compatMode: n2.compatMode\n };\n } else {\n return {\n type: NodeType$3.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$3.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId: rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc: doc,\n blockClass: blockClass,\n blockSelector: blockSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n rootId: rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc: doc,\n needsMask: needsMask,\n maskTextFn: maskTextFn,\n rootId: rootId,\n cssCaptured: cssCaptured\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$3.CDATA,\n textContent: \"\",\n rootId: rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$3.Comment,\n textContent: index$1.textContent(n2) || \"\",\n rootId: rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc)) return void 0;\n var docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n var needsMask = options.needsMask, maskTextFn = options.maskTextFn, rootId = options.rootId, cssCaptured = options.cssCaptured;\n var parent = index$1.parentNode(n2);\n var parentTagName = parent && parent.tagName;\n var textContent2 = \"\";\n var isStyle = parentTagName === \"STYLE\" ? true : void 0;\n var isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isScript) {\n textContent2 = \"SCRIPT_PLACEHOLDER\";\n } else if (!cssCaptured) {\n textContent2 = index$1.textContent(n2);\n if (isStyle && textContent2) {\n textContent2 = absolutifyURLs(textContent2, getHref(options.doc));\n }\n }\n if (!isStyle && !isScript && textContent2 && needsMask) {\n textContent2 = maskTextFn ? maskTextFn(textContent2, index$1.parentElement(n2)) : textContent2.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$3.Text,\n textContent: textContent2 || \"\",\n rootId: rootId\n };\n}\nfunction serializeElementNode(n2, options) {\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, rootId = options.rootId;\n var needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n var tagName = getValidTagName$1(n2);\n var attributes = {};\n var len = n2.attributes.length;\n for(var i2 = 0; i2 < len; i2++){\n var attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value);\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n var stylesheet = Array.from(doc.styleSheets).find(function(s2) {\n return s2.href === n2.href;\n });\n var cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"style\" && n2.sheet) {\n var cssText1 = stringifyStylesheet(n2.sheet);\n if (cssText1) {\n if (n2.childNodes.length > 1) {\n cssText1 = markCssSplits(cssText1, n2);\n }\n attributes._cssText = cssText1;\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n var value = n2.value;\n var checked = n2.checked;\n if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n attributes.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: value,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n } else if (checked) {\n attributes.checked = checked;\n }\n }\n if ((tagName === \"input\" || tagName === \"textarea\") && attributes.placeholder) {\n attributes.placeholder = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: attributes.placeholder,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes.selected = true;\n } else {\n delete attributes.selected;\n }\n }\n if (tagName === \"dialog\" && n2.open) {\n attributes.rr_open_mode = n2.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes.rr_dataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n } else if (!(\"__context\" in n2)) {\n var canvasDataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n var blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n var image = n2;\n var imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"\";\n var priorCrossOrigin = image.crossOrigin;\n var recordInlineImage = function() {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\"Cannot inline img src=\" + imageSrc + \"! Error: \" + err);\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n var mediaAttributes = attributes;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n var _n2_getBoundingClientRect = n2.getBoundingClientRect(), width = _n2_getBoundingClientRect.width, height = _n2_getBoundingClientRect.height;\n attributes = {\n class: attributes.class,\n rr_width: \"\" + width + \"px\",\n rr_height: \"\" + height + \"px\"\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n if (!n2.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n var isCustomElement;\n try {\n if (customElements.get(tagName)) isCustomElement = true;\n } catch (e2) {}\n return {\n type: NodeType$3.Element,\n tagName: tagName,\n attributes: attributes,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock: needBlock,\n rootId: rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$3.Comment) {\n return true;\n } else if (sn.type === NodeType$3.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" && sn.attributes.as === \"script\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _options_skipChild = options.skipChild, skipChild = _options_skipChild === void 0 ? false : _options_skipChild, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _options_iframeLoadTimeout = options.iframeLoadTimeout, iframeLoadTimeout = _options_iframeLoadTimeout === void 0 ? 5e3 : _options_iframeLoadTimeout, onStylesheetLoad = options.onStylesheetLoad, _options_stylesheetLoadTimeout = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _options_stylesheetLoadTimeout === void 0 ? 5e3 : _options_stylesheetLoadTimeout, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var needsMask = options.needsMask;\n var _options_preserveWhiteSpace = options.preserveWhiteSpace, preserveWhiteSpace = _options_preserveWhiteSpace === void 0 ? true : _options_preserveWhiteSpace;\n if (!needsMask) {\n var checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(n2, maskTextClass, maskTextSelector, checkAncestors);\n }\n var _serializedNode = serializeNode(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n cssCaptured: cssCaptured\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n var id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$3.Text && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n var serializedNode = Object.assign(_serializedNode, {\n id: id\n });\n mirror2.add(n2, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n var recordChild = !skipChild;\n if (serializedNode.type === NodeType$3.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n var shadowRootEl = index$1.shadowRoot(n2);\n if (shadowRootEl && isNativeShadowDom(shadowRootEl)) serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$3.Document || serializedNode.type === NodeType$3.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n var bypassOptions = {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: skipChild,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n cssCaptured: false\n };\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n else {\n if (serializedNode.type === NodeType$3.Element && serializedNode.attributes._cssText !== void 0 && typeof serializedNode.attributes._cssText === \"string\") {\n bypassOptions.cssCaptured = true;\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(n2))), _step; !(_step = _iterator()).done;){\n var childN = _step.value;\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n var shadowRootEl1 = null;\n if (isElement(n2) && (shadowRootEl1 = index$1.shadowRoot(n2))) {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(shadowRootEl1))), _step1; !(_step1 = _iterator1()).done;){\n var childN1 = _step1.value;\n var serializedChildNode1 = serializeNodeWithId(childN1, bypassOptions);\n if (serializedChildNode1) {\n isNativeShadowDom(shadowRootEl1) && (serializedChildNode1.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode1);\n }\n }\n }\n }\n var parent = index$1.parentNode(n2);\n if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"iframe\") {\n onceIframeLoaded(n2, function() {\n var iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(n2, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n onceStylesheetLoaded(n2, function() {\n if (onStylesheetLoad) {\n var serializedLinkNode = serializeNodeWithId(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n2, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n2, options) {\n var _ref = options || {}, tmp = _ref.mirror, mirror2 = tmp === void 0 ? new Mirror() : tmp, _ref_blockClass = _ref.blockClass, blockClass = _ref_blockClass === void 0 ? \"rr-block\" : _ref_blockClass, _ref_blockSelector = _ref.blockSelector, blockSelector = _ref_blockSelector === void 0 ? null : _ref_blockSelector, _ref_maskTextClass = _ref.maskTextClass, maskTextClass = _ref_maskTextClass === void 0 ? \"rr-mask\" : _ref_maskTextClass, _ref_maskTextSelector = _ref.maskTextSelector, maskTextSelector = _ref_maskTextSelector === void 0 ? null : _ref_maskTextSelector, _ref_inlineStylesheet = _ref.inlineStylesheet, inlineStylesheet = _ref_inlineStylesheet === void 0 ? true : _ref_inlineStylesheet, _ref_inlineImages = _ref.inlineImages, inlineImages = _ref_inlineImages === void 0 ? false : _ref_inlineImages, _ref_recordCanvas = _ref.recordCanvas, recordCanvas = _ref_recordCanvas === void 0 ? false : _ref_recordCanvas, _ref_maskAllInputs = _ref.maskAllInputs, maskAllInputs = _ref_maskAllInputs === void 0 ? false : _ref_maskAllInputs, maskTextFn = _ref.maskTextFn, maskInputFn = _ref.maskInputFn, _ref_slimDOM = _ref.slimDOM, slimDOM = _ref_slimDOM === void 0 ? false : _ref_slimDOM, dataURLOptions = _ref.dataURLOptions, preserveWhiteSpace = _ref.preserveWhiteSpace, onSerialize = _ref.onSerialize, onIframeLoad = _ref.onIframeLoad, iframeLoadTimeout = _ref.iframeLoadTimeout, onStylesheetLoad = _ref.onStylesheetLoad, stylesheetLoadTimeout = _ref.stylesheetLoadTimeout, _ref_keepIframeSrcFn = _ref.keepIframeSrcFn, keepIframeSrcFn = _ref_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _ref_keepIframeSrcFn;\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n var slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n } : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$1 = {\n exports: {}\n};\nvar x$1 = String;\nvar create$1 = function create$1() {\n return {\n isColorSupported: false,\n reset: x$1,\n bold: x$1,\n dim: x$1,\n italic: x$1,\n underline: x$1,\n inverse: x$1,\n hidden: x$1,\n strikethrough: x$1,\n black: x$1,\n red: x$1,\n green: x$1,\n yellow: x$1,\n blue: x$1,\n magenta: x$1,\n cyan: x$1,\n white: x$1,\n gray: x$1,\n bgBlack: x$1,\n bgRed: x$1,\n bgGreen: x$1,\n bgYellow: x$1,\n bgBlue: x$1,\n bgMagenta: x$1,\n bgCyan: x$1,\n bgWhite: x$1\n };\n};\npicocolors_browser$1.exports = create$1();\npicocolors_browser$1.exports.createColors = create$1;\nvar picocolors_browserExports$1 = picocolors_browser$1.exports;\nvar __viteBrowserExternal$2 = {};\nvar __viteBrowserExternal$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$2\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$1 = /* @__PURE__ */ getAugmentedNamespace$1(__viteBrowserExternal$1$1);\nvar pico$1 = picocolors_browserExports$1;\nvar terminalHighlight$1$1 = require$$2$1;\nvar CssSyntaxError$3$1 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$1.isColorSupported;\n if (terminalHighlight$1$1) {\n if (color) css = terminalHighlight$1$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$1_createColors = pico$1.createColors(true), bold = _pico$1_createColors.bold, gray = _pico$1_createColors.gray, red = _pico$1_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$1 = CssSyntaxError$3$1;\nCssSyntaxError$3$1.default = CssSyntaxError$3$1;\nvar symbols$1 = {};\nsymbols$1.isClean = Symbol(\"isClean\");\nsymbols$1.my = Symbol(\"my\");\nvar DEFAULT_RAW$1 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$1(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$1 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$1[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$1(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$1[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier$1 = Stringifier$2$1;\nStringifier$2$1.default = Stringifier$2$1;\nvar Stringifier$1$1 = stringifier$1;\nfunction stringify$4$1(node2, builder) {\n var str = new Stringifier$1$1(builder);\n str.stringify(node2);\n}\nvar stringify_1$1 = stringify$4$1;\nstringify$4$1.default = stringify$4$1;\nvar isClean$2$1 = symbols$1.isClean, my$2$1 = symbols$1.my;\nvar CssSyntaxError$2$1 = cssSyntaxError$1;\nvar Stringifier2$1 = stringifier$1;\nvar stringify$3$1 = stringify_1$1;\nfunction cloneNode$1(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$1(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$1(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$1 = /*#__PURE__*/ function() {\n function Node2(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$1] = false;\n this[my$2$1] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node2.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$1(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$1(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$1]) {\n this[isClean$2$1] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$1] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2$1();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$1;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node2, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node2;\n}();\nvar node$1 = Node$4$1;\nNode$4$1.default = Node$4$1;\nvar Node$3$1 = node$1;\nvar Declaration$4$1 = /*#__PURE__*/ function(Node$3$1) {\n _inherits(Declaration, Node$3$1);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$1.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3$1);\nvar declaration$1 = Declaration$4$1;\nDeclaration$4$1.default = Declaration$4$1;\nvar urlAlphabet$1 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$1[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$1 = {\n nanoid: nanoid$1$1\n};\nvar SourceMapConsumer$2$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$2$1 = require$$2$1.SourceMapGenerator;\nvar existsSync$1 = require$$2$1.existsSync, readFileSync$1 = require$$2$1.readFileSync;\nvar dirname$1$1 = require$$2$1.dirname, join$1 = require$$2$1.join;\nfunction fromBase64$1(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$1 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$1(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$1(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$1(path);\n if (existsSync$1(path)) {\n this.mapFile = path;\n return readFileSync$1(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$1)) {\n return SourceMapGenerator$2$1.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$1)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$1(dirname$1$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap$1 = PreviousMap$2$1;\nPreviousMap$2$1.default = PreviousMap$2$1;\nvar SourceMapConsumer$1$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$1$1 = require$$2$1.SourceMapGenerator;\nvar fileURLToPath$1 = require$$2$1.fileURLToPath, pathToFileURL$1$1 = require$$2$1.pathToFileURL;\nvar isAbsolute$1 = require$$2$1.isAbsolute, resolve$1$1 = require$$2$1.resolve;\nvar nanoid$2 = nonSecure$1.nanoid;\nvar terminalHighlight$2 = require$$2$1;\nvar CssSyntaxError$1$1 = cssSyntaxError$1;\nvar PreviousMap$1$1 = previousMap$1;\nvar fromOffsetCache$1 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$1 = Boolean(SourceMapConsumer$1$1 && SourceMapGenerator$1$1);\nvar pathAvailable$1$1 = Boolean(resolve$1$1 && isAbsolute$1);\nvar Input$4$1 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$1(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$1(opts.from);\n }\n }\n if (pathAvailable$1$1 && sourceMapAvailable$1$1) {\n var map = new PreviousMap$1$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$1) {\n result2.input.url = pathToFileURL$1$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$1]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$1] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$1];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$1(from.source)) {\n fromUrl = pathToFileURL$1$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$1) {\n result2.file = fileURLToPath$1(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input$1 = Input$4$1;\nInput$4$1.default = Input$4$1;\nif (terminalHighlight$2 && terminalHighlight$2.registerInput) {\n terminalHighlight$2.registerInput(Input$4$1);\n}\nvar SourceMapConsumer$3 = require$$2$1.SourceMapConsumer, SourceMapGenerator$3 = require$$2$1.SourceMapGenerator;\nvar dirname$2 = require$$2$1.dirname, relative$1 = require$$2$1.relative, resolve$2 = require$$2$1.resolve, sep$1 = require$$2$1.sep;\nvar pathToFileURL$2 = require$$2$1.pathToFileURL;\nvar Input$3$1 = input$1;\nvar sourceMapAvailable$2 = Boolean(SourceMapConsumer$3 && SourceMapGenerator$3);\nvar pathAvailable$2 = Boolean(dirname$2 && resolve$2 && relative$1 && sep$1);\nvar MapGenerator$2$1 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$2(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$3(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$2 && sourceMapAvailable$2 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$3.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$2(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$2(resolve$2(from, this.mapOpts.annotation));\n }\n var path = relative$1(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$1(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$2) {\n var fileURL = pathToFileURL$2(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$1 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator$1 = MapGenerator$2$1;\nvar Node$2$1 = node$1;\nvar Comment$4$1 = /*#__PURE__*/ function(Node$2$1) {\n _inherits(Comment, Node$2$1);\n function Comment(defaults) {\n var _this;\n _this = Node$2$1.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2$1);\nvar comment$1 = Comment$4$1;\nComment$4$1.default = Comment$4$1;\nvar isClean$1$1 = symbols$1.isClean, my$1$1 = symbols$1.my;\nvar Declaration$3$1 = declaration$1;\nvar Comment$3$1 = comment$1;\nvar Node$1$1 = node$1;\nvar parse$4$1, Rule$4$1, AtRule$4$1, Root$6$1;\nfunction cleanSource$1(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$1(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$1(node2) {\n node2[isClean$1$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$1(i2);\n }\n }\n}\nvar Container$7$1 = /*#__PURE__*/ function(Node$1$1) {\n _inherits(Container, Node$1$1);\n function Container() {\n return Node$1$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$1(parse$4$1(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$1(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$1(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$1(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$1(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$1]) Container.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$1]) markDirtyUp$1(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1$1);\nContainer$7$1.registerParse = function(dependant) {\n parse$4$1 = dependant;\n};\nContainer$7$1.registerRule = function(dependant) {\n Rule$4$1 = dependant;\n};\nContainer$7$1.registerAtRule = function(dependant) {\n AtRule$4$1 = dependant;\n};\nContainer$7$1.registerRoot = function(dependant) {\n Root$6$1 = dependant;\n};\nvar container$1 = Container$7$1;\nContainer$7$1.default = Container$7$1;\nContainer$7$1.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$1.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$1.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$1.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$1.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$1.prototype);\n }\n node2[my$1$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$1.rebuild(child);\n });\n }\n};\nvar Container$6$1 = container$1;\nvar LazyResult$4$1, Processor$3$1;\nvar Document$3$1 = /*#__PURE__*/ function(Container$6$1) {\n _inherits(Document2, Container$6$1);\n function Document2(defaults) {\n var _this;\n _this = Container$6$1.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document2.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$1(new Processor$3$1(), this, opts);\n return lazy.stringify();\n };\n return Document2;\n}(Container$6$1);\nDocument$3$1.registerLazyResult = function(dependant) {\n LazyResult$4$1 = dependant;\n};\nDocument$3$1.registerProcessor = function(dependant) {\n Processor$3$1 = dependant;\n};\nvar document$1$1 = Document$3$1;\nDocument$3$1.default = Document$3$1;\nvar printed$1 = {};\nvar warnOnce$2$1 = function warnOnce(message) {\n if (printed$1[message]) return;\n printed$1[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$1 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning$1 = Warning$2$1;\nWarning$2$1.default = Warning$2$1;\nvar Warning$1$1 = warning$1;\nvar Result$3$1 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result$1 = Result$3$1;\nResult$3$1.default = Result$3$1;\nvar SINGLE_QUOTE$1 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$1 = '\"'.charCodeAt(0);\nvar BACKSLASH$1 = \"\\\\\".charCodeAt(0);\nvar SLASH$1 = \"/\".charCodeAt(0);\nvar NEWLINE$1 = \"\\n\".charCodeAt(0);\nvar SPACE$1 = \" \".charCodeAt(0);\nvar FEED$1 = \"\\f\".charCodeAt(0);\nvar TAB$1 = \"\t\".charCodeAt(0);\nvar CR$1 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$1 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$1 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$1 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$1 = \")\".charCodeAt(0);\nvar OPEN_CURLY$1 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$1 = \"}\".charCodeAt(0);\nvar SEMICOLON$1 = \";\".charCodeAt(0);\nvar ASTERISK$1 = \"*\".charCodeAt(0);\nvar COLON$1 = \":\".charCodeAt(0);\nvar AT$1 = \"@\".charCodeAt(0);\nvar RE_AT_END$1 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$1 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$1 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$1 = /[\\da-f]/i;\nvar tokenize$1 = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$1:\n case SPACE$1:\n case TAB$1:\n case CR$1:\n case FEED$1:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$1 || code === NEWLINE$1 || code === TAB$1 || code === CR$1 || code === FEED$1);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$1:\n case CLOSE_SQUARE$1:\n case OPEN_CURLY$1:\n case CLOSE_CURLY$1:\n case COLON$1:\n case SEMICOLON$1:\n case CLOSE_PARENTHESES$1:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$1:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$1 && n2 !== DOUBLE_QUOTE$1 && n2 !== SPACE$1 && n2 !== NEWLINE$1 && n2 !== TAB$1 && n2 !== FEED$1 && n2 !== CR$1) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$1.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$1:\n case DOUBLE_QUOTE$1:\n {\n quote = code === SINGLE_QUOTE$1 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$1:\n {\n RE_AT_END$1.lastIndex = pos + 1;\n RE_AT_END$1.test(css);\n if (RE_AT_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$1.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$1:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$1){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$1 && code !== SPACE$1 && code !== NEWLINE$1 && code !== TAB$1 && code !== CR$1 && code !== FEED$1) {\n next += 1;\n if (RE_HEX_ESCAPE$1.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$1.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$1) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$1 && css.charCodeAt(pos + 1) === ASTERISK$1) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$1.lastIndex = pos + 1;\n RE_WORD_END$1.test(css);\n if (RE_WORD_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$1.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$1 = container$1;\nvar AtRule$3$1 = /*#__PURE__*/ function(Container$5$1) {\n _inherits(AtRule, Container$5$1);\n function AtRule(defaults) {\n var _this;\n _this = Container$5$1.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_append = Container$5$1.prototype.append).call.apply(_Container$5$1_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_prepend = Container$5$1.prototype.prepend).call.apply(_Container$5$1_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5$1);\nvar atRule$1 = AtRule$3$1;\nAtRule$3$1.default = AtRule$3$1;\nContainer$5$1.registerAtRule(AtRule$3$1);\nvar Container$4$1 = container$1;\nvar LazyResult$3$1, Processor$2$1;\nvar Root$5$1 = /*#__PURE__*/ function(Container$4$1) {\n _inherits(Root, Container$4$1);\n function Root(defaults) {\n var _this;\n _this = Container$4$1.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$1.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$1.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$1(new Processor$2$1(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4$1);\nRoot$5$1.registerLazyResult = function(dependant) {\n LazyResult$3$1 = dependant;\n};\nRoot$5$1.registerProcessor = function(dependant) {\n Processor$2$1 = dependant;\n};\nvar root$1 = Root$5$1;\nRoot$5$1.default = Root$5$1;\nContainer$4$1.registerRoot(Root$5$1);\nvar list$2$1 = {\n comma: function comma(string) {\n return list$2$1.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$1.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$1 = list$2$1;\nlist$2$1.default = list$2$1;\nvar Container$3$1 = container$1;\nvar list$1$1 = list_1$1;\nvar Rule$3$1 = /*#__PURE__*/ function(Container$3$1) {\n _inherits(Rule, Container$3$1);\n function Rule(defaults) {\n var _this;\n _this = Container$3$1.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3$1);\nvar rule$1 = Rule$3$1;\nRule$3$1.default = Rule$3$1;\nContainer$3$1.registerRule(Rule$3$1);\nvar Declaration$2$1 = declaration$1;\nvar tokenizer2$1 = tokenize$1;\nvar Comment$2$1 = comment$1;\nvar AtRule$2$1 = atRule$1;\nvar Root$4$1 = root$1;\nvar Rule$2$1 = rule$1;\nvar SAFE_COMMENT_NEIGHBOR$1 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$1(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4$1();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$1();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$1();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2$1(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$1();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$1(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$1();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$1[prev] && !SAFE_COMMENT_NEIGHBOR$1[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$1();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser$1 = Parser$1$1;\nvar Container$2$1 = container$1;\nvar Parser2$1 = parser$1;\nvar Input$2$1 = input$1;\nfunction parse$3$1(css, opts) {\n var input2 = new Input$2$1(css, opts);\n var parser2 = new Parser2$1(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$1 = parse$3$1;\nparse$3$1.default = parse$3$1;\nContainer$2$1.registerParse(parse$3$1);\nvar isClean$3 = symbols$1.isClean, my$3 = symbols$1.my;\nvar MapGenerator$1$1 = mapGenerator$1;\nvar stringify$2$1 = stringify_1$1;\nvar Container$1$1 = container$1;\nvar Document$2$1 = document$1$1;\nvar warnOnce$1$1 = warnOnce$2$1;\nvar Result$2$1 = result$1;\nvar parse$2$1 = parse_1$1;\nvar Root$3$1 = root$1;\nvar TYPE_TO_CLASS_NAME$1 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$1 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$1 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$1 = 0;\nfunction isPromise$1(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$1(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$1[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$1,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$1,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$1(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$1,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$1,\n \"RootExit\"\n ];\n } else {\n events = getEvents$1(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$1(node2) {\n node2[isClean$3] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$1(i2);\n });\n return node2;\n}\nvar postcss$2$1 = {};\nvar LazyResult$2$1 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$1(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2$1)) {\n root2 = cleanMarks$1(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$1;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$3]) {\n Container$1$1.rebuild(root2);\n }\n }\n this.result = new Result$2$1(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$1, {\n postcss: postcss$2$1,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$1[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$1[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$1(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$3]) return [\n 3,\n 14\n ];\n root2[isClean$3] = true;\n stack = [\n toStack$1(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$1(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$1(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$1;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$3]){\n root2[isClean$3] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$3]) {\n child[isClean$3] = true;\n stack.push(toStack$1(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$1) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$3] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$3] = true;\n var events = getEvents$1(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$1) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$3]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2$1.registerPostcss = function(dependant) {\n postcss$2$1 = dependant;\n};\nvar lazyResult$1 = LazyResult$2$1;\nLazyResult$2$1.default = LazyResult$2$1;\nRoot$3$1.registerLazyResult(LazyResult$2$1);\nDocument$2$1.registerLazyResult(LazyResult$2$1);\nvar MapGenerator2$1 = mapGenerator$1;\nvar stringify$1$1 = stringify_1$1;\nvar warnOnce2$1 = warnOnce$2$1;\nvar parse$1$1 = parse_1$1;\nvar Result$1$1 = result$1;\nvar NoWorkResult$1$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$1;\n this.result = new Result$1$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2$1(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult$1 = NoWorkResult$1$1;\nNoWorkResult$1$1.default = NoWorkResult$1$1;\nvar NoWorkResult2$1 = noWorkResult$1;\nvar LazyResult$1$1 = lazyResult$1;\nvar Document$1$1 = document$1$1;\nvar Root$2$1 = root$1;\nvar Processor$1$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2$1(this, css, opts);\n } else {\n return new LazyResult$1$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor$1 = Processor$1$1;\nProcessor$1$1.default = Processor$1$1;\nRoot$2$1.registerProcessor(Processor$1$1);\nDocument$1$1.registerProcessor(Processor$1$1);\nvar Declaration$1$1 = declaration$1;\nvar PreviousMap2$1 = previousMap$1;\nvar Comment$1$1 = comment$1;\nvar AtRule$1$1 = atRule$1;\nvar Input$1$1 = input$1;\nvar Root$1$1 = root$1;\nvar Rule$1$1 = rule$1;\nfunction fromJSON$1$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$1(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2$1.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$1(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$1 = fromJSON$1$1;\nfromJSON$1$1.default = fromJSON$1$1;\nvar CssSyntaxError2$1 = cssSyntaxError$1;\nvar Declaration2$1 = declaration$1;\nvar LazyResult2$1 = lazyResult$1;\nvar Container2$1 = container$1;\nvar Processor2$1 = processor$1;\nvar stringify$5$1 = stringify_1$1;\nvar fromJSON$2 = fromJSON_1$1;\nvar Document22 = document$1$1;\nvar Warning2$1 = warning$1;\nvar Comment2$1 = comment$1;\nvar AtRule2$1 = atRule$1;\nvar Result2$1 = result$1;\nvar Input2$1 = input$1;\nvar parse$5 = parse_1$1;\nvar list$3 = list_1$1;\nvar Rule2$1 = rule$1;\nvar Root2$1 = root$1;\nvar Node2$1 = node$1;\nfunction postcss$3() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2$1(plugins);\n}\npostcss$3.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2$1().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$3([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$3.stringify = stringify$5$1;\npostcss$3.parse = parse$5;\npostcss$3.fromJSON = fromJSON$2;\npostcss$3.list = list$3;\npostcss$3.comment = function(defaults) {\n return new Comment2$1(defaults);\n};\npostcss$3.atRule = function(defaults) {\n return new AtRule2$1(defaults);\n};\npostcss$3.decl = function(defaults) {\n return new Declaration2$1(defaults);\n};\npostcss$3.rule = function(defaults) {\n return new Rule2$1(defaults);\n};\npostcss$3.root = function(defaults) {\n return new Root2$1(defaults);\n};\npostcss$3.document = function(defaults) {\n return new Document22(defaults);\n};\npostcss$3.CssSyntaxError = CssSyntaxError2$1;\npostcss$3.Declaration = Declaration2$1;\npostcss$3.Container = Container2$1;\npostcss$3.Processor = Processor2$1;\npostcss$3.Document = Document22;\npostcss$3.Comment = Comment2$1;\npostcss$3.Warning = Warning2$1;\npostcss$3.AtRule = AtRule2$1;\npostcss$3.Result = Result2$1;\npostcss$3.Input = Input2$1;\npostcss$3.Rule = Rule2$1;\npostcss$3.Root = Root2$1;\npostcss$3.Node = Node2$1;\nLazyResult2$1.registerPostcss(postcss$3);\nvar postcss_1$1 = postcss$3;\npostcss$3.default = postcss$3;\nvar postcss$1$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(postcss_1$1);\npostcss$1$1.stringify;\npostcss$1$1.fromJSON;\npostcss$1$1.plugin;\npostcss$1$1.parse;\npostcss$1$1.list;\npostcss$1$1.document;\npostcss$1$1.comment;\npostcss$1$1.atRule;\npostcss$1$1.rule;\npostcss$1$1.decl;\npostcss$1$1.root;\npostcss$1$1.CssSyntaxError;\npostcss$1$1.Declaration;\npostcss$1$1.Container;\npostcss$1$1.Processor;\npostcss$1$1.Document;\npostcss$1$1.Comment;\npostcss$1$1.Warning;\npostcss$1$1.AtRule;\npostcss$1$1.Result;\npostcss$1$1.Input;\npostcss$1$1.Rule;\npostcss$1$1.Root;\npostcss$1$1.Node;\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = function(obj, key, value) {\n return key in obj ? __defProp2(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField2 = function(obj, key, value) {\n return __defNormalProp2(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction getDefaultExportFromCjs$2(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$2(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$2 = {\n exports: {}\n};\nvar x$2 = String;\nvar create$2 = function create$2() {\n return {\n isColorSupported: false,\n reset: x$2,\n bold: x$2,\n dim: x$2,\n italic: x$2,\n underline: x$2,\n inverse: x$2,\n hidden: x$2,\n strikethrough: x$2,\n black: x$2,\n red: x$2,\n green: x$2,\n yellow: x$2,\n blue: x$2,\n magenta: x$2,\n cyan: x$2,\n white: x$2,\n gray: x$2,\n bgBlack: x$2,\n bgRed: x$2,\n bgGreen: x$2,\n bgYellow: x$2,\n bgBlue: x$2,\n bgMagenta: x$2,\n bgCyan: x$2,\n bgWhite: x$2\n };\n};\npicocolors_browser$2.exports = create$2();\npicocolors_browser$2.exports.createColors = create$2;\nvar picocolors_browserExports$2 = picocolors_browser$2.exports;\nvar __viteBrowserExternal$3 = {};\nvar __viteBrowserExternal$1$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$3\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$2 = /* @__PURE__ */ getAugmentedNamespace$2(__viteBrowserExternal$1$2);\nvar pico$2 = picocolors_browserExports$2;\nvar terminalHighlight$1$2 = require$$2$2;\nvar CssSyntaxError$3$2 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError2, Error1);\n function CssSyntaxError2(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError2);\n }\n return _this;\n }\n var _proto = CssSyntaxError2.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$2.isColorSupported;\n if (terminalHighlight$1$2) {\n if (color) css = terminalHighlight$1$2(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$2_createColors = pico$2.createColors(true), bold = _pico$2_createColors.bold, gray = _pico$2_createColors.gray, red = _pico$2_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError2;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$2 = CssSyntaxError$3$2;\nCssSyntaxError$3$2.default = CssSyntaxError$3$2;\nvar symbols$2 = {};\nsymbols$2.isClean = Symbol(\"isClean\");\nsymbols$2.my = Symbol(\"my\");\nvar DEFAULT_RAW$2 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$2(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$2 = /*#__PURE__*/ function() {\n function Stringifier2(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier2.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$2[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$2(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$2[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier2;\n}();\nvar stringifier$2 = Stringifier$2$2;\nStringifier$2$2.default = Stringifier$2$2;\nvar Stringifier$1$2 = stringifier$2;\nfunction stringify$4$2(node2, builder) {\n var str = new Stringifier$1$2(builder);\n str.stringify(node2);\n}\nvar stringify_1$2 = stringify$4$2;\nstringify$4$2.default = stringify$4$2;\nvar isClean$2$2 = symbols$2.isClean, my$2$2 = symbols$2.my;\nvar CssSyntaxError$2$2 = cssSyntaxError$2;\nvar Stringifier22 = stringifier$2;\nvar stringify$3$2 = stringify_1$2;\nfunction cloneNode$2(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$2(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$2(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$2 = /*#__PURE__*/ function() {\n function Node3(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$2] = false;\n this[my$2$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node3.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$2(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$2]) {\n this[isClean$2$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier22();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$2;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node3, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node3;\n}();\nvar node$2 = Node$4$2;\nNode$4$2.default = Node$4$2;\nvar Node$3$2 = node$2;\nvar Declaration$4$2 = /*#__PURE__*/ function(Node$3$2) {\n _inherits(Declaration2, Node$3$2);\n function Declaration2(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$2.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration2, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration2;\n}(Node$3$2);\nvar declaration$2 = Declaration$4$2;\nDeclaration$4$2.default = Declaration$4$2;\nvar urlAlphabet$2 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$2 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$2[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$2 = {\n nanoid: nanoid$1$2\n};\nvar SourceMapConsumer$2$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$2$2 = require$$2$2.SourceMapGenerator;\nvar existsSync$2 = require$$2$2.existsSync, readFileSync$2 = require$$2$2.readFileSync;\nvar dirname$1$2 = require$$2$2.dirname, join$2 = require$$2$2.join;\nfunction fromBase64$2(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$2 = /*#__PURE__*/ function() {\n function PreviousMap2(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$2(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap2.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$2(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$2(path);\n if (existsSync$2(path)) {\n this.mapFile = path;\n return readFileSync$2(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$2)) {\n return SourceMapGenerator$2$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$2(dirname$1$2(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap2;\n}();\nvar previousMap$2 = PreviousMap$2$2;\nPreviousMap$2$2.default = PreviousMap$2$2;\nvar SourceMapConsumer$1$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$1$2 = require$$2$2.SourceMapGenerator;\nvar fileURLToPath$2 = require$$2$2.fileURLToPath, pathToFileURL$1$2 = require$$2$2.pathToFileURL;\nvar isAbsolute$2 = require$$2$2.isAbsolute, resolve$1$2 = require$$2$2.resolve;\nvar nanoid$3 = nonSecure$2.nanoid;\nvar terminalHighlight$3 = require$$2$2;\nvar CssSyntaxError$1$2 = cssSyntaxError$2;\nvar PreviousMap$1$2 = previousMap$2;\nvar fromOffsetCache$2 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$2 = Boolean(SourceMapConsumer$1$2 && SourceMapGenerator$1$2);\nvar pathAvailable$1$2 = Boolean(resolve$1$2 && isAbsolute$2);\nvar Input$4$2 = /*#__PURE__*/ function() {\n function Input2(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$2 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$2(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$2(opts.from);\n }\n }\n if (pathAvailable$1$2 && sourceMapAvailable$1$2) {\n var map = new PreviousMap$1$2(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input2.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$2(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$2(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$2) {\n result2.input.url = pathToFileURL$1$2(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$2]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$2] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$2];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$2(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$2(from.source)) {\n fromUrl = pathToFileURL$1$2(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$2(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$2) {\n result2.file = fileURLToPath$2(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input2, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input2;\n}();\nvar input$2 = Input$4$2;\nInput$4$2.default = Input$4$2;\nif (terminalHighlight$3 && terminalHighlight$3.registerInput) {\n terminalHighlight$3.registerInput(Input$4$2);\n}\nvar SourceMapConsumer$4 = require$$2$2.SourceMapConsumer, SourceMapGenerator$4 = require$$2$2.SourceMapGenerator;\nvar dirname$3 = require$$2$2.dirname, relative$2 = require$$2$2.relative, resolve$3 = require$$2$2.resolve, sep$2 = require$$2$2.sep;\nvar pathToFileURL$3 = require$$2$2.pathToFileURL;\nvar Input$3$2 = input$2;\nvar sourceMapAvailable$3 = Boolean(SourceMapConsumer$4 && SourceMapGenerator$4);\nvar pathAvailable$3 = Boolean(dirname$3 && resolve$3 && relative$2 && sep$2);\nvar MapGenerator$2$2 = /*#__PURE__*/ function() {\n function MapGenerator2(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator2.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$3(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$4(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$3 && sourceMapAvailable$3 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$4.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$3(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$3(resolve$3(from, this.mapOpts.annotation));\n }\n var path = relative$2(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$2(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$3) {\n var fileURL = pathToFileURL$3(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$2 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator2;\n}();\nvar mapGenerator$2 = MapGenerator$2$2;\nvar Node$2$2 = node$2;\nvar Comment$4$2 = /*#__PURE__*/ function(Node$2$2) {\n _inherits(Comment2, Node$2$2);\n function Comment2(defaults) {\n var _this;\n _this = Node$2$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment2;\n}(Node$2$2);\nvar comment$2 = Comment$4$2;\nComment$4$2.default = Comment$4$2;\nvar isClean$1$2 = symbols$2.isClean, my$1$2 = symbols$2.my;\nvar Declaration$3$2 = declaration$2;\nvar Comment$3$2 = comment$2;\nvar Node$1$2 = node$2;\nvar parse$4$2, Rule$4$2, AtRule$4$2, Root$6$2;\nfunction cleanSource$2(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$2(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$2(node2) {\n node2[isClean$1$2] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$2(i2);\n }\n }\n}\nvar Container$7$2 = /*#__PURE__*/ function(Node$1$2) {\n _inherits(Container2, Node$1$2);\n function Container2() {\n return Node$1$2.apply(this, arguments) || this;\n }\n var _proto = Container2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$2.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$2(parse$4$2(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$2(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$2(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$2(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$2(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$2]) Container2.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$2]) markDirtyUp$2(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container2, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container2;\n}(Node$1$2);\nContainer$7$2.registerParse = function(dependant) {\n parse$4$2 = dependant;\n};\nContainer$7$2.registerRule = function(dependant) {\n Rule$4$2 = dependant;\n};\nContainer$7$2.registerAtRule = function(dependant) {\n AtRule$4$2 = dependant;\n};\nContainer$7$2.registerRoot = function(dependant) {\n Root$6$2 = dependant;\n};\nvar container$2 = Container$7$2;\nContainer$7$2.default = Container$7$2;\nContainer$7$2.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$2.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$2.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$2.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$2.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$2.prototype);\n }\n node2[my$1$2] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$2.rebuild(child);\n });\n }\n};\nvar Container$6$2 = container$2;\nvar LazyResult$4$2, Processor$3$2;\nvar Document$3$2 = /*#__PURE__*/ function(Container$6$2) {\n _inherits(Document23, Container$6$2);\n function Document23(defaults) {\n var _this;\n _this = Container$6$2.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document23.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$2(new Processor$3$2(), this, opts);\n return lazy.stringify();\n };\n return Document23;\n}(Container$6$2);\nDocument$3$2.registerLazyResult = function(dependant) {\n LazyResult$4$2 = dependant;\n};\nDocument$3$2.registerProcessor = function(dependant) {\n Processor$3$2 = dependant;\n};\nvar document$1$2 = Document$3$2;\nDocument$3$2.default = Document$3$2;\nvar printed$2 = {};\nvar warnOnce$2$2 = function warnOnce2(message) {\n if (printed$2[message]) return;\n printed$2[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$2 = /*#__PURE__*/ function() {\n function Warning2(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning2.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning2;\n}();\nvar warning$2 = Warning$2$2;\nWarning$2$2.default = Warning$2$2;\nvar Warning$1$2 = warning$2;\nvar Result$3$2 = /*#__PURE__*/ function() {\n function Result2(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result2.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$2(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result2, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result2;\n}();\nvar result$2 = Result$3$2;\nResult$3$2.default = Result$3$2;\nvar SINGLE_QUOTE$2 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$2 = '\"'.charCodeAt(0);\nvar BACKSLASH$2 = \"\\\\\".charCodeAt(0);\nvar SLASH$2 = \"/\".charCodeAt(0);\nvar NEWLINE$2 = \"\\n\".charCodeAt(0);\nvar SPACE$2 = \" \".charCodeAt(0);\nvar FEED$2 = \"\\f\".charCodeAt(0);\nvar TAB$2 = \"\t\".charCodeAt(0);\nvar CR$2 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$2 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$2 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$2 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$2 = \")\".charCodeAt(0);\nvar OPEN_CURLY$2 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$2 = \"}\".charCodeAt(0);\nvar SEMICOLON$2 = \";\".charCodeAt(0);\nvar ASTERISK$2 = \"*\".charCodeAt(0);\nvar COLON$2 = \":\".charCodeAt(0);\nvar AT$2 = \"@\".charCodeAt(0);\nvar RE_AT_END$2 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$2 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$2 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$2 = /[\\da-f]/i;\nvar tokenize$2 = function tokenizer2(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$2:\n case SPACE$2:\n case TAB$2:\n case CR$2:\n case FEED$2:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$2 || code === NEWLINE$2 || code === TAB$2 || code === CR$2 || code === FEED$2);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$2:\n case CLOSE_SQUARE$2:\n case OPEN_CURLY$2:\n case CLOSE_CURLY$2:\n case COLON$2:\n case SEMICOLON$2:\n case CLOSE_PARENTHESES$2:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$2:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$2 && n2 !== DOUBLE_QUOTE$2 && n2 !== SPACE$2 && n2 !== NEWLINE$2 && n2 !== TAB$2 && n2 !== FEED$2 && n2 !== CR$2) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$2.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$2:\n case DOUBLE_QUOTE$2:\n {\n quote = code === SINGLE_QUOTE$2 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$2:\n {\n RE_AT_END$2.lastIndex = pos + 1;\n RE_AT_END$2.test(css);\n if (RE_AT_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$2.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$2:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$2){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$2 && code !== SPACE$2 && code !== NEWLINE$2 && code !== TAB$2 && code !== CR$2 && code !== FEED$2) {\n next += 1;\n if (RE_HEX_ESCAPE$2.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$2.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$2) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$2 && css.charCodeAt(pos + 1) === ASTERISK$2) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$2.lastIndex = pos + 1;\n RE_WORD_END$2.test(css);\n if (RE_WORD_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$2.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$2 = container$2;\nvar AtRule$3$2 = /*#__PURE__*/ function(Container$5$2) {\n _inherits(AtRule2, Container$5$2);\n function AtRule2(defaults) {\n var _this;\n _this = Container$5$2.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_append = Container$5$2.prototype.append).call.apply(_Container$5$2_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_prepend = Container$5$2.prototype.prepend).call.apply(_Container$5$2_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule2;\n}(Container$5$2);\nvar atRule$2 = AtRule$3$2;\nAtRule$3$2.default = AtRule$3$2;\nContainer$5$2.registerAtRule(AtRule$3$2);\nvar Container$4$2 = container$2;\nvar LazyResult$3$2, Processor$2$2;\nvar Root$5$2 = /*#__PURE__*/ function(Container$4$2) {\n _inherits(Root2, Container$4$2);\n function Root2(defaults) {\n var _this;\n _this = Container$4$2.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root2.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$2.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$2.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$2(new Processor$2$2(), this, opts);\n return lazy.stringify();\n };\n return Root2;\n}(Container$4$2);\nRoot$5$2.registerLazyResult = function(dependant) {\n LazyResult$3$2 = dependant;\n};\nRoot$5$2.registerProcessor = function(dependant) {\n Processor$2$2 = dependant;\n};\nvar root$2 = Root$5$2;\nRoot$5$2.default = Root$5$2;\nContainer$4$2.registerRoot(Root$5$2);\nvar list$2$2 = {\n comma: function comma(string) {\n return list$2$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$2 = list$2$2;\nlist$2$2.default = list$2$2;\nvar Container$3$2 = container$2;\nvar list$1$2 = list_1$2;\nvar Rule$3$2 = /*#__PURE__*/ function(Container$3$2) {\n _inherits(Rule2, Container$3$2);\n function Rule2(defaults) {\n var _this;\n _this = Container$3$2.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule2, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$2.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule2;\n}(Container$3$2);\nvar rule$2 = Rule$3$2;\nRule$3$2.default = Rule$3$2;\nContainer$3$2.registerRule(Rule$3$2);\nvar Declaration$2$2 = declaration$2;\nvar tokenizer22 = tokenize$2;\nvar Comment$2$2 = comment$2;\nvar AtRule$2$2 = atRule$2;\nvar Root$4$2 = root$2;\nvar Rule$2$2 = rule$2;\nvar SAFE_COMMENT_NEIGHBOR$2 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$2(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$2 = /*#__PURE__*/ function() {\n function Parser2(input2) {\n this.input = input2;\n this.root = new Root$4$2();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser2.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer22(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$2(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$2[prev] && !SAFE_COMMENT_NEIGHBOR$2[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser2;\n}();\nvar parser$2 = Parser$1$2;\nvar Container$2$2 = container$2;\nvar Parser22 = parser$2;\nvar Input$2$2 = input$2;\nfunction parse$3$2(css, opts) {\n var input2 = new Input$2$2(css, opts);\n var parser2 = new Parser22(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$2 = parse$3$2;\nparse$3$2.default = parse$3$2;\nContainer$2$2.registerParse(parse$3$2);\nvar isClean$4 = symbols$2.isClean, my$4 = symbols$2.my;\nvar MapGenerator$1$2 = mapGenerator$2;\nvar stringify$2$2 = stringify_1$2;\nvar Container$1$2 = container$2;\nvar Document$2$2 = document$1$2;\nvar warnOnce$1$2 = warnOnce$2$2;\nvar Result$2$2 = result$2;\nvar parse$2$2 = parse_1$2;\nvar Root$3$2 = root$2;\nvar TYPE_TO_CLASS_NAME$2 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$2 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$2 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$2 = 0;\nfunction isPromise$2(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$2(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$2[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$2,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$2,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$2(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$2,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$2,\n \"RootExit\"\n ];\n } else {\n events = getEvents$2(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$2(node2) {\n node2[isClean$4] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$2(i2);\n });\n return node2;\n}\nvar postcss$2$2 = {};\nvar LazyResult$2$2 = /*#__PURE__*/ function() {\n function LazyResult2(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$2(css);\n } else if (_instanceof(css, LazyResult2) || _instanceof(css, Result$2$2)) {\n root2 = cleanMarks$2(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$4]) {\n Container$1$2.rebuild(root2);\n }\n }\n this.result = new Result$2$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$2, {\n postcss: postcss$2$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$2[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$2[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$2(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$4]) return [\n 3,\n 14\n ];\n root2[isClean$4] = true;\n stack = [\n toStack$2(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$2(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$2(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$2(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$4]){\n root2[isClean$4] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$4]) {\n child[isClean$4] = true;\n stack.push(toStack$2(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$2) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$4] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$4] = true;\n var events = getEvents$2(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$2) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$4]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult2;\n}();\nLazyResult$2$2.registerPostcss = function(dependant) {\n postcss$2$2 = dependant;\n};\nvar lazyResult$2 = LazyResult$2$2;\nLazyResult$2$2.default = LazyResult$2$2;\nRoot$3$2.registerLazyResult(LazyResult$2$2);\nDocument$2$2.registerLazyResult(LazyResult$2$2);\nvar MapGenerator22 = mapGenerator$2;\nvar stringify$1$2 = stringify_1$2;\nvar warnOnce22 = warnOnce$2$2;\nvar parse$1$2 = parse_1$2;\nvar Result$1$2 = result$2;\nvar NoWorkResult$1$2 = /*#__PURE__*/ function() {\n function NoWorkResult2(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$2;\n this.result = new Result$1$2(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator22(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce22(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$2;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult2;\n}();\nvar noWorkResult$2 = NoWorkResult$1$2;\nNoWorkResult$1$2.default = NoWorkResult$1$2;\nvar NoWorkResult22 = noWorkResult$2;\nvar LazyResult$1$2 = lazyResult$2;\nvar Document$1$2 = document$1$2;\nvar Root$2$2 = root$2;\nvar Processor$1$2 = /*#__PURE__*/ function() {\n function Processor2(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor2.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult22(this, css, opts);\n } else {\n return new LazyResult$1$2(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor2;\n}();\nvar processor$2 = Processor$1$2;\nProcessor$1$2.default = Processor$1$2;\nRoot$2$2.registerProcessor(Processor$1$2);\nDocument$1$2.registerProcessor(Processor$1$2);\nvar Declaration$1$2 = declaration$2;\nvar PreviousMap22 = previousMap$2;\nvar Comment$1$2 = comment$2;\nvar AtRule$1$2 = atRule$2;\nvar Input$1$2 = input$2;\nvar Root$1$2 = root$2;\nvar Rule$1$2 = rule$2;\nfunction fromJSON$1$2(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$2(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$2.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap22.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$2(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$2(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$2(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$2(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$2(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$2(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$2 = fromJSON$1$2;\nfromJSON$1$2.default = fromJSON$1$2;\nvar CssSyntaxError22 = cssSyntaxError$2;\nvar Declaration22 = declaration$2;\nvar LazyResult22 = lazyResult$2;\nvar Container22 = container$2;\nvar Processor22 = processor$2;\nvar stringify$6 = stringify_1$2;\nvar fromJSON$3 = fromJSON_1$2;\nvar Document222 = document$1$2;\nvar Warning22 = warning$2;\nvar Comment22 = comment$2;\nvar AtRule22 = atRule$2;\nvar Result22 = result$2;\nvar Input22 = input$2;\nvar parse$6 = parse_1$2;\nvar list$4 = list_1$2;\nvar Rule22 = rule$2;\nvar Root22 = root$2;\nvar Node22 = node$2;\nfunction postcss$4() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor22(plugins);\n}\npostcss$4.plugin = function plugin2(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor22().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$4([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$4.stringify = stringify$6;\npostcss$4.parse = parse$6;\npostcss$4.fromJSON = fromJSON$3;\npostcss$4.list = list$4;\npostcss$4.comment = function(defaults) {\n return new Comment22(defaults);\n};\npostcss$4.atRule = function(defaults) {\n return new AtRule22(defaults);\n};\npostcss$4.decl = function(defaults) {\n return new Declaration22(defaults);\n};\npostcss$4.rule = function(defaults) {\n return new Rule22(defaults);\n};\npostcss$4.root = function(defaults) {\n return new Root22(defaults);\n};\npostcss$4.document = function(defaults) {\n return new Document222(defaults);\n};\npostcss$4.CssSyntaxError = CssSyntaxError22;\npostcss$4.Declaration = Declaration22;\npostcss$4.Container = Container22;\npostcss$4.Processor = Processor22;\npostcss$4.Document = Document222;\npostcss$4.Comment = Comment22;\npostcss$4.Warning = Warning22;\npostcss$4.AtRule = AtRule22;\npostcss$4.Result = Result22;\npostcss$4.Input = Input22;\npostcss$4.Rule = Rule22;\npostcss$4.Root = Root22;\npostcss$4.Node = Node22;\nLazyResult22.registerPostcss(postcss$4);\nvar postcss_1$2 = postcss$4;\npostcss$4.default = postcss$4;\nvar postcss$1$2 = /* @__PURE__ */ getDefaultExportFromCjs$2(postcss_1$2);\npostcss$1$2.stringify;\npostcss$1$2.fromJSON;\npostcss$1$2.plugin;\npostcss$1$2.parse;\npostcss$1$2.list;\npostcss$1$2.document;\npostcss$1$2.comment;\npostcss$1$2.atRule;\npostcss$1$2.rule;\npostcss$1$2.decl;\npostcss$1$2.root;\npostcss$1$2.CssSyntaxError;\npostcss$1$2.Declaration;\npostcss$1$2.Container;\npostcss$1$2.Processor;\npostcss$1$2.Document;\npostcss$1$2.Comment;\npostcss$1$2.Warning;\npostcss$1$2.AtRule;\npostcss$1$2.Result;\npostcss$1$2.Input;\npostcss$1$2.Rule;\npostcss$1$2.Root;\npostcss$1$2.Node;\nvar BaseRRNode = /*#__PURE__*/ function() {\n function BaseRRNode() {\n for(var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++){\n _args[_key] = arguments[_key];\n }\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n var _proto = BaseRRNode.prototype;\n _proto.contains = function contains(node2) {\n if (!_instanceof(node2, BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while(node2.parentNode){\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.appendChild = function appendChild(_newChild) {\n throw new Error(\"RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.insertBefore = function insertBefore(_newChild, _refChild) {\n throw new Error(\"RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.removeChild = function removeChild(_node) {\n throw new Error(\"RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n _proto.toString = function toString() {\n return \"RRNode\";\n };\n _create_class(BaseRRNode, [\n {\n key: \"childNodes\",\n get: function get() {\n var childNodes2 = [];\n var childIterator = this.firstChild;\n while(childIterator){\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n }\n ]);\n return BaseRRNode;\n}();\nvar testableAccessors$2 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$2 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$2 = {};\nvar isAngularZonePresent$2 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$2(key) {\n if (untaintedBasePrototype$2[key]) return untaintedBasePrototype$2[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$2 ? testableAccessors$2[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$2 ? testableMethods$2[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$2()) {\n untaintedBasePrototype$2[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$2[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$2 = {};\nfunction getUntaintedAccessor$2(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$2[cacheKey]) return untaintedAccessorCache$2[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$2[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$2 = {};\nfunction getUntaintedMethod$2(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$2[cacheKey]) return untaintedMethodCache$2[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$2[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"textContent\");\n}\nfunction contains$2(n2, other) {\n return getUntaintedMethod$2(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$2(n2) {\n return getUntaintedMethod$2(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$2(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$2(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$2(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$2(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$2(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$2() {\n return getUntaintedPrototype$2(\"MutationObserver\").constructor;\n}\nfunction patch$2(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$2 = {\n childNodes: childNodes$2,\n parentNode: parentNode$2,\n parentElement: parentElement$2,\n textContent: textContent$2,\n contains: contains$2,\n getRootNode: getRootNode$2,\n host: host$2,\n styleSheets: styleSheets$2,\n shadowRoot: shadowRoot$2,\n querySelector: querySelector$2,\n querySelectorAll: querySelectorAll$2,\n mutationObserver: mutationObserverCtor$2,\n patch: patch$2\n};\nfunction on(type, fn, target) {\n if (target === void 0) target = document;\n var options = {\n capture: true,\n passive: true\n };\n target.addEventListener(type, fn, options);\n return function() {\n return target.removeEventListener(type, fn, options);\n };\n}\nvar DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nvar _mirror = {\n map: {},\n getId: function getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode: function getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap: function removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has: function has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset: function reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get: function get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options) {\n if (options === void 0) options = {};\n var timeout = null;\n var previous = 0;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n var context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(function() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win) {\n if (win === void 0) win = window;\n var original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked ? d : {\n set: function set(value) {\n var _this = this;\n setTimeout(function() {\n d.set.call(_this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n });\n return function() {\n return hookSetter(target, key, original || {}, true);\n };\n}\nvar nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = function() {\n return /* @__PURE__ */ new Date().getTime();\n };\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n var doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index$2.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index$2.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n var el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index$2.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n var el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex$1(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {}\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n var id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n var parent = index$2.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win) {\n if (win === void 0) win = window;\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2));\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (_instanceof(n2, BaseRRNode) && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index$2.shadowRoot(n2));\n}\nvar StyleSheetMirror = /*#__PURE__*/ function() {\n function StyleSheetMirror() {\n __publicField$1(this, \"id\", 1);\n __publicField$1(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n var _proto = StyleSheetMirror.prototype;\n _proto.getId = function getId(stylesheet) {\n var _this_styleIDMap_get;\n return (_this_styleIDMap_get = this.styleIDMap.get(stylesheet)) != null ? _this_styleIDMap_get : -1;\n };\n _proto.has = function has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n };\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */ _proto.add = function add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n var newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n };\n _proto.getStyle = function getStyle(id) {\n return this.idStyleMap.get(id) || null;\n };\n _proto.reset = function reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n };\n _proto.generateId = function generateId() {\n return this.id++;\n };\n _proto.remove = function remove(stylesheet) {\n var id = this.styleIDMap.get(stylesheet);\n if (id !== void 0) {\n this.styleIDMap.delete(stylesheet);\n this.idStyleMap.delete(id);\n return true;\n }\n return false;\n };\n return StyleSheetMirror;\n}();\nfunction getShadowHost(n2) {\n var _a2;\n var shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index$2.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index$2.host(index$2.getRootNode(n2))) shadowHost = index$2.host(index$2.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n var rootShadowHost = n2;\n var shadowHost;\n while(shadowHost = getShadowHost(rootShadowHost))rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n var shadowHost = getRootShadowHost(n2);\n return index$2.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n return index$2.contains(doc, n2) || shadowHostInDom(n2);\n}\nvar EventType = /* @__PURE__ */ function(EventType2) {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n}(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ function(IncrementalSource2) {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n}(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ function(MouseInteractions2) {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n}(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ function(PointerTypes2) {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n}(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ function(CanvasContext2) {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n}(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ function(MediaInteractions2) {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n}(MediaInteractions || {});\nvar NodeType = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nvar DoubleLinkedList = /*#__PURE__*/ function() {\n function DoubleLinkedList() {\n __publicField$1(this, \"length\", 0);\n __publicField$1(this, \"head\", null);\n __publicField$1(this, \"tail\", null);\n }\n var _proto = DoubleLinkedList.prototype;\n _proto.get = function get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n var current = this.head;\n for(var index2 = 0; index2 < position; index2++){\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n };\n _proto.addNode = function addNode(n2) {\n var node2 = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node2;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n var current = n2.previousSibling.__ln.next;\n node2.next = current;\n node2.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node2;\n if (current) {\n current.previous = node2;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n var current1 = n2.nextSibling.__ln.previous;\n node2.previous = current1;\n node2.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node2;\n if (current1) {\n current1.next = node2;\n }\n } else {\n if (this.head) {\n this.head.previous = node2;\n }\n node2.next = this.head;\n this.head = node2;\n }\n if (node2.next === null) {\n this.tail = node2;\n }\n this.length++;\n };\n _proto.removeNode = function removeNode(n2) {\n var current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n };\n return DoubleLinkedList;\n}();\nvar moveKey = function(id, parentId) {\n return id + \"@\" + parentId;\n};\nvar MutationBuffer = /*#__PURE__*/ function() {\n function MutationBuffer() {\n var _this = this;\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"texts\", []);\n __publicField$1(this, \"attributes\", []);\n __publicField$1(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"removes\", []);\n __publicField$1(this, \"mapRemoves\", []);\n __publicField$1(this, \"movedMap\", {});\n /**\n * the browser MutationObserver emits multiple mutations after\n * a delay for performance reasons, making tracing added nodes hard\n * in our `processMutations` callback function.\n * For example, if we append an element el_1 into body, and then append\n * another element el_2 into el_1, these two mutations may be passed to the\n * callback function together when the two operations were done.\n * Generally we need to trace child nodes of newly added nodes, but in this\n * case if we count el_2 as el_1's child node in the first mutation record,\n * then we will count el_2 again in the second mutation record which was\n * duplicated.\n * To avoid of duplicate counting added nodes, we use a Set to store\n * added nodes and its child nodes during iterate mutation records. Then\n * collect added nodes from the Set which have no duplicate copy. But\n * this also causes newly added nodes will not be serialized with id ASAP,\n * which means all the id related calculation should be lazy too.\n */ __publicField$1(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"removesSubTreeCache\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"blockClass\");\n __publicField$1(this, \"blockSelector\");\n __publicField$1(this, \"maskTextClass\");\n __publicField$1(this, \"maskTextSelector\");\n __publicField$1(this, \"inlineStylesheet\");\n __publicField$1(this, \"maskInputOptions\");\n __publicField$1(this, \"maskTextFn\");\n __publicField$1(this, \"maskInputFn\");\n __publicField$1(this, \"keepIframeSrcFn\");\n __publicField$1(this, \"recordCanvas\");\n __publicField$1(this, \"inlineImages\");\n __publicField$1(this, \"slimDOMOptions\");\n __publicField$1(this, \"dataURLOptions\");\n __publicField$1(this, \"doc\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"iframeManager\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"shadowDomManager\");\n __publicField$1(this, \"canvasManager\");\n __publicField$1(this, \"processedNodeManager\");\n __publicField$1(this, \"unattachedDoc\");\n __publicField$1(this, \"processMutations\", function(mutations) {\n mutations.forEach(_this.processMutation);\n _this.emit();\n });\n __publicField$1(this, \"emit\", function() {\n if (_this.frozen || _this.locked) {\n return;\n }\n var adds = [];\n var addedIds = /* @__PURE__ */ new Set();\n var addList = new DoubleLinkedList();\n var getNextId = function(n2) {\n var ns = n2;\n var nextId = IGNORED_NODE;\n while(nextId === IGNORED_NODE){\n ns = ns && ns.nextSibling;\n nextId = ns && _this.mirror.getId(ns);\n }\n return nextId;\n };\n var pushAdd = function(n2) {\n var parent = index$2.parentNode(n2);\n if (!parent || !inDom(n2)) {\n return;\n }\n var cssCaptured = false;\n if (n2.nodeType === Node.TEXT_NODE) {\n var parentTag = parent.tagName;\n if (parentTag === \"TEXTAREA\") {\n return;\n } else if (parentTag === \"STYLE\" && _this.addedSet.has(parent)) {\n cssCaptured = true;\n }\n }\n var parentId = isShadowRoot(parent) ? _this.mirror.getId(getShadowHost(n2)) : _this.mirror.getId(parent);\n var nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n var sn = serializeNodeWithId(n2, {\n doc: _this.doc,\n mirror: _this.mirror,\n blockClass: _this.blockClass,\n blockSelector: _this.blockSelector,\n maskTextClass: _this.maskTextClass,\n maskTextSelector: _this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: _this.inlineStylesheet,\n maskInputOptions: _this.maskInputOptions,\n maskTextFn: _this.maskTextFn,\n maskInputFn: _this.maskInputFn,\n slimDOMOptions: _this.slimDOMOptions,\n dataURLOptions: _this.dataURLOptions,\n recordCanvas: _this.recordCanvas,\n inlineImages: _this.inlineImages,\n onSerialize: function(currentN) {\n if (isSerializedIframe(currentN, _this.mirror)) {\n _this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, _this.mirror)) {\n _this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n2)) {\n _this.shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), _this.doc);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n _this.iframeManager.attachIframe(iframe, childSn);\n _this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(link, childSn) {\n _this.stylesheetManager.attachLinkElement(link, childSn);\n },\n cssCaptured: cssCaptured\n });\n if (sn) {\n adds.push({\n parentId: parentId,\n nextId: nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while(_this.mapRemoves.length){\n var removedNode = _this.mapRemoves.shift();\n _this.cleanupRemovedNode(removedNode);\n _this.mirror.removeNodeFromMap(removedNode);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(_this.movedSet), _step; !(_step = _iterator()).done;){\n var n2 = _step.value;\n if (isParentRemoved(_this.removesSubTreeCache, n2, _this.mirror) && !_this.movedSet.has(index$2.parentNode(n2))) {\n continue;\n }\n pushAdd(n2);\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(_this.addedSet), _step1; !(_step1 = _iterator1()).done;){\n var n21 = _step1.value;\n if (!isAncestorInSet(_this.droppedSet, n21) && !isParentRemoved(_this.removesSubTreeCache, n21, _this.mirror)) {\n pushAdd(n21);\n } else if (isAncestorInSet(_this.movedSet, n21)) {\n pushAdd(n21);\n } else {\n _this.droppedSet.add(n21);\n }\n }\n var candidate = null;\n while(addList.length){\n var node2 = null;\n if (candidate) {\n var parentId = _this.mirror.getId(index$2.parentNode(candidate.value));\n var nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node2 = candidate;\n }\n }\n if (!node2) {\n var tailNode = addList.tail;\n while(tailNode){\n var _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n var parentId1 = _this.mirror.getId(index$2.parentNode(_node.value));\n var nextId1 = getNextId(_node.value);\n if (nextId1 === -1) continue;\n else if (parentId1 !== -1) {\n node2 = _node;\n break;\n } else {\n var unhandledNode = _node.value;\n var parent = index$2.parentNode(unhandledNode);\n if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n var shadowHost = index$2.host(parent);\n var parentId2 = _this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node2 = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node2) {\n while(addList.head){\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node2.previous;\n addList.removeNode(node2.value);\n pushAdd(node2.value);\n }\n var payload = {\n texts: _this.texts.map(function(text) {\n var n2 = text.node;\n var parent = index$2.parentNode(n2);\n if (parent && parent.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(parent);\n }\n return {\n id: _this.mirror.getId(n2),\n value: text.value\n };\n }).filter(function(text) {\n return !addedIds.has(text.id);\n }).filter(function(text) {\n return _this.mirror.has(text.id);\n }),\n attributes: _this.attributes.map(function(attribute) {\n var attributes = attribute.attributes;\n if (typeof attributes.style === \"string\") {\n var diffAsStr = JSON.stringify(attribute.styleDiff);\n var unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: _this.mirror.getId(attribute.node),\n attributes: attributes\n };\n }).filter(function(attribute) {\n return !addedIds.has(attribute.id);\n }).filter(function(attribute) {\n return _this.mirror.has(attribute.id);\n }),\n removes: _this.removes,\n adds: adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n _this.texts = [];\n _this.attributes = [];\n _this.attributeMap = /* @__PURE__ */ new WeakMap();\n _this.removes = [];\n _this.addedSet = /* @__PURE__ */ new Set();\n _this.movedSet = /* @__PURE__ */ new Set();\n _this.droppedSet = /* @__PURE__ */ new Set();\n _this.removesSubTreeCache = /* @__PURE__ */ new Set();\n _this.movedMap = {};\n _this.mutationCb(payload);\n });\n __publicField$1(this, \"genTextAreaValueMutation\", function(textarea) {\n var item = _this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(textarea, item);\n }\n var value = Array.from(index$2.childNodes(textarea), function(cn) {\n return index$2.textContent(cn) || \"\";\n }).join(\"\");\n item.attributes.value = maskInputValue({\n element: textarea,\n maskInputOptions: _this.maskInputOptions,\n tagName: textarea.tagName,\n type: getInputType(textarea),\n value: value,\n maskInputFn: _this.maskInputFn\n });\n });\n __publicField$1(this, \"processMutation\", function(m) {\n if (isIgnored(m.target, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n switch(m.type){\n case \"characterData\":\n {\n var value = index$2.textContent(m.target);\n if (!isBlocked(m.target, _this.blockClass, _this.blockSelector, false) && value !== m.oldValue) {\n _this.texts.push({\n value: needMaskingText(m.target, _this.maskTextClass, _this.maskTextSelector, true) && value ? _this.maskTextFn ? _this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\":\n {\n var target = m.target;\n var attributeName = m.attributeName;\n var value1 = m.target.getAttribute(attributeName);\n if (attributeName === \"value\" || attributeName === \"placeholder\") {\n var type = getInputType(target);\n value1 = maskInputValue({\n element: target,\n maskInputOptions: _this.maskInputOptions,\n tagName: target.tagName,\n type: type,\n value: value1,\n maskInputFn: _this.maskInputFn\n });\n }\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || value1 === m.oldValue) {\n return;\n }\n var item = _this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !_this.keepIframeSrcFn(value1)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(_this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value1);\n if (attributeName === \"style\") {\n if (!_this.unattachedDoc) {\n try {\n _this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n _this.unattachedDoc = _this.doc;\n }\n }\n var old = _this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(target.style)), _step; !(_step = _iterator()).done;){\n var pname = _step.value;\n var newValue = target.style.getPropertyValue(pname);\n var newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [\n newValue,\n newPriority\n ];\n }\n } else {\n item._unchangedStyles[pname] = [\n newValue,\n newPriority\n ];\n }\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(old.style)), _step1; !(_step1 = _iterator1()).done;){\n var pname1 = _step1.value;\n if (target.style.getPropertyValue(pname1) === \"\") {\n item.styleDiff[pname1] = false;\n }\n }\n } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n if (target.matches(\"dialog:modal\")) {\n item.attributes[\"rr_open_mode\"] = \"modal\";\n } else {\n item.attributes[\"rr_open_mode\"] = \"non-modal\";\n }\n }\n }\n break;\n }\n case \"childList\":\n {\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, true)) return;\n if (m.target.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach(function(n2) {\n return _this.genAdds(n2, m.target);\n });\n m.removedNodes.forEach(function(n2) {\n var nodeId = _this.mirror.getId(n2);\n var parentId = isShadowRoot(m.target) ? _this.mirror.getId(index$2.host(m.target)) : _this.mirror.getId(m.target);\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || isIgnored(n2, _this.mirror, _this.slimDOMOptions) || !isSerialized(n2, _this.mirror)) {\n return;\n }\n if (_this.addedSet.has(n2)) {\n deepDelete(_this.addedSet, n2);\n _this.droppedSet.add(n2);\n } else if (_this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, _this.mirror)) ;\n else if (_this.movedSet.has(n2) && _this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(_this.movedSet, n2);\n } else {\n _this.removes.push({\n parentId: parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n processRemoves(n2, _this.removesSubTreeCache);\n }\n _this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n /**\n * Make sure you check if `n`'s parent is blocked before calling this function\n * */ __publicField$1(this, \"genAdds\", function(n2, target) {\n if (_this.processedNodeManager.inOtherBuffer(n2, _this)) return;\n if (_this.addedSet.has(n2) || _this.movedSet.has(n2)) return;\n if (_this.mirror.hasNode(n2)) {\n if (isIgnored(n2, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n _this.movedSet.add(n2);\n var targetId = null;\n if (target && _this.mirror.hasNode(target)) {\n targetId = _this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n _this.movedMap[moveKey(_this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n _this.addedSet.add(n2);\n _this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, _this.blockClass, _this.blockSelector, false)) {\n index$2.childNodes(n2).forEach(function(childN) {\n return _this.genAdds(childN);\n });\n if (hasShadowRoot(n2)) {\n index$2.childNodes(index$2.shadowRoot(n2)).forEach(function(childN) {\n _this.processedNodeManager.add(childN, _this);\n _this.genAdds(childN, n2);\n });\n }\n }\n });\n __publicField$1(this, \"cleanupRemovedNode\", function(node2) {\n if (node2.nodeName === \"IFRAME\") {\n try {\n _this.iframeManager.removeIframe(node2);\n } catch (e2) {}\n } else {\n try {\n _this.stylesheetManager.cleanupStylesheetsForRemovedNode(node2);\n } catch (e2) {}\n }\n node2.childNodes.forEach(function(child) {\n _this.cleanupRemovedNode(child);\n });\n });\n }\n var _proto = MutationBuffer.prototype;\n _proto.init = function init(options) {\n var _this = this;\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach(function(key) {\n _this[key] = options[key];\n });\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n };\n _proto.isFrozen = function isFrozen() {\n return this.frozen;\n };\n _proto.lock = function lock() {\n this.locked = true;\n this.canvasManager.lock();\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n };\n _proto.reset = function reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n };\n _proto.getDoc = function getDoc() {\n return this.doc;\n };\n return MutationBuffer;\n}();\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n index$2.childNodes(n2).forEach(function(childN) {\n return deepDelete(addsSet, childN);\n });\n}\nfunction processRemoves(n2, cache) {\n var queue = [\n n2\n ];\n while(queue.length){\n var next = queue.pop();\n if (cache.has(next)) continue;\n cache.add(next);\n index$2.childNodes(next).forEach(function(n22) {\n return queue.push(n22);\n });\n }\n return;\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.size === 0) return false;\n return _isParentRemoved(removes, n2);\n}\nfunction _isParentRemoved(removes, n2, _mirror2) {\n var node2 = index$2.parentNode(n2);\n if (!node2) return false;\n return removes.has(node2);\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0) return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n var parent = index$2.parentNode(n2);\n if (!parent) {\n return false;\n }\n if (set.has(parent)) {\n return true;\n }\n return _isAncestorInSet(set, parent);\n}\nvar errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nvar callbackWrapper = function(cb) {\n if (!errorHandler) {\n return cb;\n }\n var rrwebWrapped = function() {\n for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){\n rest[_key] = arguments[_key];\n }\n try {\n return cb.apply(void 0, [].concat(rest));\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nvar mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n var path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch (e) {}\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n var mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n var observer = new (mutationObserverCtor$2())(callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer)));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction removeMutationBufferForDoc(doc) {\n for(var i2 = mutationBuffers.length - 1; i2 >= 0; i2--){\n var buffer = mutationBuffers[i2];\n if (buffer.getDoc() === doc) {\n mutationBuffers.splice(i2, 1);\n }\n }\n}\nfunction initMoveObserver(param) {\n var mousemoveCb = param.mousemoveCb, sampling = param.sampling, doc = param.doc, mirror2 = param.mirror;\n if (sampling.mousemove === false) {\n return function() {};\n }\n var threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n var callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n var positions = [];\n var timeBaseline;\n var wrappedCb = throttle(callbackWrapper(function(source) {\n var totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map(function(p) {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n var _ref = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt, clientX = _ref.clientX, clientY = _ref.clientY;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(typeof DragEvent !== \"undefined\" && _instanceof(evt, DragEvent) ? IncrementalSource.Drag : _instanceof(evt, MouseEvent) ? IncrementalSource.MouseMove : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false\n }));\n var handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initMouseInteractionObserver(param) {\n var mouseInteractionCb = param.mouseInteractionCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n if (sampling.mouseInteraction === false) {\n return function() {};\n }\n var disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n var handlers = [];\n var currentPointerType = null;\n var getHandler = function(eventKey) {\n return function(event) {\n var target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var pointerType = null;\n var thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch(event.pointerType){\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen) ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n var e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n var id = mirror2.getId(target);\n var clientX = e2.clientX, clientY = e2.clientY;\n callbackWrapper(mouseInteractionCb)(_extends({\n type: MouseInteractions[thisEventKey],\n id: id,\n x: clientX,\n y: clientY\n }, pointerType !== null && {\n pointerType: pointerType\n }));\n };\n };\n Object.keys(MouseInteractions).filter(function(key) {\n return Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false;\n }).forEach(function(eventKey) {\n var eventName = toLowerCase(eventKey);\n var handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch(MouseInteractions[eventKey]){\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\"mouse\", \"pointer\");\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initScrollObserver(param) {\n var scrollCb = param.scrollCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n var scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id: id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id: id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }), sampling.scroll || 100));\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver(param, param1) {\n var viewportResizeCb = param.viewportResizeCb;\n var win = param1.win;\n var lastH = -1;\n var lastW = -1;\n var updateDimension = callbackWrapper(throttle(callbackWrapper(function() {\n var height = getWindowHeight();\n var width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on(\"resize\", updateDimension, win);\n}\nvar INPUT_TAGS = [\n \"INPUT\",\n \"TEXTAREA\",\n \"SELECT\"\n];\nvar lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver(param) {\n var inputCb = param.inputCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, ignoreClass = param.ignoreClass, ignoreSelector = param.ignoreSelector, maskInputOptions = param.maskInputOptions, maskInputFn = param.maskInputFn, sampling = param.sampling, userTriggeredOnInput = param.userTriggeredOnInput;\n function eventHandler(event) {\n var target = getEventTarget(event);\n var userTriggered = event.isTrusted;\n var tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = index$2.parentElement(target);\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n var text = target.value;\n var isChecked = false;\n var type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions: maskInputOptions,\n tagName: tagName,\n type: type,\n value: text,\n maskInputFn: maskInputFn\n });\n }\n cbWithDedup(target, userTriggeredOnInput ? {\n text: text,\n isChecked: isChecked,\n userTriggered: userTriggered\n } : {\n text: text,\n isChecked: isChecked\n });\n var name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]').forEach(function(el) {\n if (el !== target) {\n var text2 = el.value;\n cbWithDedup(el, userTriggeredOnInput ? {\n text: text2,\n isChecked: !isChecked,\n userTriggered: false\n } : {\n text: text2,\n isChecked: !isChecked\n });\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n var lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n var id = mirror2.getId(target);\n callbackWrapper(inputCb)(_extends({}, v2, {\n id: id\n }));\n }\n }\n var events = sampling.input === \"last\" ? [\n \"change\"\n ] : [\n \"input\",\n \"change\"\n ];\n var handlers = events.map(function(eventName) {\n return on(eventName, callbackWrapper(eventHandler), doc);\n });\n var currentWindow = doc.defaultView;\n if (!currentWindow) {\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n }\n var propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, \"value\");\n var hookProperties = [\n [\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLInputElement.prototype,\n \"checked\"\n ],\n [\n currentWindow.HTMLSelectElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLTextAreaElement.prototype,\n \"value\"\n ],\n // Some UI library use selectedIndex to set select value\n [\n currentWindow.HTMLSelectElement.prototype,\n \"selectedIndex\"\n ],\n [\n currentWindow.HTMLOptionElement.prototype,\n \"selected\"\n ]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n var _handlers;\n (_handlers = handlers).push.apply(_handlers, [].concat(hookProperties.map(function(p) {\n return hookSetter(p[0], p[1], {\n set: function set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n });\n }\n }, false, currentWindow);\n })));\n }\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction getNestedCSSRulePositions(rule2) {\n var positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && _instanceof(childRule.parentRule, CSSGroupingRule) || hasNestedCSSRule(\"CSSMediaRule\") && _instanceof(childRule.parentRule, CSSMediaRule) || hasNestedCSSRule(\"CSSSupportsRule\") && _instanceof(childRule.parentRule, CSSSupportsRule) || hasNestedCSSRule(\"CSSConditionRule\") && _instanceof(childRule.parentRule, CSSConditionRule)) {\n var rules2 = Array.from(childRule.parentRule.cssRules);\n var index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n } else if (childRule.parentStyleSheet) {\n var rules21 = Array.from(childRule.parentStyleSheet.cssRules);\n var index21 = rules21.indexOf(childRule);\n pos.unshift(index21);\n }\n return pos;\n }\n return recurse(rule2, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n var id, styleId;\n if (!sheet) return {};\n if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n else styleId = styleMirror.getId(sheet);\n return {\n styleId: styleId,\n id: id\n };\n}\nfunction initStyleSheetObserver(param, param1) {\n var styleSheetRuleCb = param.styleSheetRuleCb, mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return function() {};\n }\n var insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2) {\n if (index2 === void 0) index2 = this.cssRules.length;\n var rule2 = selector + \" { \" + styleBlock + \" }\";\n return win.CSSStyleSheet.prototype.insertRule.apply(this, [\n rule2,\n index2\n ]);\n };\n var deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.removeRule = function(index2) {\n return win.CSSStyleSheet.prototype.deleteRule.apply(this, [\n index2\n ]);\n };\n var replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n var unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2 || 0\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n });\n return callbackWrapper(function() {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver(param, host2) {\n var mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var _a2, _b, _c;\n var hostId = null;\n if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n else hostId = mirror2.getId(index$2.host(host2));\n var patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n var originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(patchTarget == null ? void 0 : patchTarget.prototype, \"adoptedStyleSheets\") : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor) return function() {};\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: function get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set: function set(sheets) {\n var _a3;\n var result2 = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {}\n }\n return result2;\n }\n });\n return callbackWrapper(function() {\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver(param, param1) {\n var styleDeclarationCb = param.styleDeclarationCb, mirror2 = param.mirror, ignoreCSSAttributes = param.ignoreCSSAttributes, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n var setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0], value = argumentsList[1], priority = argumentsList[2];\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [\n property,\n value,\n priority\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n set: {\n property: property,\n value: value,\n priority: priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n var removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0];\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [\n property\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n remove: {\n property: property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n return callbackWrapper(function() {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver(param) {\n var mediaInteractionCb = param.mediaInteractionCb, blockClass = param.blockClass, blockSelector = param.blockSelector, mirror2 = param.mirror, sampling = param.sampling, doc = param.doc;\n var handler = callbackWrapper(function(type) {\n return throttle(callbackWrapper(function(event) {\n var target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var currentTime = target.currentTime, volume = target.volume, muted = target.muted, playbackRate = target.playbackRate, loop = target.loop;\n mediaInteractionCb({\n type: type,\n id: mirror2.getId(target),\n currentTime: currentTime,\n volume: volume,\n muted: muted,\n playbackRate: playbackRate,\n loop: loop\n });\n }), sampling.media || 500);\n });\n var handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initFontObserver(param) {\n var fontCb = param.fontCb, doc = param.doc;\n var win = doc.defaultView;\n if (!win) {\n return function() {};\n }\n var handlers = [];\n var fontMap = /* @__PURE__ */ new WeakMap();\n var originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n var fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family: family,\n buffer: typeof source !== \"string\",\n descriptors: descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n var restoreHandler = patch$2(doc.fonts, \"add\", function(original) {\n return function(fontFace) {\n setTimeout(callbackWrapper(function() {\n var p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [\n fontFace\n ]);\n };\n });\n handlers.push(function() {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initSelectionObserver(param) {\n var doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, selectionCb = param.selectionCb;\n var collapsed = true;\n var updateSelection = callbackWrapper(function() {\n var selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n collapsed = selection.isCollapsed || false;\n var ranges = [];\n var count = selection.rangeCount || 0;\n for(var i2 = 0; i2 < count; i2++){\n var range = selection.getRangeAt(i2);\n var startContainer = range.startContainer, startOffset = range.startOffset, endContainer = range.endContainer, endOffset = range.endOffset;\n var blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked) continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset: startOffset,\n end: mirror2.getId(endContainer),\n endOffset: endOffset\n });\n }\n selectionCb({\n ranges: ranges\n });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver(param) {\n var doc = param.doc, customElementCb = param.customElementCb;\n var win = doc.defaultView;\n if (!win || !win.customElements) return function() {};\n var restoreHandler = patch$2(win.customElements, \"define\", function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name: name\n }\n });\n } catch (e2) {\n console.warn(\"Custom element callback failed for \" + name);\n }\n return original.apply(this, [\n name,\n constructor,\n options\n ]);\n };\n });\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n var mutationCb = o2.mutationCb, mousemoveCb = o2.mousemoveCb, mouseInteractionCb = o2.mouseInteractionCb, scrollCb = o2.scrollCb, viewportResizeCb = o2.viewportResizeCb, inputCb = o2.inputCb, mediaInteractionCb = o2.mediaInteractionCb, styleSheetRuleCb = o2.styleSheetRuleCb, styleDeclarationCb = o2.styleDeclarationCb, canvasMutationCb = o2.canvasMutationCb, fontCb = o2.fontCb, selectionCb = o2.selectionCb, customElementCb = o2.customElementCb;\n o2.mutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mutation) {\n var _hooks;\n (_hooks = hooks).mutation.apply(_hooks, [].concat(p));\n }\n mutationCb.apply(void 0, [].concat(p));\n };\n o2.mousemoveCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mousemove) {\n var _hooks;\n (_hooks = hooks).mousemove.apply(_hooks, [].concat(p));\n }\n mousemoveCb.apply(void 0, [].concat(p));\n };\n o2.mouseInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mouseInteraction) {\n var _hooks;\n (_hooks = hooks).mouseInteraction.apply(_hooks, [].concat(p));\n }\n mouseInteractionCb.apply(void 0, [].concat(p));\n };\n o2.scrollCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.scroll) {\n var _hooks;\n (_hooks = hooks).scroll.apply(_hooks, [].concat(p));\n }\n scrollCb.apply(void 0, [].concat(p));\n };\n o2.viewportResizeCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.viewportResize) {\n var _hooks;\n (_hooks = hooks).viewportResize.apply(_hooks, [].concat(p));\n }\n viewportResizeCb.apply(void 0, [].concat(p));\n };\n o2.inputCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.input) {\n var _hooks;\n (_hooks = hooks).input.apply(_hooks, [].concat(p));\n }\n inputCb.apply(void 0, [].concat(p));\n };\n o2.mediaInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mediaInteaction) {\n var _hooks;\n (_hooks = hooks).mediaInteaction.apply(_hooks, [].concat(p));\n }\n mediaInteractionCb.apply(void 0, [].concat(p));\n };\n o2.styleSheetRuleCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleSheetRule) {\n var _hooks;\n (_hooks = hooks).styleSheetRule.apply(_hooks, [].concat(p));\n }\n styleSheetRuleCb.apply(void 0, [].concat(p));\n };\n o2.styleDeclarationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleDeclaration) {\n var _hooks;\n (_hooks = hooks).styleDeclaration.apply(_hooks, [].concat(p));\n }\n styleDeclarationCb.apply(void 0, [].concat(p));\n };\n o2.canvasMutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.canvasMutation) {\n var _hooks;\n (_hooks = hooks).canvasMutation.apply(_hooks, [].concat(p));\n }\n canvasMutationCb.apply(void 0, [].concat(p));\n };\n o2.fontCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.font) {\n var _hooks;\n (_hooks = hooks).font.apply(_hooks, [].concat(p));\n }\n fontCb.apply(void 0, [].concat(p));\n };\n o2.selectionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.selection) {\n var _hooks;\n (_hooks = hooks).selection.apply(_hooks, [].concat(p));\n }\n selectionCb.apply(void 0, [].concat(p));\n };\n o2.customElementCb = function() {\n for(var _len = arguments.length, c2 = new Array(_len), _key = 0; _key < _len; _key++){\n c2[_key] = arguments[_key];\n }\n if (hooks.customElement) {\n var _hooks;\n (_hooks = hooks).customElement.apply(_hooks, [].concat(c2));\n }\n customElementCb.apply(void 0, [].concat(c2));\n };\n}\nfunction initObservers(o2, hooks) {\n if (hooks === void 0) hooks = {};\n var currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return function() {};\n }\n mergeHooks(o2, hooks);\n var mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n var mousemoveHandler = initMoveObserver(o2);\n var mouseInteractionHandler = initMouseInteractionObserver(o2);\n var scrollHandler = initScrollObserver(o2);\n var viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n var inputHandler = initInputObserver(o2);\n var mediaInteractionHandler = initMediaInteractionObserver(o2);\n var styleSheetObserver = function() {};\n var adoptedStyleSheetObserver = function() {};\n var styleDeclarationObserver = function() {};\n var fontObserver = function() {};\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, {\n win: currentWindow\n });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n var selectionObserver = initSelectionObserver(o2);\n var customElementObserver = initCustomElementObserver(o2);\n var pluginHandlers = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(o2.plugins), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n pluginHandlers.push(plugin3.observer(plugin3.callback, currentWindow, plugin3.options));\n }\n return callbackWrapper(function() {\n mutationBuffers.forEach(function(b) {\n return b.reset();\n });\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype);\n}\nvar CrossOriginIframeMirror = /*#__PURE__*/ function() {\n function CrossOriginIframeMirror(generateIdFn) {\n __publicField$1(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n var _proto = CrossOriginIframeMirror.prototype;\n _proto.getId = function getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n var idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n var id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n };\n _proto.getIds = function getIds(iframe, remoteId) {\n var _this = this;\n var idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(function(id) {\n return _this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap);\n });\n };\n _proto.getRemoteId = function getRemoteId(iframe, id, map) {\n var remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\") return id;\n var remoteId = remoteIdToIdMap.get(id);\n if (!remoteId) return -1;\n return remoteId;\n };\n _proto.getRemoteIds = function getRemoteIds(iframe, ids) {\n var _this = this;\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map(function(id) {\n return _this.getRemoteId(iframe, id, remoteIdToIdMap);\n });\n };\n _proto.reset = function reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n };\n _proto.getIdToRemoteIdMap = function getIdToRemoteIdMap(iframe) {\n var idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n };\n _proto.getRemoteIdToIdMap = function getRemoteIdToIdMap(iframe) {\n var remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n };\n return CrossOriginIframeMirror;\n}();\nvar IframeManager = /*#__PURE__*/ function() {\n function IframeManager(options) {\n __publicField$1(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField$1(this, \"crossOriginIframeStyleMirror\");\n __publicField$1(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeContentDocumentMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeObserverCleanupMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"wrappedEmit\");\n __publicField$1(this, \"loadListener\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n var _proto = IframeManager.prototype;\n _proto.addIframe = function addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow) this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n };\n _proto.getIframeContentDocument = function getIframeContentDocument(iframeEl) {\n return this.iframeContentDocumentMap.get(iframeEl);\n };\n _proto.setObserverCleanup = function setObserverCleanup(iframeEl, cleanup) {\n this.iframeObserverCleanupMap.set(iframeEl, cleanup);\n };\n _proto.getObserverCleanup = function getObserverCleanup(iframeEl) {\n return this.iframeObserverCleanupMap.get(iframeEl);\n };\n _proto.removeIframe = function removeIframe(iframeEl) {\n var storedDoc = this.iframeContentDocumentMap.get(iframeEl);\n if (storedDoc) {\n this.stylesheetManager.cleanupStylesheetsForRemovedNode(storedDoc);\n this.mirror.removeNodeFromMap(storedDoc, true);\n }\n this.iframes.delete(iframeEl);\n this.iframeContentDocumentMap.delete(iframeEl);\n var observerCleanup = this.iframeObserverCleanupMap.get(iframeEl);\n if (observerCleanup) {\n try {\n observerCleanup();\n } catch (e2) {}\n this.iframeObserverCleanupMap.delete(iframeEl);\n }\n };\n _proto.addLoadListener = function addLoadListener(cb) {\n this.loadListener = cb;\n };\n _proto.attachIframe = function attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (iframeEl.contentDocument) {\n this.iframeContentDocumentMap.set(iframeEl, iframeEl.contentDocument);\n }\n if (this.recordCrossOriginIframes) (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\"message\", this.handleMessage.bind(this));\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0) this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n };\n _proto.handleMessage = function handleMessage(message) {\n var crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin) return;\n var iframeSourceWindow = message.source;\n if (!iframeSourceWindow) return;\n var iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl) return;\n var transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent) this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n };\n _proto.transformCrossOriginEvent = function transformCrossOriginEvent(iframeEl, e2) {\n var _this = this;\n var _a2;\n switch(e2.type){\n case EventType.FullSnapshot:\n {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n var rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded:\n {\n return false;\n }\n case EventType.Plugin:\n {\n return e2;\n }\n case EventType.Custom:\n {\n this.replaceIds(e2.data.payload, iframeEl, [\n \"id\",\n \"parentId\",\n \"previousId\",\n \"nextId\"\n ]);\n return e2;\n }\n case EventType.IncrementalSnapshot:\n {\n switch(e2.data.source){\n case IncrementalSource.Mutation:\n {\n e2.data.adds.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n _this.replaceIdOnNode(n2.node, iframeEl);\n var rootId = _this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && _this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"id\"\n ]);\n });\n e2.data.attributes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n e2.data.texts.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove:\n {\n e2.data.positions.forEach(function(p) {\n _this.replaceIds(p, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize:\n {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleId\"\n ]);\n return e2;\n }\n case IncrementalSource.Font:\n {\n return e2;\n }\n case IncrementalSource.Selection:\n {\n e2.data.ranges.forEach(function(range) {\n _this.replaceIds(range, iframeEl, [\n \"start\",\n \"end\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleIds\"\n ]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach(function(style) {\n _this.replaceStyleIds(style, iframeEl, [\n \"styleId\"\n ]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n };\n _proto.replace = function replace(iframeMirror, obj, iframeEl, keys) {\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n };\n _proto.replaceIds = function replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n };\n _proto.replaceStyleIds = function replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n };\n _proto.replaceIdOnNode = function replaceIdOnNode(node2, iframeEl) {\n var _this = this;\n this.replaceIds(node2, iframeEl, [\n \"id\",\n \"rootId\"\n ]);\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.replaceIdOnNode(child, iframeEl);\n });\n }\n };\n _proto.patchRootIdOnNode = function patchRootIdOnNode(node2, rootId) {\n var _this = this;\n if (node2.type !== NodeType.Document && !node2.rootId) node2.rootId = rootId;\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.patchRootIdOnNode(child, rootId);\n });\n }\n };\n return IframeManager;\n}();\nvar ShadowDomManager = /*#__PURE__*/ function() {\n function ShadowDomManager(options) {\n __publicField$1(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"scrollCb\");\n __publicField$1(this, \"bypassOptions\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n var _proto = ShadowDomManager.prototype;\n _proto.init = function init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n };\n _proto.addShadowRoot = function addShadowRoot(shadowRoot2, doc) {\n var _this = this;\n if (!isNativeShadowDom(shadowRoot2)) return;\n if (this.shadowDoms.has(shadowRoot2)) return;\n this.shadowDoms.add(shadowRoot2);\n var observer = initMutationObserver(_extends({}, this.bypassOptions, {\n doc: doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n }), shadowRoot2);\n this.restoreHandlers.push(function() {\n return observer.disconnect();\n });\n this.restoreHandlers.push(initScrollObserver(_extends({}, this.bypassOptions, {\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot2,\n mirror: this.mirror\n })));\n setTimeout(function() {\n if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0) _this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot2.adoptedStyleSheets, _this.mirror.getId(index$2.host(shadowRoot2)));\n _this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: _this.mirror,\n stylesheetManager: _this.bypassOptions.stylesheetManager\n }, shadowRoot2));\n }, 0);\n };\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */ _proto.observeAttachShadow = function observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n };\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */ _proto.patchAttachShadow = function patchAttachShadow(element, doc) {\n var manager = this;\n this.restoreHandlers.push(patch$2(element.prototype, \"attachShadow\", function(original) {\n return function(option) {\n var sRoot = original.call(this, option);\n var shadowRootEl = index$2.shadowRoot(this);\n if (shadowRootEl && inDom(this)) manager.addShadowRoot(shadowRootEl, doc);\n return sRoot;\n };\n }));\n };\n _proto.reset = function reset() {\n this.restoreHandlers.forEach(function(handler) {\n try {\n handler();\n } catch (e2) {}\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n };\n return ShadowDomManager;\n}();\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor(var i$1 = 0; i$1 < chars.length; i$1++){\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function encode(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for(i2 = 0; i2 < len; i2 += 3){\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nvar canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n var contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nvar saveWebGLVar = function(value, win, ctx) {\n if (!value || !(isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\")) return;\n var name = value.constructor.name;\n var list2 = variableListFor$1(ctx, name);\n var index2 = list2.indexOf(value);\n if (index2 === -1) {\n index2 = list2.length;\n list2.push(value);\n }\n return index2;\n};\nfunction serializeArg(value, win, ctx) {\n if (_instanceof(value, Array)) {\n return value.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n } else if (value === null) {\n return value;\n } else if (_instanceof(value, Float32Array) || _instanceof(value, Float64Array) || _instanceof(value, Int32Array) || _instanceof(value, Uint32Array) || _instanceof(value, Uint8Array) || _instanceof(value, Uint16Array) || _instanceof(value, Int16Array) || _instanceof(value, Int8Array) || _instanceof(value, Uint8ClampedArray)) {\n var name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n Object.values(value)\n ]\n };\n } else if (// SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n _instanceof(value, ArrayBuffer)) {\n var name1 = value.constructor.name;\n var base64 = encode(value);\n return {\n rr_type: name1,\n base64: base64\n };\n } else if (_instanceof(value, DataView)) {\n var name2 = value.constructor.name;\n return {\n rr_type: name2,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (_instanceof(value, HTMLImageElement)) {\n var name3 = value.constructor.name;\n var src = value.src;\n return {\n rr_type: name3,\n src: src\n };\n } else if (_instanceof(value, HTMLCanvasElement)) {\n var name4 = \"HTMLImageElement\";\n var src1 = value.toDataURL();\n return {\n rr_type: name4,\n src: src1\n };\n } else if (_instanceof(value, ImageData)) {\n var name5 = value.constructor.name;\n return {\n rr_type: name5,\n args: [\n serializeArg(value.data, win, ctx),\n value.width,\n value.height\n ]\n };\n } else if (isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\") {\n var name6 = value.constructor.name;\n var index2 = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name6,\n index: index2\n };\n }\n return value;\n}\nvar serializeArgs = function(args, win, ctx) {\n return args.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n};\nvar isInstanceOfWebGLObject = function(value, win) {\n var webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n var supportedWebGLConstructorNames = webGLConstructorNames.filter(function(name) {\n return typeof win[name] === \"function\";\n });\n return Boolean(supportedWebGLConstructorNames.find(function(name) {\n return _instanceof(value, win[name]);\n }));\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n var _loop = function() {\n var prop = _step.value;\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(win.CanvasRenderingContext2D.prototype, prop, function(original) {\n return function() {\n var _this = this;\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n setTimeout(function() {\n var recordArgs = serializeArgs(args, win, _this);\n cb(_this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props2D), _step; !(_step = _iterator()).done;)_loop();\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n var handlers = [];\n try {\n var restoreHandler = patch$2(win.HTMLCanvasElement.prototype, \"getContext\", function(original) {\n return function(contextType) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n var ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this)) this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\n \"webgl\",\n \"webgl2\"\n ].includes(ctxName)) {\n if (args[0] && _type_of(args[0]) === \"object\") {\n var contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [].concat([\n contextType\n ], args));\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n var _loop = function() {\n var prop = _step.value;\n if (//prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)) {\n return \"continue\";\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(prototype, prop, function(original) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var result2 = original.apply(this, args);\n saveWebGLVar(result2, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n var recordArgs = serializeArgs(args, win, this);\n var mutation = {\n type: type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result2;\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: type,\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props = Object.getOwnPropertyNames(prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props), _step; !(_step = _iterator()).done;)_loop();\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n var _handlers;\n var handlers = [];\n (_handlers = handlers).push.apply(_handlers, [].concat(patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, win)));\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n var _handlers1;\n (_handlers1 = handlers).push.apply(_handlers1, [].concat(patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, win)));\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nvar encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nvar decodeBase64 = function(base64) {\n return Uint8Array.from(atob(base64), function(c2) {\n return c2.charCodeAt(0);\n });\n};\nvar blob = typeof window !== \"undefined\" && window.Blob && new Blob([\n decodeBase64(encodedJs)\n], {\n type: \"text/javascript;charset=utf-8\"\n});\nfunction WorkerWrapper(options) {\n var objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL) throw \"\";\n var worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", function() {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\"data:text/javascript;base64,\" + encodedJs, {\n name: options == null ? void 0 : options.name\n });\n } finally{\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nvar CanvasManager = /*#__PURE__*/ function() {\n function CanvasManager(options) {\n var _this = this;\n __publicField$1(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"rafStamps\", {\n latestId: 0,\n invokeId: null\n });\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"resetObservers\");\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"processMutation\", function(target, mutation) {\n var newFrame = _this.rafStamps.invokeId && _this.rafStamps.latestId !== _this.rafStamps.invokeId;\n if (newFrame || !_this.rafStamps.invokeId) _this.rafStamps.invokeId = _this.rafStamps.latestId;\n if (!_this.pendingCanvasMutations.has(target)) {\n _this.pendingCanvasMutations.set(target, []);\n }\n _this.pendingCanvasMutations.get(target).push(mutation);\n });\n var _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? \"all\" : _options_sampling, win = options.win, blockClass = options.blockClass, blockSelector = options.blockSelector, recordCanvas = options.recordCanvas, dataURLOptions = options.dataURLOptions;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\") this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\") this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions: dataURLOptions\n });\n }\n var _proto = CanvasManager.prototype;\n _proto.reset = function reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n };\n _proto.lock = function lock() {\n this.locked = true;\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n };\n _proto.initCanvasFPSObserver = function initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n var _this = this;\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, true);\n var snapshotInProgressMap = /* @__PURE__ */ new Map();\n var worker = new WorkerWrapper();\n worker.onmessage = function(e2) {\n var id = e2.data.id;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data)) return;\n var _e2_data = e2.data, base64 = _e2_data.base64, type = _e2_data.type, width = _e2_data.width, height = _e2_data.height;\n _this.mutationCb({\n id: id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [\n 0,\n 0,\n width,\n height\n ]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [\n {\n rr_type: \"ArrayBuffer\",\n base64: base64\n }\n ],\n type: type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n var timeBetweenSnapshots = 1e3 / fps;\n var lastSnapshotTime = 0;\n var rafId;\n var getCanvas = function() {\n var matchedCanvas = [];\n win.document.querySelectorAll(\"canvas\").forEach(function(canvas) {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n return matchedCanvas;\n };\n var takeCanvasSnapshots = function(timestamp) {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n var _this1 = _this;\n getCanvas().forEach(/*#__PURE__*/ _async_to_generator(function(canvas) {\n var _a2, id, context, bitmap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n id = _this1.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id)) return [\n 2\n ];\n if (canvas.width === 0 || canvas.height === 0) return [\n 2\n ];\n snapshotInProgressMap.set(id, true);\n if ([\n \"webgl\",\n \"webgl2\"\n ].includes(canvas.__context)) {\n context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n return [\n 4,\n createImageBitmap(canvas)\n ];\n case 1:\n bitmap = _state.sent();\n worker.postMessage({\n id: id,\n bitmap: bitmap,\n width: canvas.width,\n height: canvas.height,\n dataURLOptions: options.dataURLOptions\n }, [\n bitmap\n ]);\n return [\n 2\n ];\n }\n });\n }));\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = function() {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n };\n _proto.initCanvasMutationObserver = function initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, false);\n var canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n var canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n this.resetObservers = function() {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n };\n _proto.startPendingCanvasMutationFlusher = function startPendingCanvasMutationFlusher() {\n var _this = this;\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.startRAFTimestamping = function startRAFTimestamping() {\n var _this = this;\n var setLatestRAFTimestamp = function(timestamp) {\n _this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n _proto.flushPendingCanvasMutations = function flushPendingCanvasMutations() {\n var _this = this;\n this.pendingCanvasMutations.forEach(function(_values, canvas) {\n var id = _this.mirror.getId(canvas);\n _this.flushPendingCanvasMutationFor(canvas, id);\n });\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.flushPendingCanvasMutationFor = function flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n var valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1) return;\n var values = valuesWithType.map(function(value) {\n value.type; var rest = _object_without_properties_loose(value, [\n \"type\"\n ]);\n return rest;\n });\n var type = valuesWithType[0].type;\n this.mutationCb({\n id: id,\n type: type,\n commands: values\n });\n this.pendingCanvasMutations.delete(canvas);\n };\n return CanvasManager;\n}();\nvar StylesheetManager = /*#__PURE__*/ function() {\n function StylesheetManager(options) {\n __publicField$1(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"adoptedStyleSheetCb\");\n __publicField$1(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n var _proto = StylesheetManager.prototype;\n _proto.attachLinkElement = function attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes) this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n };\n _proto.trackLinkElement = function trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl)) return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n };\n _proto.adoptStyleSheets = function adoptStyleSheets(sheets, hostId) {\n var _this, _loop = function() {\n var sheet = _step.value;\n var styleId = void 0;\n if (!_this.styleMirror.has(sheet)) {\n styleId = _this.styleMirror.add(sheet);\n styles.push({\n styleId: styleId,\n rules: Array.from(sheet.rules || CSSRule, function(r2, index2) {\n return {\n rule: stringifyRule(r2, sheet.href),\n index: index2\n };\n })\n });\n } else styleId = _this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n };\n if (sheets.length === 0) return;\n var adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n var styles = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(sheets), _step; !(_step = _iterator()).done;)_this = this, _loop();\n if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n };\n _proto.reset = function reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n };\n /**\n * Cleans up stylesheets associated with a removed node.\n *\n * @param removedNode - The node that was removed from the DOM.\n */ _proto.cleanupStylesheetsForRemovedNode = function cleanupStylesheetsForRemovedNode(removedNode) {\n var _this = this;\n try {\n if (removedNode.nodeType === Node.DOCUMENT_NODE) {\n var doc = removedNode;\n if (doc.adoptedStyleSheets) {\n for(var _iterator = _create_for_of_iterator_helper_loose(doc.adoptedStyleSheets), _step; !(_step = _iterator()).done;){\n var sheet = _step.value;\n this.styleMirror.remove(sheet);\n }\n }\n }\n if (removedNode.nodeName === \"STYLE\") {\n var styleEl = removedNode;\n if (styleEl.sheet) {\n this.styleMirror.remove(styleEl.sheet);\n }\n }\n if (removedNode.nodeName === \"LINK\" && removedNode.rel === \"stylesheet\") {\n var linkEl = removedNode;\n if (linkEl.sheet) {\n this.styleMirror.remove(linkEl.sheet);\n }\n }\n if (removedNode.childNodes) {\n removedNode.childNodes.forEach(function(child) {\n _this.cleanupStylesheetsForRemovedNode(child);\n });\n }\n } catch (e2) {}\n };\n // TODO: take snapshot on stylesheet reload by applying event listener\n _proto.trackStylesheetInLinkElement = function trackStylesheetInLinkElement(_linkEl) {};\n return StylesheetManager;\n}();\nvar ProcessedNodeManager = /*#__PURE__*/ function() {\n function ProcessedNodeManager() {\n __publicField$1(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"active\", false);\n }\n var _proto = ProcessedNodeManager.prototype;\n _proto.inOtherBuffer = function inOtherBuffer(node2, thisBuffer) {\n var buffers = this.nodeMap.get(node2);\n return buffers && Array.from(buffers).some(function(buffer) {\n return buffer !== thisBuffer;\n });\n };\n _proto.add = function add(node2, buffer) {\n var _this = this;\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(function() {\n _this.nodeMap = /* @__PURE__ */ new WeakMap();\n _this.active = false;\n });\n }\n this.nodeMap.set(node2, (this.nodeMap.get(node2) || /* @__PURE__ */ new Set()).add(buffer));\n };\n _proto.destroy = function destroy() {};\n return ProcessedNodeManager;\n}();\nfunction toOrigin(url) {\n try {\n var origin = new URL(url).origin;\n return origin !== \"null\" ? origin : null;\n } catch (e) {\n return null;\n }\n}\nfunction buildAllowedOriginSet(origins) {\n if (!Array.isArray(origins) || origins.length === 0) {\n throw new Error(\"[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.\");\n }\n var set = /* @__PURE__ */ new Set();\n for(var i2 = 0; i2 < origins.length; i2++){\n var entry = origins[i2];\n if (typeof entry !== \"string\") {\n throw new Error(\"[rrweb] allowedIframeOrigins[\" + i2 + \"] must be a string, got \" + (typeof entry === \"undefined\" ? \"undefined\" : _type_of(entry)) + \".\");\n }\n var origin = toOrigin(entry);\n if (origin) {\n set.add(origin);\n }\n }\n return Object.freeze(set);\n}\nvar wrappedEmit;\nvar takeFullSnapshot$1;\nvar canvasManager;\nvar recording = false;\ntry {\n if (Array.from([\n 1\n ], function(x2) {\n return x2 * 2;\n })[0] !== 2) {\n var cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nvar mirror = createMirror$2();\nfunction record(options) {\n if (options === void 0) options = {};\n var emit = options.emit, checkoutEveryNms = options.checkoutEveryNms, checkoutEveryNth = options.checkoutEveryNth, _options_blockClass = options.blockClass, blockClass = _options_blockClass === void 0 ? \"rr-block\" : _options_blockClass, _options_blockSelector = options.blockSelector, blockSelector = _options_blockSelector === void 0 ? null : _options_blockSelector, _options_ignoreClass = options.ignoreClass, ignoreClass = _options_ignoreClass === void 0 ? \"rr-ignore\" : _options_ignoreClass, _options_ignoreSelector = options.ignoreSelector, ignoreSelector = _options_ignoreSelector === void 0 ? null : _options_ignoreSelector, _options_maskTextClass = options.maskTextClass, maskTextClass = _options_maskTextClass === void 0 ? \"rr-mask\" : _options_maskTextClass, _options_maskTextSelector = options.maskTextSelector, maskTextSelector = _options_maskTextSelector === void 0 ? null : _options_maskTextSelector, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, maskAllInputs = options.maskAllInputs, _maskInputOptions = options.maskInputOptions, _slimDOMOptions = options.slimDOMOptions, maskInputFn = options.maskInputFn, maskTextFn = options.maskTextFn, hooks = options.hooks, packFn = options.packFn, _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? {} : _options_sampling, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, mousemoveWait = options.mousemoveWait, _options_recordDOM = options.recordDOM, recordDOM = _options_recordDOM === void 0 ? true : _options_recordDOM, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, _options_recordCrossOriginIframes = options.recordCrossOriginIframes, recordCrossOriginIframes = _options_recordCrossOriginIframes === void 0 ? false : _options_recordCrossOriginIframes, allowedIframeOrigins = options.allowedIframeOrigins, _options_recordAfter = options.recordAfter, recordAfter = _options_recordAfter === void 0 ? options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\" : _options_recordAfter, _options_userTriggeredOnInput = options.userTriggeredOnInput, userTriggeredOnInput = _options_userTriggeredOnInput === void 0 ? false : _options_userTriggeredOnInput, _options_collectFonts = options.collectFonts, collectFonts = _options_collectFonts === void 0 ? false : _options_collectFonts, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, plugins = options.plugins, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_ignoreCSSAttributes = options.ignoreCSSAttributes, ignoreCSSAttributes = _options_ignoreCSSAttributes === void 0 ? /* @__PURE__ */ new Set([]) : _options_ignoreCSSAttributes, errorHandler2 = options.errorHandler;\n registerErrorHandler(errorHandler2);\n var validatedOrigins;\n if (recordCrossOriginIframes && allowedIframeOrigins && allowedIframeOrigins.length > 0) {\n validatedOrigins = buildAllowedOriginSet(allowedIframeOrigins);\n if (validatedOrigins.size === 0) {\n validatedOrigins = void 0;\n }\n }\n var inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n var passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return function() {};\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : {\n password: true\n };\n var slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n var lastFullSnapshotEvent;\n var incrementalSnapshotCount = 0;\n var eventProcessor = function(e2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.eventProcessor) {\n e2 = plugin3.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = function(r2, isCheckout) {\n var _a2;\n var e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach(function(buf) {\n return buf.unfreeze();\n });\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n var message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout: isCheckout\n };\n if (validatedOrigins) {\n for(var _iterator = _create_for_of_iterator_helper_loose(validatedOrigins), _step; !(_step = _iterator()).done;){\n var targetOrigin = _step.value;\n window.parent.postMessage(message, targetOrigin);\n }\n } else {\n window.parent.postMessage(message, \"*\");\n }\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n var exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n var exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot$1(true);\n }\n }\n };\n var wrappedMutationEmit = function(m) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Mutation\n }, m)\n });\n };\n var wrappedScrollEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Scroll\n }, p)\n });\n };\n var wrappedCanvasMutationEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CanvasMutation\n }, p)\n });\n };\n var wrappedAdoptedStyleSheetEmit = function(a2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.AdoptedStyleSheet\n }, a2)\n });\n };\n var stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n var iframeManager = new IframeManager({\n mirror: mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes: recordCrossOriginIframes,\n wrappedEmit: wrappedEmit\n });\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.getMirror) plugin3.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n var processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas: recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass: blockClass,\n blockSelector: blockSelector,\n mirror: mirror,\n sampling: sampling.canvas,\n dataURLOptions: dataURLOptions\n });\n var shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n dataURLOptions: dataURLOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n sampling: sampling,\n slimDOMOptions: slimDOMOptions,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n canvasManager: canvasManager,\n keepIframeSrcFn: keepIframeSrcFn,\n processedNodeManager: processedNodeManager\n },\n mirror: mirror\n });\n takeFullSnapshot$1 = function(isCheckout) {\n if (isCheckout === void 0) isCheckout = false;\n if (!recordDOM) {\n return;\n }\n wrappedEmit({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n }, isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach(function(buf) {\n return buf.lock();\n });\n var node2 = snapshot(document, {\n mirror: mirror,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOM: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n onSerialize: function(n2) {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), document);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(linkEl, childSn) {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (!node2) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit({\n type: EventType.FullSnapshot,\n data: {\n node: node2,\n initialOffset: getWindowScroll(window)\n }\n }, isCheckout);\n mutationBuffers.forEach(function(buf) {\n return buf.unlock();\n });\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n try {\n var handlers = [];\n var observe = function(doc) {\n var _a2;\n return callbackWrapper(initObservers)({\n mutationCb: wrappedMutationEmit,\n mousemoveCb: function(positions, source) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: source,\n positions: positions\n }\n });\n },\n mouseInteractionCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MouseInteraction\n }, d)\n });\n },\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.ViewportResize\n }, d)\n });\n },\n inputCb: function(v2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Input\n }, v2)\n });\n },\n mediaInteractionCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MediaInteraction\n }, p)\n });\n },\n styleSheetRuleCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleSheetRule\n }, r2)\n });\n },\n styleDeclarationCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleDeclaration\n }, r2)\n });\n },\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Font\n }, p)\n });\n },\n selectionCb: function(p) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Selection\n }, p)\n });\n },\n customElementCb: function(c2) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CustomElement\n }, c2)\n });\n },\n blockClass: blockClass,\n ignoreClass: ignoreClass,\n ignoreSelector: ignoreSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n maskInputOptions: maskInputOptions,\n inlineStylesheet: inlineStylesheet,\n sampling: sampling,\n recordDOM: recordDOM,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n userTriggeredOnInput: userTriggeredOnInput,\n collectFonts: collectFonts,\n doc: doc,\n maskInputFn: maskInputFn,\n maskTextFn: maskTextFn,\n keepIframeSrcFn: keepIframeSrcFn,\n blockSelector: blockSelector,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n mirror: mirror,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n shadowDomManager: shadowDomManager,\n processedNodeManager: processedNodeManager,\n canvasManager: canvasManager,\n ignoreCSSAttributes: ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter(function(p) {\n return p.observer;\n })) == null ? void 0 : _a2.map(function(p) {\n return {\n observer: p.observer,\n options: p.options,\n callback: function(payload) {\n return wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload: payload\n }\n });\n }\n };\n })) || []\n }, hooks);\n };\n iframeManager.addLoadListener(function(iframeEl) {\n try {\n var iframeDoc = iframeEl.contentDocument;\n var iframeHandler = observe(iframeDoc);\n handlers.push(iframeHandler);\n var existingCleanup = iframeManager.getObserverCleanup(iframeEl);\n iframeManager.setObserverCleanup(iframeEl, function() {\n if (existingCleanup) {\n try {\n existingCleanup();\n } catch (e2) {}\n }\n try {\n iframeHandler();\n var idx = handlers.indexOf(iframeHandler);\n if (idx !== -1) handlers.splice(idx, 1);\n removeMutationBufferForDoc(iframeDoc);\n } catch (e2) {}\n });\n } catch (error) {\n console.warn(error);\n }\n });\n var init = function() {\n takeFullSnapshot$1();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(on(\"DOMContentLoaded\", function() {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\") init();\n }));\n handlers.push(on(\"load\", function() {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\") init();\n }, window));\n }\n return function() {\n handlers.forEach(function(handler) {\n try {\n handler();\n } catch (error) {\n var msg = String(error).toLowerCase();\n if (!msg.includes(\"cross-origin\")) {\n console.warn(error);\n }\n }\n });\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = function(tag, payload) {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag: tag,\n payload: payload\n }\n });\n};\nrecord.freezePage = function() {\n mutationBuffers.forEach(function(buf) {\n return buf.freeze();\n });\n};\nrecord.takeFullSnapshot = function(isCheckout) {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot$1(isCheckout);\n};\nrecord.mirror = mirror;\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nrecord.addCustomEvent;\nrecord.freezePage;\nrecord.takeFullSnapshot;\nvar testableAccessors = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype = {};\nvar isAngularZonePresent = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key]) return untaintedBasePrototype[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a, _b;\n return Boolean((_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods ? testableMethods[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a;\n return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache[cacheKey]) return untaintedAccessorCache[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache[cacheKey]) return untaintedMethodCache[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n if (!n || !(\"host\" in n)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n return n.styleSheets;\n}\nfunction shadowRoot(n) {\n if (!n || !(\"shadowRoot\" in n)) return null;\n return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nfunction patch$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index = {\n childNodes: childNodes,\n parentNode: parentNode,\n parentElement: parentElement,\n textContent: textContent,\n contains: contains,\n getRootNode: getRootNode,\n host: host,\n styleSheets: styleSheets,\n shadowRoot: shadowRoot,\n querySelector: querySelector,\n querySelectorAll: querySelectorAll,\n mutationObserver: mutationObserverCtor,\n patch: patch$1\n};\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n}\nfunction getDefaultExportFromCjs(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace(n) {\n if (n.__esModule) return n;\n var f = n.default;\n if (typeof f == \"function\") {\n var a = function a2() {\n if (_instanceof(this, a2)) {\n return Reflect.construct(f, arguments, this.constructor);\n }\n return f.apply(this, arguments);\n };\n a.prototype = f.prototype;\n } else a = {};\n Object.defineProperty(a, \"__esModule\", {\n value: true\n });\n Object.keys(n).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n, k);\n Object.defineProperty(a, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n[k];\n }\n });\n });\n return a;\n}\nvar picocolors_browser = {\n exports: {}\n};\nvar x = String;\nvar create = function create() {\n return {\n isColorSupported: false,\n reset: x,\n bold: x,\n dim: x,\n italic: x,\n underline: x,\n inverse: x,\n hidden: x,\n strikethrough: x,\n black: x,\n red: x,\n green: x,\n yellow: x,\n blue: x,\n magenta: x,\n cyan: x,\n white: x,\n gray: x,\n bgBlack: x,\n bgRed: x,\n bgGreen: x,\n bgYellow: x,\n bgBlue: x,\n bgMagenta: x,\n bgCyan: x,\n bgWhite: x\n };\n};\npicocolors_browser.exports = create();\npicocolors_browser.exports.createColors = create;\nvar picocolors_browserExports = picocolors_browser.exports;\nvar __viteBrowserExternal = {};\nvar __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);\nvar pico = picocolors_browserExports;\nvar terminalHighlight$1 = require$$2;\nvar CssSyntaxError$3 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin2) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin2) {\n _this.plugin = plugin2;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico.isColorSupported;\n if (terminalHighlight$1) {\n if (color) css = terminalHighlight$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico_createColors = pico.createColors(true), bold = _pico_createColors.bold, gray = _pico_createColors.gray, red = _pico_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError = CssSyntaxError$3;\nCssSyntaxError$3.default = CssSyntaxError$3;\nvar symbols = {};\nsymbols.isClean = Symbol(\"isClean\");\nsymbols.my = Symbol(\"my\");\nvar DEFAULT_RAW = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i = 0; i < node2.nodes.length; i++){\n var child = node2.nodes[i];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i) {\n value = i.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== \"undefined\") {\n value = i.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i) {\n if (i.type !== \"decl\") {\n value = i.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && (i.parent !== root2 || root2.first !== i)) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.between !== \"undefined\") {\n value = i.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i) {\n var p = i.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i.raws.before !== \"undefined\") {\n var parts = i.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length && i.last.type === \"decl\") {\n value = i.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier = Stringifier$2;\nStringifier$2.default = Stringifier$2;\nvar Stringifier$1 = stringifier;\nfunction stringify$4(node2, builder) {\n var str = new Stringifier$1(builder);\n str.stringify(node2);\n}\nvar stringify_1 = stringify$4;\nstringify$4.default = stringify$4;\nvar isClean$2 = symbols.isClean, my$2 = symbols.my;\nvar CssSyntaxError$2 = cssSyntaxError;\nvar Stringifier2 = stringifier;\nvar stringify$3 = stringify_1;\nfunction cloneNode(obj, parent) {\n var cloned = new obj.constructor();\n for(var i in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n continue;\n }\n if (i === \"proxyCache\") continue;\n var value = obj[i];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i === \"parent\" && type === \"object\") {\n if (parent) cloned[i] = parent;\n } else if (i === \"source\") {\n cloned[i] = value;\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(function(j) {\n return cloneNode(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode(value);\n cloned[i] = value;\n }\n }\n return cloned;\n}\nvar Node$4 = /*#__PURE__*/ function() {\n function Node1(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2] = false;\n this[my$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node1.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s.input.from + \":\" + s.start.line + \":\" + s.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2]) {\n this[isClean$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i = 0; i < index2; i++){\n if (string[i] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i) {\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.toJSON) {\n return i.toJSON(null, inputs);\n } else {\n return i;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i) {\n result2 += i;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i in opts)data[i] = opts[i];\n return result2.warn(text, data);\n };\n _create_class(Node1, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node1;\n}();\nvar node = Node$4;\nNode$4.default = Node$4;\nvar Node$3 = node;\nvar Declaration$4 = /*#__PURE__*/ function(Node$3) {\n _inherits(Declaration, Node$3);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3);\nvar declaration = Declaration$4;\nDeclaration$4.default = Declaration$4;\nvar urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i = size;\n while(i--){\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure = {\n nanoid: nanoid$1\n};\nvar SourceMapConsumer$2 = require$$2.SourceMapConsumer, SourceMapGenerator$2 = require$$2.SourceMapGenerator;\nvar existsSync = require$$2.existsSync, readFileSync = require$$2.readFileSync;\nvar dirname$1 = require$$2.dirname, join = require$$2.join;\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1(path);\n if (existsSync(path)) {\n this.mapFile = path;\n return readFileSync(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2)) {\n return SourceMapGenerator$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join(dirname$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap = PreviousMap$2;\nPreviousMap$2.default = PreviousMap$2;\nvar SourceMapConsumer$1 = require$$2.SourceMapConsumer, SourceMapGenerator$1 = require$$2.SourceMapGenerator;\nvar fileURLToPath = require$$2.fileURLToPath, pathToFileURL$1 = require$$2.pathToFileURL;\nvar isAbsolute = require$$2.isAbsolute, resolve$1 = require$$2.resolve;\nvar nanoid = nonSecure.nanoid;\nvar terminalHighlight = require$$2;\nvar CssSyntaxError$1 = cssSyntaxError;\nvar PreviousMap$1 = previousMap;\nvar fromOffsetCache = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1 = Boolean(SourceMapConsumer$1 && SourceMapGenerator$1);\nvar pathAvailable$1 = Boolean(resolve$1 && isAbsolute);\nvar Input$4 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1(opts.from);\n }\n }\n if (pathAvailable$1 && sourceMapAvailable$1) {\n var map = new PreviousMap$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1) {\n result2.input.url = pathToFileURL$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i = 0, l = lines.length; i < l; i++){\n lineToIndex[i] = prevIndex;\n prevIndex += lines[i].length + 1;\n }\n this[fromOffsetCache] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath) {\n result2.file = fileURLToPath(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input = Input$4;\nInput$4.default = Input$4;\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input$4);\n}\nvar SourceMapConsumer = require$$2.SourceMapConsumer, SourceMapGenerator = require$$2.SourceMapGenerator;\nvar dirname = require$$2.dirname, relative = require$$2.relative, resolve = require$$2.resolve, sep = require$$2.sep;\nvar pathToFileURL = require$$2.pathToFileURL;\nvar Input$3 = input;\nvar sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\nvar pathAvailable = Boolean(dirname && resolve && relative && sep);\nvar MapGenerator$2 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i = this.root.nodes.length - 1; i >= 0; i--){\n node2 = this.root.nodes[i];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i) {\n result2 += i;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname(resolve(from, this.mapOpts.annotation));\n }\n var path = relative(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL) {\n var fileURL = pathToFileURL(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator = MapGenerator$2;\nvar Node$2 = node;\nvar Comment$4 = /*#__PURE__*/ function(Node$2) {\n _inherits(Comment, Node$2);\n function Comment(defaults) {\n var _this;\n _this = Node$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2);\nvar comment = Comment$4;\nComment$4.default = Comment$4;\nvar isClean$1 = symbols.isClean, my$1 = symbols.my;\nvar Declaration$3 = declaration;\nvar Comment$3 = comment;\nvar Node$1 = node;\nvar parse$4, Rule$4, AtRule$4, Root$6;\nfunction cleanSource(nodes) {\n return nodes.map(function(i) {\n if (i.nodes) i.nodes = cleanSource(i.nodes);\n delete i.source;\n return i;\n });\n}\nfunction markDirtyUp(node2) {\n node2[isClean$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n markDirtyUp(i);\n }\n }\n}\nvar Container$7 = /*#__PURE__*/ function(Node$1) {\n _inherits(Container, Node$1);\n function Container() {\n return Node$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i) {\n if (typeof i === \"function\") {\n return function(child, index2) {\n return i(child.toProxy(), index2);\n };\n } else {\n return i;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i) {\n return i.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource(parse$4(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.parent) i.parent.removeChild(i, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i1 = _step1.value;\n if (i1.parent) i1.parent.removeChild(i1, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i) {\n if (!i[my$1]) Container.rebuild(i);\n i = i.proxyOf;\n if (i.parent) i.parent.removeChild(i);\n if (i[isClean$1]) markDirtyUp(i);\n if (typeof i.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i.parent = _this.proxyOf;\n return i;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i) {\n var result2;\n try {\n result2 = callback(child, i);\n } catch (e) {\n throw child.addToError(e);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i) {\n if (child.type === \"atrule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i) {\n if (child.type === \"comment\") {\n return callback(child, i);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i) {\n if (child.type === \"decl\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i) {\n if (child.type === \"rule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1);\nContainer$7.registerParse = function(dependant) {\n parse$4 = dependant;\n};\nContainer$7.registerRule = function(dependant) {\n Rule$4 = dependant;\n};\nContainer$7.registerAtRule = function(dependant) {\n AtRule$4 = dependant;\n};\nContainer$7.registerRoot = function(dependant) {\n Root$6 = dependant;\n};\nvar container = Container$7;\nContainer$7.default = Container$7;\nContainer$7.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6.prototype);\n }\n node2[my$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7.rebuild(child);\n });\n }\n};\nvar Container$6 = container;\nvar LazyResult$4, Processor$3;\nvar Document$3 = /*#__PURE__*/ function(Container$6) {\n _inherits(Document, Container$6);\n function Document(defaults) {\n var _this;\n _this = Container$6.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4(new Processor$3(), this, opts);\n return lazy.stringify();\n };\n return Document;\n}(Container$6);\nDocument$3.registerLazyResult = function(dependant) {\n LazyResult$4 = dependant;\n};\nDocument$3.registerProcessor = function(dependant) {\n Processor$3 = dependant;\n};\nvar document$1 = Document$3;\nDocument$3.default = Document$3;\nvar printed = {};\nvar warnOnce$2 = function warnOnce(message) {\n if (printed[message]) return;\n printed[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning = Warning$2;\nWarning$2.default = Warning$2;\nvar Warning$1 = warning;\nvar Result$3 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i) {\n return i.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result = Result$3;\nResult$3.default = Result$3;\nvar SINGLE_QUOTE = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE = '\"'.charCodeAt(0);\nvar BACKSLASH = \"\\\\\".charCodeAt(0);\nvar SLASH = \"/\".charCodeAt(0);\nvar NEWLINE = \"\\n\".charCodeAt(0);\nvar SPACE = \" \".charCodeAt(0);\nvar FEED = \"\\f\".charCodeAt(0);\nvar TAB = \"\t\".charCodeAt(0);\nvar CR = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES = \")\".charCodeAt(0);\nvar OPEN_CURLY = \"{\".charCodeAt(0);\nvar CLOSE_CURLY = \"}\".charCodeAt(0);\nvar SEMICOLON = \";\".charCodeAt(0);\nvar ASTERISK = \"*\".charCodeAt(0);\nvar COLON = \":\".charCodeAt(0);\nvar AT = \"@\".charCodeAt(0);\nvar RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE = /[\\da-f]/i;\nvar tokenize = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE:\n {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT:\n {\n RE_AT_END.lastIndex = pos + 1;\n RE_AT_END.test(css);\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n next += 1;\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END.lastIndex = pos + 1;\n RE_WORD_END.test(css);\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5 = container;\nvar AtRule$3 = /*#__PURE__*/ function(Container$5) {\n _inherits(AtRule, Container$5);\n function AtRule(defaults) {\n var _this;\n _this = Container$5.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_append = Container$5.prototype.append).call.apply(_Container$5_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_prepend = Container$5.prototype.prepend).call.apply(_Container$5_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5);\nvar atRule = AtRule$3;\nAtRule$3.default = AtRule$3;\nContainer$5.registerAtRule(AtRule$3);\nvar Container$4 = container;\nvar LazyResult$3, Processor$2;\nvar Root$5 = /*#__PURE__*/ function(Container$4) {\n _inherits(Root, Container$4);\n function Root(defaults) {\n var _this;\n _this = Container$4.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3(new Processor$2(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4);\nRoot$5.registerLazyResult = function(dependant) {\n LazyResult$3 = dependant;\n};\nRoot$5.registerProcessor = function(dependant) {\n Processor$2 = dependant;\n};\nvar root = Root$5;\nRoot$5.default = Root$5;\nContainer$4.registerRoot(Root$5);\nvar list$2 = {\n comma: function comma(string) {\n return list$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1 = list$2;\nlist$2.default = list$2;\nvar Container$3 = container;\nvar list$1 = list_1;\nvar Rule$3 = /*#__PURE__*/ function(Container$3) {\n _inherits(Rule, Container$3);\n function Rule(defaults) {\n var _this;\n _this = Container$3.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3);\nvar rule = Rule$3;\nRule$3.default = Rule$3;\nContainer$3.registerRule(Rule$3);\nvar Declaration$2 = declaration;\nvar tokenizer2 = tokenize;\nvar Comment$2 = comment;\nvar AtRule$2 = atRule;\nvar Root$4 = root;\nvar Rule$2 = rule;\nvar SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition(tokens) {\n for(var i = tokens.length - 1; i >= 0; i--){\n var token = tokens[i];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i = tokens.length - 1; i >= 0; i--){\n token = tokens[i];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i) {\n return i[0] !== \"space\" && i[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i) {\n return i[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i = 0; i < length; i += 1){\n token = tokens[i];\n type = token[0];\n if (type === \"space\" && i === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i - 1] ? tokens[i - 1][0] : \"empty\";\n next = tokens[i + 1] ? tokens[i + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i) {\n return all + i[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i = from; i < tokens.length; i++){\n result2 += tokens[i][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser = Parser$1;\nvar Container$2 = container;\nvar Parser2 = parser;\nvar Input$2 = input;\nfunction parse$3(css, opts) {\n var input2 = new Input$2(css, opts);\n var parser2 = new Parser2(input2);\n try {\n parser2.parse();\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e;\n }\n return parser2.root;\n}\nvar parse_1 = parse$3;\nparse$3.default = parse$3;\nContainer$2.registerParse(parse$3);\nvar isClean = symbols.isClean, my = symbols.my;\nvar MapGenerator$1 = mapGenerator;\nvar stringify$2 = stringify_1;\nvar Container$1 = container;\nvar Document$2 = document$1;\nvar warnOnce$1 = warnOnce$2;\nvar Result$2 = result;\nvar parse$2 = parse_1;\nvar Root$3 = root;\nvar TYPE_TO_CLASS_NAME = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN = 0;\nfunction isPromise(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN,\n \"RootExit\"\n ];\n } else {\n events = getEvents(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks(node2) {\n node2[isClean] = false;\n if (node2.nodes) node2.nodes.forEach(function(i) {\n return cleanMarks(i);\n });\n return node2;\n}\nvar postcss$2 = {};\nvar LazyResult$2 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2)) {\n root2 = cleanMarks(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my]) {\n Container$1.rebuild(root2);\n }\n }\n this.result = new Result$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2, {\n postcss: postcss$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin2) {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.prepare) {\n return _extends({}, plugin2, plugin2.prepare(_this.result));\n } else {\n return plugin2;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin2 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin2.postcssPlugin;\n error.setMessage();\n } else if (plugin2.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin2.postcssPlugin;\n var pluginVer = plugin2.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin2, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin2,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\") {\n for(var event in plugin2){\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin2.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS[event]) {\n if (_type_of(plugin2[event]) === \"object\") {\n for(var filter in plugin2[event]){\n if (filter === \"*\") {\n add(plugin2, event, plugin2[event][filter]);\n } else {\n add(plugin2, event + \"-\" + filter.toLowerCase(), plugin2[event][filter]);\n }\n }\n } else if (typeof plugin2[event] === \"function\") {\n add(plugin2, event, plugin2[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i, plugin2, promise, error, root2, stack, promise1, e, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i = 0;\n _state.label = 1;\n case 1:\n if (!(i < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin2 = _this.plugins[i];\n promise = _this.runOnRoot(plugin2);\n if (!isPromise(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean]) return [\n 3,\n 14\n ];\n root2[isClean] = true;\n stack = [\n toStack(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin2, visitor, roots, e;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin2;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e = _state.sent();\n throw _this.handleError(e);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin2) {\n var _this = this;\n this.result.lastPlugin = plugin2;\n try {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin2.Once(root2, _this.helpers);\n });\n if (isPromise(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin2.Once(this.result.root, this.helpers);\n } else if (typeof plugin2 === \"function\") {\n return plugin2(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n var promise = this.runOnRoot(plugin2);\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean]){\n root2[isClean] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin2;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e) {\n throw this.handleError(e, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin2 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin2;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e) {\n throw this.handleError(e, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean]) {\n child[isClean] = true;\n stack.push(toStack(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean] = true;\n var events = getEvents(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2.registerPostcss = function(dependant) {\n postcss$2 = dependant;\n};\nvar lazyResult = LazyResult$2;\nLazyResult$2.default = LazyResult$2;\nRoot$3.registerLazyResult(LazyResult$2);\nDocument$2.registerLazyResult(LazyResult$2);\nvar MapGenerator2 = mapGenerator;\nvar stringify$1 = stringify_1;\nvar warnOnce2 = warnOnce$2;\nvar parse$1 = parse_1;\nvar Result$1 = result;\nvar NoWorkResult$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1;\n this.result = new Result$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult = NoWorkResult$1;\nNoWorkResult$1.default = NoWorkResult$1;\nvar NoWorkResult2 = noWorkResult;\nvar LazyResult$1 = lazyResult;\nvar Document$1 = document$1;\nvar Root$2 = root;\nvar Processor$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.postcss === true) {\n i = i();\n } else if (i.postcss) {\n i = i.postcss;\n }\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.postcssPlugin) {\n normalized.push(i);\n } else if (typeof i === \"function\") {\n normalized.push(i);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2(this, css, opts);\n } else {\n return new LazyResult$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin2) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin2\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor = Processor$1;\nProcessor$1.default = Processor$1;\nRoot$2.registerProcessor(Processor$1);\nDocument$1.registerProcessor(Processor$1);\nvar Declaration$1 = declaration;\nvar PreviousMap2 = previousMap;\nvar Comment$1 = comment;\nvar AtRule$1 = atRule;\nvar Input$1 = input;\nvar Root$1 = root;\nvar Rule$1 = rule;\nfunction fromJSON$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n) {\n return fromJSON$1(n);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n) {\n return fromJSON$1(n, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1 = fromJSON$1;\nfromJSON$1.default = fromJSON$1;\nvar CssSyntaxError2 = cssSyntaxError;\nvar Declaration2 = declaration;\nvar LazyResult2 = lazyResult;\nvar Container2 = container;\nvar Processor2 = processor;\nvar stringify$5 = stringify_1;\nvar fromJSON = fromJSON_1;\nvar Document2 = document$1;\nvar Warning2 = warning;\nvar Comment2 = comment;\nvar AtRule2 = atRule;\nvar Result2 = result;\nvar Input2 = input;\nvar parse = parse_1;\nvar list = list_1;\nvar Rule2 = rule;\nvar Root2 = root;\nvar Node2 = node;\nfunction postcss() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2(plugins);\n}\npostcss.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss.stringify = stringify$5;\npostcss.parse = parse;\npostcss.fromJSON = fromJSON;\npostcss.list = list;\npostcss.comment = function(defaults) {\n return new Comment2(defaults);\n};\npostcss.atRule = function(defaults) {\n return new AtRule2(defaults);\n};\npostcss.decl = function(defaults) {\n return new Declaration2(defaults);\n};\npostcss.rule = function(defaults) {\n return new Rule2(defaults);\n};\npostcss.root = function(defaults) {\n return new Root2(defaults);\n};\npostcss.document = function(defaults) {\n return new Document2(defaults);\n};\npostcss.CssSyntaxError = CssSyntaxError2;\npostcss.Declaration = Declaration2;\npostcss.Container = Container2;\npostcss.Processor = Processor2;\npostcss.Document = Document2;\npostcss.Comment = Comment2;\npostcss.Warning = Warning2;\npostcss.AtRule = AtRule2;\npostcss.Result = Result2;\npostcss.Input = Input2;\npostcss.Rule = Rule2;\npostcss.Root = Root2;\npostcss.Node = Node2;\nLazyResult2.registerPostcss(postcss);\nvar postcss_1 = postcss;\npostcss.default = postcss;\nvar postcss$1 = /* @__PURE__ */ getDefaultExportFromCjs(postcss_1);\npostcss$1.stringify;\npostcss$1.fromJSON;\npostcss$1.plugin;\npostcss$1.parse;\npostcss$1.list;\npostcss$1.document;\npostcss$1.comment;\npostcss$1.atRule;\npostcss$1.rule;\npostcss$1.decl;\npostcss$1.root;\npostcss$1.CssSyntaxError;\npostcss$1.Declaration;\npostcss$1.Container;\npostcss$1.Processor;\npostcss$1.Document;\npostcss$1.Comment;\npostcss$1.Warning;\npostcss$1.AtRule;\npostcss$1.Result;\npostcss$1.Input;\npostcss$1.Rule;\npostcss$1.Root;\npostcss$1.Node;\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = function(obj, key, value) {\n return key in obj ? __defProp(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField = function(obj, key, value) {\n return __defNormalProp(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar StackFrame = /*#__PURE__*/ function() {\n function StackFrame(obj) {\n __publicField(this, \"fileName\");\n __publicField(this, \"functionName\");\n __publicField(this, \"lineNumber\");\n __publicField(this, \"columnNumber\");\n this.fileName = obj.fileName || \"\";\n this.functionName = obj.functionName || \"\";\n this.lineNumber = obj.lineNumber;\n this.columnNumber = obj.columnNumber;\n }\n var _proto = StackFrame.prototype;\n _proto.toString = function toString() {\n var lineNumber = this.lineNumber || \"\";\n var columnNumber = this.columnNumber || \"\";\n if (this.functionName) return this.functionName + \" (\" + this.fileName + \":\" + lineNumber + \":\" + columnNumber + \")\";\n return this.fileName + \":\" + lineNumber + \":\" + columnNumber;\n };\n return StackFrame;\n}();\nvar FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\nvar CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nvar SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nvar ErrorStackParser = {\n /**\n * Given an Error object, extract the most information from it.\n */ parse: function parse(error) {\n if (!error) {\n return [];\n }\n if (// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error.stacktrace !== \"undefined\" || // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error[\"opera#sourceloc\"] !== \"undefined\") {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n console.warn(\"[console-record-plugin]: Failed to parse error object:\", error);\n return [];\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function extractLocation(urlLike) {\n if (urlLike.indexOf(\":\") === -1) {\n return [\n urlLike\n ];\n }\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, \"\"));\n if (!parts) throw new Error(\"Cannot parse given url: \" + urlLike);\n return [\n parts[1],\n parts[2] || void 0,\n parts[3] || void 0\n ];\n },\n parseV8OrIE: function parseV8OrIE(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\"(eval \") > -1) {\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g, \"\");\n }\n var sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\");\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(\" \") || void 0;\n var fileName = [\n \"eval\",\n \"\"\n ].indexOf(locationParts[0]) > -1 ? void 0 : locationParts[0];\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n },\n parseFFOrSafari: function parseFFOrSafari(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\" > eval\") > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, \":$1\");\n }\n if (line.indexOf(\"@\") === -1 && line.indexOf(\":\") === -1) {\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : void 0;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, \"\"));\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }\n }, this);\n },\n parseOpera: function parseOpera(e) {\n if (!e.stacktrace || e.message.indexOf(\"\\n\") > -1 && e.message.split(\"\\n\").length > e.stacktrace.split(\"\\n\").length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split(\"\\n\");\n var result = [];\n for(var i = 2, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n parseOpera10: function parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split(\"\\n\");\n var result = [];\n for(var i = 0, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n functionName: match[3] || void 0,\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function parseOpera11(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function(line) {\n var tokens = line.split(\"@\");\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = tokens.shift() || \"\";\n var functionName = functionCall.replace(//, \"$2\").replace(/\\([^)]*\\)/g, \"\") || void 0;\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n }\n};\nfunction pathToSelector(node) {\n if (!node || !node.outerHTML) {\n return \"\";\n }\n var path = \"\";\n while(node.parentElement){\n var name = node.localName;\n if (!name) {\n break;\n }\n name = name.toLowerCase();\n var parent = node.parentElement;\n var domSiblings = [];\n if (parent.children && parent.children.length > 0) {\n for(var i = 0; i < parent.children.length; i++){\n var sibling = parent.children[i];\n if (sibling.localName && sibling.localName.toLowerCase) {\n if (sibling.localName.toLowerCase() === name) {\n domSiblings.push(sibling);\n }\n }\n }\n }\n if (domSiblings.length > 1) {\n name += \":eq(\" + domSiblings.indexOf(node) + \")\";\n }\n path = name + (path ? \">\" + path : \"\");\n node = parent;\n }\n return path;\n}\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isObjTooDeep(obj, limit) {\n if (limit === 0) {\n return true;\n }\n var keys = Object.keys(obj);\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (isObject(obj[key]) && isObjTooDeep(obj[key], limit - 1)) {\n return true;\n }\n }\n return false;\n}\nfunction stringify(obj, stringifyOptions) {\n var options = {\n numOfKeysLimit: 50,\n depthOfLimit: 4\n };\n Object.assign(options, stringifyOptions);\n var stack = [];\n var keys = [];\n return JSON.stringify(obj, function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) {\n if (stack[0] === value) {\n value = \"[Circular ~]\";\n } else {\n value = \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n }\n }\n } else {\n stack.push(value);\n }\n if (value === null) return value;\n if (value === void 0) return \"undefined\";\n if (shouldIgnore(value)) {\n return toString(value);\n }\n if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"bigint\") {\n return value.toString() + \"n\";\n }\n if (_instanceof(value, Event)) {\n var eventResult = {};\n for(var eventKey in value){\n var eventValue = value[eventKey];\n if (Array.isArray(eventValue)) {\n eventResult[eventKey] = pathToSelector(eventValue.length ? eventValue[0] : null);\n } else {\n eventResult[eventKey] = eventValue;\n }\n }\n return eventResult;\n } else if (_instanceof(value, Node)) {\n if (_instanceof(value, HTMLElement)) {\n return value ? value.outerHTML : \"\";\n }\n return value.nodeName;\n } else if (_instanceof(value, Error)) {\n return value.stack ? value.stack + \"\\nEnd of stack for Error object\" : value.name + \": \" + value.message;\n }\n return value;\n });\n function shouldIgnore(_obj) {\n if (isObject(_obj) && Object.keys(_obj).length > options.numOfKeysLimit) {\n return true;\n }\n if (typeof _obj === \"function\") {\n return true;\n }\n if (isObject(_obj) && isObjTooDeep(_obj, options.depthOfLimit)) {\n return true;\n }\n return false;\n }\n function toString(_obj) {\n var str = _obj.toString();\n if (options.stringLengthLimit && str.length > options.stringLengthLimit) {\n str = \"\" + str.slice(0, options.stringLengthLimit) + \"...\";\n }\n return str;\n }\n}\nvar defaultLogOptions = {\n level: [\n \"assert\",\n \"clear\",\n \"count\",\n \"countReset\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"info\",\n \"log\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"trace\",\n \"warn\"\n ],\n lengthThreshold: 1e3,\n logger: \"console\"\n};\nfunction initLogObserver(cb, win, options) {\n var logOptions = options ? Object.assign({}, defaultLogOptions, options) : defaultLogOptions;\n var loggerType = logOptions.logger;\n if (!loggerType) {\n return function() {};\n }\n var logger;\n if (typeof loggerType === \"string\") {\n logger = win[loggerType];\n } else {\n logger = loggerType;\n }\n var logCount = 0;\n var inStack = false;\n var cancelHandlers = [];\n if (logOptions.level.includes(\"error\")) {\n var errorHandler = function(event) {\n var message = event.message, error = event.error;\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n var payload = [\n stringify(message, logOptions.stringifyOptions)\n ];\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"error\", errorHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"error\", errorHandler);\n });\n var unhandledrejectionHandler = function(event) {\n var error;\n var payload;\n if (_instanceof(event.reason, Error)) {\n error = event.reason;\n payload = [\n stringify(\"Uncaught (in promise) \" + error.name + \": \" + error.message, logOptions.stringifyOptions)\n ];\n } else {\n error = new Error();\n payload = [\n stringify(\"Uncaught (in promise)\", logOptions.stringifyOptions),\n stringify(event.reason, logOptions.stringifyOptions)\n ];\n }\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n });\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(logOptions.level), _step; !(_step = _iterator()).done;){\n var levelType = _step.value;\n cancelHandlers.push(replace(logger, levelType));\n }\n return function() {\n cancelHandlers.forEach(function(h) {\n return h();\n });\n };\n function replace(_logger, level) {\n var _this = this;\n if (!_logger[level]) {\n return function() {};\n }\n return patch(_logger, level, function(original) {\n var _this1 = _this;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n original.apply(_this1, args);\n if (level === \"assert\" && !!args[0]) {\n return;\n }\n if (inStack) {\n return;\n }\n inStack = true;\n try {\n var trace = ErrorStackParser.parse(new Error()).map(function(stackFrame) {\n return stackFrame.toString();\n }).splice(1);\n var argsForPayload = level === \"assert\" ? args.slice(1) : args;\n var payload = argsForPayload.map(function(s) {\n return stringify(s, logOptions.stringifyOptions);\n });\n logCount++;\n if (logCount < logOptions.lengthThreshold) {\n cb({\n level: level,\n trace: trace,\n payload: payload\n });\n } else if (logCount === logOptions.lengthThreshold) {\n cb({\n level: \"warn\",\n trace: [],\n payload: [\n stringify(\"The number of log records reached the threshold.\")\n ]\n });\n }\n } catch (error) {\n original.apply(void 0, [].concat([\n \"rrweb logger error:\",\n error\n ], args));\n } finally{\n inStack = false;\n }\n };\n });\n }\n}\nvar PLUGIN_NAME = \"rrweb/console@1\";\nvar getRecordConsolePlugin = function(options) {\n return {\n name: PLUGIN_NAME,\n observer: initLogObserver,\n options: options\n };\n};\n\nexport { EventType, IncrementalSource, classMatchesRegex, getRecordConsolePlugin, record };\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","import { Promise } from '../promise-polyfill';\nimport { window } from '../window';\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar IDBStorageWrapper = function (dbName, storeName, versionData) {\n this.dbName = dbName;\n this.storeName = storeName;\n this.version = versionData.version;\n this.storeNamesInDb = versionData.storeNames;\n /**\n * @type {Promise|null}\n */\n this.dbPromise = null;\n};\n\nIDBStorageWrapper.prototype._openDb = function () {\n var dbName = this.dbName;\n var version = this.version;\n var storeNamesInDb = this.storeNamesInDb;\n return new Promise(function (resolve, reject) {\n var openRequest = window.indexedDB.open(dbName, version);\n openRequest['onerror'] = function () {\n reject(openRequest.error);\n };\n\n openRequest['onsuccess'] = function () {\n resolve(openRequest.result);\n };\n\n openRequest['onupgradeneeded'] = function (ev) {\n var db = ev.target.result;\n\n storeNamesInDb.forEach(function (storeName) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n });\n };\n });\n};\n\nIDBStorageWrapper.prototype.init = function () {\n if (!window.indexedDB) {\n return Promise.reject('indexedDB is not supported in this browser');\n }\n\n if (!this.dbPromise) {\n this.dbPromise = this._openDb();\n }\n\n return this.dbPromise\n .then(function (dbOrError) {\n if (dbOrError instanceof window['IDBDatabase']) {\n return Promise.resolve();\n } else {\n return Promise.reject(dbOrError);\n }\n });\n};\n\nIDBStorageWrapper.prototype.isInitialized = function () {\n return !!this.dbPromise;\n};\n\n/**\n * @param {IDBTransactionMode} mode\n * @param {function(IDBObjectStore): void} storeCb\n */\nIDBStorageWrapper.prototype.makeTransaction = function (mode, storeCb) {\n var storeName = this.storeName;\n var doTransaction = function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction(storeName, mode);\n transaction.oncomplete = function () {\n resolve(transaction);\n };\n transaction.onabort = transaction.onerror = function () {\n reject(transaction.error);\n };\n\n storeCb(transaction.objectStore(storeName));\n });\n };\n\n return this.dbPromise\n .then(doTransaction)\n .catch(function (err) {\n if (err && err['name'] === 'InvalidStateError') {\n // try reopening the DB if the connection is closed\n this.dbPromise = this._openDb();\n return this.dbPromise.then(doTransaction);\n } else {\n return Promise.reject(err);\n }\n }.bind(this));\n};\n\nIDBStorageWrapper.prototype.setItem = function (key, value) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.put(value, key);\n });\n};\n\nIDBStorageWrapper.prototype.getItem = function (key) {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.get(key);\n }).then(function () {\n return req.result;\n });\n};\n\nIDBStorageWrapper.prototype.removeItem = function (key) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.delete(key);\n });\n};\n\nIDBStorageWrapper.prototype.getAll = function () {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.getAll();\n }).then(function () {\n return req.result;\n });\n};\n\nexport {\n IDBStorageWrapper\n};\n","var MIXPANEL_BROWSER_DB_NAME = 'mixpanelBrowserDb';\nvar RECORDING_EVENTS_STORE_NAME = 'mixpanelRecordingEvents';\nvar RECORDING_REGISTRY_STORE_NAME = 'mixpanelRecordingRegistry';\n\n// Keeping these two properties closeby, as adding additional stores to a DB in IndexedDB requires a version increment\nvar RECORDER_VERSION_DATA = {\n version: 1,\n storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME]\n};\n\nexport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n};\n","/**\n * GDPR utils\n *\n * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection\n * and privacy for all individuals within the European Union. It addresses the export of personal\n * data outside the EU. The GDPR aims primarily to give control back to citizens and residents\n * over their personal data and to simplify the regulatory environment for international business\n * by unifying the regulation within the EU.\n *\n * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK.\n * These functions are used internally by the SDK and are not intended to be publicly exposed.\n */\n\nimport { _, console, getLocalStorage, localStorageSupported } from './utils';\nimport { window } from './window';\n\n/**\n * A function used to track a Mixpanel event (e.g. MixpanelLib.track)\n * @callback trackFunction\n * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc.\n * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself.\n * @param {Function} [callback] If provided, the callback function will be called after tracking the event.\n */\n\n/** Public **/\n\nvar GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_';\n\n/**\n * Opt the user in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function optIn(token, options) {\n _optInOut(true, token, options);\n}\n\n/**\n * Opt the user out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not\n */\nexport function optOut(token, options) {\n _optInOut(false, token, options);\n}\n\n/**\n * Check whether the user has opted in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} whether the user has opted in to the given opt type\n */\nexport function hasOptedIn(token, options) {\n return _getStorageValue(token, options) === '1';\n}\n\n/**\n * Check whether the user has opted out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the user has opted out of the given opt type\n */\nexport function hasOptedOut(token, options) {\n if (_hasDoNotTrackFlagOn(options)) {\n console.warn('This browser has \"Do Not Track\" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the \"Do Not Track\" browser setting, initialize the Mixpanel instance with the config \"ignore_dnt: true\"');\n return true;\n }\n var optedOut = _getStorageValue(token, options) === '0';\n if (optedOut) {\n console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.');\n }\n return optedOut;\n}\n\n/**\n * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @template {Function} M\n * @param {M} method - wrapped method to be executed if the user has not opted out\n * @returns {M} the wrapped method\n */\nexport function addOptOutCheckMixpanelLib(method) {\n return _addOptOutCheck(method, function(name) {\n return this.get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @template {Function} M\n * @param {M} method - wrapped method to be executed if the user has not opted out\n * @returns {M} the wrapped method\n */\nexport function addOptOutCheckMixpanelPeople(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @template {Function} M\n * @param {M} method - wrapped method to be executed if the user has not opted out\n * @returns {M} the wrapped method\n */\nexport function addOptOutCheckMixpanelGroup(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function clearOptInOut(token, options) {\n options = options || {};\n _getStorage(options).remove(\n _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain\n );\n}\n\n/** Private **/\n\n/**\n * Get storage util\n * @param {Object} [options]\n * @param {string} [options.persistenceType]\n * @returns {object} either _.cookie or _.localstorage\n */\nfunction _getStorage(options) {\n options = options || {};\n return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie;\n}\n\n/**\n * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the name of the cookie for the given opt type\n */\nfunction _getStorageKey(token, options) {\n options = options || {};\n return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token;\n}\n\n/**\n * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the value of the cookie for the given opt type\n */\nfunction _getStorageValue(token, options) {\n return _getStorage(options).get(_getStorageKey(token, options));\n}\n\n/**\n * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag\n * in localStorage if it can be written, otherwise in a cookie. Read that store first, and\n * the other one if no flag is there.\n * @param {string} token - Mixpanel project tracking token\n * @param {string} persistenceType - configured persistence type\n * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name\n * @returns {string} the persistence type to read\n */\nfunction _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) {\n if (persistenceType !== 'localStorage') {\n return persistenceType;\n }\n var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie';\n var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null;\n if (hasFlag) {\n return writtenTo;\n }\n return writtenTo === 'localStorage' ? 'cookie' : 'localStorage';\n}\n\n/**\n * Check whether the user has set the DNT/doNotTrack setting to true in their browser\n * @param {Object} [options]\n * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the DNT setting is true\n */\nfunction _hasDoNotTrackFlagOn(options) {\n if (options && options.ignoreDnt) {\n return false;\n }\n var win = (options && options.window) || window;\n var nav = win['navigator'] || {};\n var hasDntOn = false;\n\n _.each([\n nav['doNotTrack'], // standard\n nav['msDoNotTrack'],\n win['doNotTrack']\n ], function(dntValue) {\n if (_.includes([true, 1, '1', 'yes'], dntValue)) {\n hasDntOn = true;\n }\n });\n\n return hasDntOn;\n}\n\n/**\n * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type\n * @param {boolean} optValue - whether to opt the user in or out for the given opt type\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction _optInOut(optValue, token, options) {\n if (!_.isString(token) || !token.length) {\n console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token');\n return;\n }\n\n options = options || {};\n\n _getStorage(options).set(\n _getStorageKey(token, options),\n optValue ? 1 : 0,\n _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null,\n !!options.crossSubdomainCookie,\n !!options.secureCookie,\n !!options.crossSiteCookie,\n options.cookieDomain\n );\n\n if (options.track && optValue) { // only track event if opting in (optValue=true)\n options.track(options.trackEventName || '$opt_in', options.trackProperties, {\n 'send_immediately': true\n });\n }\n}\n\n/**\n * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction _addOptOutCheck(method, getConfigValue) {\n return function() {\n var optedOut = false;\n\n try {\n var token = getConfigValue.call(this, 'token');\n var ignoreDnt = getConfigValue.call(this, 'ignore_dnt');\n var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type');\n var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix');\n var win = getConfigValue.call(this, 'window'); // used to override window during browser tests\n\n if (token) { // if there was an issue getting the token, continue method execution as normal\n optedOut = hasOptedOut(token, {\n ignoreDnt: ignoreDnt,\n persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix),\n persistencePrefix: persistencePrefix,\n window: win\n });\n }\n } catch(err) {\n console.error('Unexpected error when checking tracking opt-out status: ' + err);\n }\n\n if (!optedOut) {\n return method.apply(this, arguments);\n }\n\n var callback = arguments[arguments.length - 1];\n if (typeof(callback) === 'function') {\n callback(0);\n }\n\n return;\n };\n}\n","import { Promise } from './promise-polyfill';\nimport { console_with_prefix, localStorageSupported, getLocalStorage, _ } from './utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n * console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function(key, options) {\n options = options || {};\n\n this.storageKey = key;\n this.storage = options.storage || getLocalStorage();\n this.pollIntervalMS = options.pollIntervalMS || 100;\n this.timeoutMS = options.timeoutMS || 2000;\n\n // dependency-inject promise implementation for testing purposes\n this.promiseImpl = options.promiseImpl || Promise;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function(lockedCB, pid) {\n var Promise = this.promiseImpl;\n return new Promise(_.bind(function (resolve, reject) {\n var i = pid || (new Date().getTime() + '|' + Math.random());\n var startTime = new Date().getTime();\n var key = this.storageKey;\n var pollIntervalMS = this.pollIntervalMS;\n var timeoutMS = this.timeoutMS;\n var storage = this.storage;\n\n var keyX = key + ':X';\n var keyY = key + ':Y';\n var keyZ = key + ':Z';\n\n var delay = function(cb) {\n if (new Date().getTime() - startTime > timeoutMS) {\n logger.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n storage.removeItem(keyZ);\n storage.removeItem(keyY);\n loop();\n return;\n }\n setTimeout(function() {\n try {\n cb();\n } catch(err) {\n reject(err);\n }\n }, pollIntervalMS * (Math.random() + 0.1));\n };\n\n var waitFor = function(predicate, cb) {\n if (predicate()) {\n cb();\n } else {\n delay(function() {\n waitFor(predicate, cb);\n });\n }\n };\n\n var getSetY = function() {\n var valY = storage.getItem(keyY);\n if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases)\n return false;\n } else {\n storage.setItem(keyY, i);\n if (storage.getItem(keyY) === i) {\n return true;\n } else {\n if (!localStorageSupported(storage, true)) {\n reject(new Error('localStorage support dropped while acquiring lock'));\n }\n return false;\n }\n }\n };\n\n var loop = function() {\n storage.setItem(keyX, i);\n\n waitFor(getSetY, function() {\n if (storage.getItem(keyX) === i) {\n criticalSection();\n return;\n }\n\n delay(function() {\n if (storage.getItem(keyY) !== i) {\n loop();\n return;\n }\n waitFor(function() {\n return !storage.getItem(keyZ);\n }, criticalSection);\n });\n });\n };\n\n var criticalSection = function() {\n storage.setItem(keyZ, '1');\n var removeLock = function () {\n storage.removeItem(keyZ);\n if (storage.getItem(keyY) === i) {\n storage.removeItem(keyY);\n }\n if (storage.getItem(keyX) === i) {\n storage.removeItem(keyX);\n }\n };\n\n lockedCB()\n .then(function (ret) {\n removeLock();\n resolve(ret);\n })\n .catch(function (err) {\n removeLock();\n reject(err);\n });\n };\n\n try {\n if (localStorageSupported(storage, true)) {\n loop();\n } else {\n throw new Error('localStorage support check failed');\n }\n } catch(err) {\n reject(err);\n }\n }, this));\n};\n\nexport { SharedLock };\n","import { Promise } from '../promise-polyfill';\nimport { _, JSONParse, JSONStringify, getLocalStorage } from '../utils'; // eslint-disable-line camelcase\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar LocalStorageWrapper = function (storageOverride) {\n this.storage = storageOverride || getLocalStorage();\n};\n\nLocalStorageWrapper.prototype.init = function () {\n if (!this.storage) {\n return Promise.reject(new Error('localStorage is not available'));\n }\n return Promise.resolve();\n};\n\nLocalStorageWrapper.prototype.isInitialized = function () {\n return true;\n};\n\nLocalStorageWrapper.prototype.setItem = function (key, value) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.setItem(key, JSONStringify(value));\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nLocalStorageWrapper.prototype.getItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n var item;\n try {\n item = JSONParse(this.storage.getItem(key));\n } catch (e) {\n reject(e);\n }\n resolve(item);\n }, this));\n};\n\nLocalStorageWrapper.prototype.removeItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.removeItem(key);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nexport { LocalStorageWrapper };\n","import { SharedLock } from './shared-lock';\nimport { batchedThrottle, cheap_guid, console_with_prefix, localStorageSupported, _ } from './utils'; // eslint-disable-line camelcase\nimport { LocalStorageWrapper } from './storage/local-storage';\nimport { Promise } from './promise-polyfill';\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function (storageKey, options) {\n options = options || {};\n this.storageKey = storageKey;\n this.usePersistence = options.usePersistence;\n if (this.usePersistence) {\n this.queueStorage = options.queueStorage || new LocalStorageWrapper();\n this.lock = new SharedLock(storageKey, {\n storage: options.sharedLockStorage,\n timeoutMS: options.sharedLockTimeoutMS,\n });\n }\n this.reportError = options.errorReporter || _.bind(logger.error, logger);\n\n this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n this.memQueue = [];\n this.initialized = false;\n\n if (options.enqueueThrottleMs) {\n this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs);\n } else {\n this.enqueuePersisted = _.bind(function (queueEntry) {\n return this._enqueuePersisted([queueEntry]);\n }, this);\n }\n};\n\nRequestQueue.prototype.ensureInit = function () {\n if (this.initialized || !this.usePersistence) {\n return Promise.resolve();\n }\n\n return this.queueStorage\n .init()\n .then(_.bind(function () {\n this.initialized = true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error initializing queue persistence. Disabling persistence', err);\n this.initialized = true;\n this.usePersistence = false;\n }, this));\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function (item, flushInterval) {\n var queueEntry = {\n 'id': cheap_guid(),\n 'flushAfter': new Date().getTime() + flushInterval * 2,\n 'payload': item\n };\n\n if (!this.usePersistence) {\n this.memQueue.push(queueEntry);\n return Promise.resolve(true);\n } else {\n return this.enqueuePersisted(queueEntry);\n }\n};\n\nRequestQueue.prototype._enqueuePersisted = function (queueEntries) {\n var enqueueItem = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n return this.saveToStorage(storedQueue.concat(queueEntries));\n }, this))\n .then(_.bind(function (succeeded) {\n // only add to in-memory queue when storage succeeds\n if (succeeded) {\n this.memQueue = this.memQueue.concat(queueEntries);\n }\n\n return succeeded;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error enqueueing items', err, queueEntries);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(enqueueItem, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function (batchSize) {\n var batch = this.memQueue.slice(0, batchSize);\n if (this.usePersistence && batch.length < batchSize) {\n // don't need lock just to read events; localStorage is thread-safe\n // and the worst that could happen is a duplicate send of some\n // orphaned events, which will be deduplicated on the server side\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n if (storedQueue.length) {\n // item IDs already in batch; don't duplicate out of storage\n var idsInBatch = {}; // poor man's Set\n _.each(batch, function (item) {\n idsInBatch[item['id']] = true;\n });\n\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n item.orphaned = true;\n batch.push(item);\n if (batch.length >= batchSize) {\n break;\n }\n }\n }\n }\n\n return batch;\n }, this));\n } else {\n return Promise.resolve(batch);\n }\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function (items, idSet) {\n var filteredItems = [];\n _.each(items, function (item) {\n if (item['id'] && !idSet[item['id']]) {\n filteredItems.push(item);\n }\n });\n return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function (ids) {\n var idSet = {}; // poor man's Set\n _.each(ids, function (id) {\n idSet[id] = true;\n });\n\n this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n var removeFromStorage = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n // an extra check: did storage report success but somehow\n // the items are still there?\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (item['id'] && !!idSet[item['id']]) {\n throw new Error('Item not removed from storage');\n }\n }\n return true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error removing items', err, ids);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(removeFromStorage, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n if (!localStorageSupported(this.lock.storage, true)) {\n // Looks like localStorage writes have stopped working sometime after\n // initialization (probably full), and so nobody can acquire locks\n // anymore. Consider it temporarily safe to remove items without the\n // lock, since nobody's writing successfully anyway.\n return removeFromStorage()\n .then(_.bind(function (success) {\n if (!success) {\n // OK, we couldn't even write out the smaller queue. Try clearing it\n // entirely.\n return this.queueStorage.removeItem(this.storageKey).then(function () {\n return success;\n });\n }\n return success;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n return false;\n }, this));\n } else {\n return false;\n }\n }, this));\n }\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function (existingItems, itemsToUpdate) {\n var newItems = [];\n _.each(existingItems, function (item) {\n var id = item['id'];\n if (id in itemsToUpdate) {\n var newPayload = itemsToUpdate[id];\n if (newPayload !== null) {\n item['payload'] = newPayload;\n newItems.push(item);\n }\n } else {\n // no update\n newItems.push(item);\n }\n });\n return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function (itemsToUpdate) {\n this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n return this.lock\n .withLock(_.bind(function lockAcquired() {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n return this.saveToStorage(storedQueue);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error updating items', itemsToUpdate, err);\n return false;\n }, this));\n }, this), this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.getItem(this.storageKey);\n }, this))\n .then(_.bind(function (storageEntry) {\n if (storageEntry) {\n if (!_.isArray(storageEntry)) {\n this.reportError('Invalid storage entry:', storageEntry);\n storageEntry = null;\n }\n }\n return storageEntry || [];\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error retrieving queue', err);\n return [];\n }, this));\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function (queue) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.setItem(this.storageKey, queue);\n }, this))\n .then(function () {\n return true;\n })\n .catch(_.bind(function (err) {\n this.reportError('Error saving queue', err);\n return false;\n }, this));\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function () {\n this.memQueue = [];\n\n if (this.usePersistence) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.removeItem(this.storageKey);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n }, this));\n } else {\n return Promise.resolve();\n }\n};\n\nexport { RequestQueue };\n","import { Config } from './config';\nimport { Promise } from './promise-polyfill';\nimport { RequestQueue } from './request-queue';\nimport { console_with_prefix, isOnline, _ } from './utils'; // eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function(storageKey, options) {\n this.errorReporter = options.errorReporter;\n this.queue = new RequestQueue(storageKey, {\n errorReporter: _.bind(this.reportError, this),\n queueStorage: options.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n sharedLockTimeoutMS: options.sharedLockTimeoutMS,\n usePersistence: options.usePersistence,\n enqueueThrottleMs: options.enqueueThrottleMs\n });\n\n this.libConfig = options.libConfig;\n this.sendRequest = options.sendRequestFunc;\n this.beforeSendHook = options.beforeSendHook;\n this.stopAllBatching = options.stopAllBatchingFunc;\n\n // seed variable batch size + flush interval with configured values\n this.batchSize = this.libConfig['batch_size'];\n this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n\n this.stopped = !this.libConfig['batch_autostart'];\n this.consecutiveRemovalFailures = 0;\n\n // extra client-side dedupe\n this.itemIdsSentSuccessfully = {};\n\n // Make the flush occur at the interval specified by flushIntervalMs, default behavior will attempt consecutive flushes\n // as long as the queue is not empty. This is useful for high-frequency events like Session Replay where we might end up\n // in a request loop and get ratelimited by the server.\n this.flushOnlyOnInterval = options.flushOnlyOnInterval || false;\n\n this._flushPromise = null;\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function(item) {\n return this.queue.enqueue(item, this.flushInterval);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function() {\n this.stopped = false;\n this.consecutiveRemovalFailures = 0;\n return this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function() {\n this.stopped = true;\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n this.timeoutID = null;\n }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function() {\n return this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function() {\n this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function() {\n this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function(flushMS) {\n this.flushInterval = flushMS;\n if (!this.stopped) { // don't schedule anymore if batching has been stopped\n this.timeoutID = setTimeout(_.bind(function() {\n if (!this.stopped) {\n this._flushPromise = this.flush();\n }\n }, this), this.flushInterval);\n }\n};\n\n/**\n * Send a request using the sendRequest callback, but promisified.\n * TODO: sendRequest should be promisified in the first place.\n */\nRequestBatcher.prototype.sendRequestPromise = function(data, options) {\n return new Promise(_.bind(function(resolve) {\n this.sendRequest(data, options, resolve);\n }, this));\n};\n\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function(options) {\n if (this.requestInProgress) {\n logger.log('Flush: Request already in progress');\n return Promise.resolve();\n }\n\n this.requestInProgress = true;\n\n options = options || {};\n var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n var startTime = new Date().getTime();\n var currentBatchSize = this.batchSize;\n\n return this.queue.fillBatch(currentBatchSize)\n .then(_.bind(function(batch) {\n\n // if there's more items in the queue than the batch size, attempt\n // to flush again after the current batch is done.\n var attemptSecondaryFlush = batch.length === currentBatchSize;\n var dataForRequest = [];\n var transformedItems = {};\n _.each(batch, function(item) {\n var payload = item['payload'];\n if (this.beforeSendHook && !item.orphaned) {\n payload = this.beforeSendHook(payload);\n }\n if (payload) {\n // mp_sent_by_lib_version prop captures which lib version actually\n // sends each event (regardless of which version originally queued\n // it for sending)\n if (payload['event'] && payload['properties']) {\n payload['properties'] = _.extend(\n {},\n payload['properties'],\n {'mp_sent_by_lib_version': Config.LIB_VERSION}\n );\n }\n var addPayload = true;\n var itemId = item['id'];\n if (itemId) {\n if ((this.itemIdsSentSuccessfully[itemId] || 0) > 5) {\n this.reportError('[dupe] item ID sent too many times, not sending', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n addPayload = false;\n }\n } else {\n this.reportError('[dupe] found item with no ID', {item: item});\n }\n\n if (addPayload) {\n dataForRequest.push(payload);\n }\n }\n transformedItems[item['id']] = payload;\n }, this);\n\n if (dataForRequest.length < 1) {\n this.requestInProgress = false;\n this.resetFlush();\n return Promise.resolve(); // nothing to do\n }\n\n var removeItemsFromQueue = _.bind(function () {\n return this.queue\n .removeItemsByID(\n _.map(batch, function (item) {\n return item['id'];\n })\n )\n .then(_.bind(function (succeeded) {\n // client-side dedupe\n _.each(batch, _.bind(function(item) {\n var itemId = item['id'];\n if (itemId) {\n this.itemIdsSentSuccessfully[itemId] = this.itemIdsSentSuccessfully[itemId] || 0;\n this.itemIdsSentSuccessfully[itemId]++;\n if (this.itemIdsSentSuccessfully[itemId] > 5) {\n this.reportError('[dupe] item ID sent too many times', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n }\n } else {\n this.reportError('[dupe] found item with no ID while removing', {item: item});\n }\n }, this));\n\n if (succeeded) {\n this.consecutiveRemovalFailures = 0;\n if (this.flushOnlyOnInterval && !attemptSecondaryFlush) {\n this.resetFlush(); // schedule next batch with a delay\n return Promise.resolve();\n } else {\n return this.flush(); // handle next batch if the queue isn't empty\n }\n } else {\n if (++this.consecutiveRemovalFailures > 5) {\n this.reportError('Too many queue failures; disabling batching system.');\n this.stopAllBatching();\n } else {\n this.resetFlush();\n }\n return Promise.resolve();\n }\n }, this));\n }, this);\n\n var batchSendCallback = _.bind(function(res) {\n this.requestInProgress = false;\n\n try {\n\n // handle API response in a try-catch to make sure we can reset the\n // flush operation if something goes wrong\n\n if (options.unloading) {\n // update persisted data to include hook transformations\n return this.queue.updatePayloads(transformedItems);\n } else if (\n _.isObject(res) &&\n res.error === 'timeout' &&\n new Date().getTime() - startTime >= timeoutMS\n ) {\n this.reportError('Network timeout; retrying');\n return this.flush();\n } else if (\n _.isObject(res) &&\n (\n res.httpStatusCode >= 500\n || res.httpStatusCode === 429\n || (res.httpStatusCode <= 0 && !isOnline())\n || res.error === 'timeout'\n )\n ) {\n // network or API error, or 429 Too Many Requests, retry\n var retryMS = this.flushInterval * 2;\n if (res.retryAfter) {\n retryMS = (parseInt(res.retryAfter, 10) * 1000) || retryMS;\n }\n retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n this.reportError('Error; retry in ' + retryMS + ' ms');\n this.scheduleFlush(retryMS);\n return Promise.resolve();\n } else if (_.isObject(res) && res.httpStatusCode === 413) {\n // 413 Payload Too Large\n if (batch.length > 1) {\n var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n this.reportError('413 response; reducing batch size to ' + this.batchSize);\n this.resetFlush();\n return Promise.resolve();\n } else {\n this.reportError('Single-event request too large; dropping', batch);\n this.resetBatchSize();\n return removeItemsFromQueue();\n }\n } else {\n // successful network request+response; remove each item in batch from queue\n // (even if it was e.g. a 400, in which case retrying won't help)\n return removeItemsFromQueue();\n }\n } catch(err) {\n this.reportError('Error handling API response', err);\n this.resetFlush();\n }\n }, this);\n var requestOptions = {\n method: 'POST',\n verbose: true,\n ignore_json_errors: true, // eslint-disable-line camelcase\n timeout_ms: timeoutMS // eslint-disable-line camelcase\n };\n if (options.unloading) {\n requestOptions.transport = 'sendBeacon';\n }\n logger.log('MIXPANEL REQUEST:', dataForRequest);\n return this.sendRequestPromise(dataForRequest, requestOptions).then(batchSendCallback);\n }, this))\n .catch(_.bind(function(err) {\n this.reportError('Error flushing request queue', err);\n this.resetFlush();\n }, this));\n};\n\n/**\n * Log error to global logger and optional user-defined logger.\n */\nRequestBatcher.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n if (this.errorReporter) {\n try {\n if (!(err instanceof Error)) {\n err = new Error(msg);\n }\n this.errorReporter(msg, err);\n } catch(err) {\n logger.error(err);\n }\n }\n};\n\nexport { RequestBatcher };\n","import { _ } from '../utils';\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n * @returns {boolean}\n */\nvar isRecordingExpired = function(serializedRecording) {\n var now = Date.now();\n return !serializedRecording || now > serializedRecording['maxExpires'] || now > serializedRecording['idleExpires'];\n};\n\n\nvar RECORD_ENQUEUE_THROTTLE_MS = 250;\n\nvar validateAllowedOrigins = function(origins, logger) {\n if (!_.isArray(origins)) {\n if (origins) {\n logger.critical('record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled.');\n }\n return [];\n }\n var valid = [];\n for (var i = 0; i < origins.length; i++) {\n try {\n var origin = new URL(origins[i]).origin;\n if (origin === 'null') {\n logger.critical(origins[i] + ' has an opaque origin. Skipping this entry.');\n continue;\n }\n valid.push(origin);\n } catch (e) {\n logger.critical(origins[i] + ' is not a valid origin URL. Skipping this entry.');\n }\n }\n return valid;\n};\n\nexport {\n isRecordingExpired,\n RECORD_ENQUEUE_THROTTLE_MS,\n validateAllowedOrigins\n};\n","// stateless utils\n// mostly from https://github.com/mixpanel/mixpanel-js/blob/989ada50f518edab47b9c4fd9535f9fbd5ec5fc0/src/autotrack-utils.js\n\nimport { _, console_with_prefix, document, safewrap } from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\n\nvar EV_CHANGE = 'change';\nvar EV_CLICK = 'click';\nvar EV_HASHCHANGE = 'hashchange';\nvar EV_INPUT = 'input';\nvar EV_LOAD = 'load';\nvar EV_MP_LOCATION_CHANGE = 'mp_locationchange';\nvar EV_POPSTATE = 'popstate';\n// TODO scrollend isn't available in Safari: document or polyfill?\nvar EV_SCROLLEND = 'scrollend';\nvar EV_SCROLL = 'scroll';\nvar EV_SELECT = 'select';\nvar EV_SUBMIT = 'submit';\nvar EV_TOGGLE = 'toggle';\nvar EV_VISIBILITYCHANGE = 'visibilitychange';\n\nvar CLICK_EVENT_PROPS = [\n 'clientX', 'clientY',\n 'offsetX', 'offsetY',\n 'pageX', 'pageY',\n 'screenX', 'screenY',\n 'x', 'y'\n];\nvar OPT_IN_CLASSES = ['mp-include'];\nvar OPT_OUT_CLASSES = ['mp-no-track'];\nvar SENSITIVE_DATA_CLASSES = OPT_OUT_CLASSES.concat(['mp-sensitive']);\nvar TRACKED_ATTRS = [\n 'aria-label', 'aria-labelledby', 'aria-describedby',\n 'href', 'name', 'role', 'title', 'type'\n];\n\nvar INTERACTIVE_ARIA_ROLES = {\n 'button': true,\n 'checkbox': true,\n 'combobox': true,\n 'grid': true,\n 'link': true,\n 'listbox': true,\n 'menu': true,\n 'menubar': true,\n 'menuitem': true,\n 'menuitemcheckbox': true,\n 'menuitemradio': true,\n 'navigation': true,\n 'option': true,\n 'radio': true,\n 'radiogroup': true,\n 'searchbox': true,\n 'slider': true,\n 'spinbutton': true,\n 'switch': true,\n 'tab': true,\n 'tablist': true,\n 'textbox': true,\n 'tree': true,\n 'treegrid': true,\n 'treeitem': true\n};\n\nvar ALWAYS_NON_INTERACTIVE_TAGS = {\n // Document metadata\n 'base': true,\n 'head': true,\n 'html': true,\n 'link': true,\n 'meta': true,\n 'script': true,\n 'style': true,\n 'title': true,\n // Text formatting\n 'br': true,\n 'hr': true,\n 'wbr': true,\n // Other\n 'noscript': true,\n 'picture': true,\n 'source': true,\n 'template': true,\n 'track': true\n};\n\n// Common container tags that need additional checks\nvar TEXT_CONTAINER_TAGS = {\n 'article': true,\n 'div': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'p': true,\n 'section': true,\n 'span': true\n};\n\nvar EVENT_HANDLER_ATTRIBUTES = [\n 'onclick', 'onmousedown', 'onmouseup', 'onpointerdown', 'onpointerup', 'ontouchend', 'ontouchstart'\n];\n\nvar MAX_DEPTH = 5;\n\nvar logger = console_with_prefix('autocapture');\n\n\nfunction getClasses(el) {\n var classes = {};\n var classList = getClassName(el).split(' ');\n for (var i = 0; i < classList.length; i++) {\n var cls = classList[i];\n if (cls) {\n classes[cls] = true;\n }\n }\n return classes;\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n * @param {Element} el - element to get the className of\n * @returns {string} the element's class\n */\nfunction getClassName(el) {\n switch(typeof el.className) {\n case 'string':\n return el.className;\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n return el.className.baseVal || el.getAttribute('class') || '';\n default: // future proof\n return '';\n }\n}\n\nfunction getPreviousElementSibling(el) {\n if (el.previousElementSibling) {\n return el.previousElementSibling;\n } else {\n do {\n el = el.previousSibling;\n } while (el && !isElementNode(el));\n return el;\n }\n}\n\nfunction getPropertiesFromElement(el, ev, blockAttrsSet, extraAttrs, allowElementCallback, allowSelectors) {\n var props = {\n '$classes': getClassName(el).split(' '),\n '$tag_name': el.tagName.toLowerCase()\n };\n var elId = el.id;\n if (elId) {\n props['$id'] = elId;\n }\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors)) {\n _.each(TRACKED_ATTRS.concat(extraAttrs), function(attr) {\n if (el.hasAttribute(attr) && !blockAttrsSet[attr]) {\n var attrVal = el.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$attr-' + attr] = attrVal;\n }\n }\n });\n }\n\n var nthChild = 1;\n var nthOfType = 1;\n var currentElem = el;\n while (currentElem = getPreviousElementSibling(currentElem)) { // eslint-disable-line no-cond-assign\n nthChild++;\n if (currentElem.tagName === el.tagName) {\n nthOfType++;\n }\n }\n props['$nth_child'] = nthChild;\n props['$nth_of_type'] = nthOfType;\n\n return props;\n}\n\nfunction getPropsForDOMEvent(ev, config) {\n var allowElementCallback = config.allowElementCallback;\n var allowSelectors = config.allowSelectors || [];\n var blockAttrs = config.blockAttrs || [];\n var blockElementCallback = config.blockElementCallback;\n var blockSelectors = config.blockSelectors || [];\n var captureTextContent = config.captureTextContent || false;\n var captureExtraAttrs = config.captureExtraAttrs || [];\n var capturedForHeatMap = config.capturedForHeatMap || false;\n\n // convert array to set every time, as the config may have changed\n var blockAttrsSet = {};\n _.each(blockAttrs, function(attr) {\n blockAttrsSet[attr] = true;\n });\n\n var props = null;\n\n var target = typeof ev.target === 'undefined' ? ev.srcElement : ev.target;\n if (isTextNode(target)) { // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = target.parentNode;\n }\n\n if (\n shouldTrackDomEvent(target, ev) &&\n isElementAllowed(target, ev, allowElementCallback, allowSelectors) &&\n !isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n var targetElementList = [target];\n var curEl = target;\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n targetElementList.push(curEl.parentNode);\n curEl = curEl.parentNode;\n }\n\n var elementsJson = [];\n var href, explicitNoTrack = false;\n _.each(targetElementList, function(el) {\n var shouldTrackDetails = shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors);\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (!blockAttrsSet['href'] && el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href');\n href = shouldTrackDetails && shouldTrackValue(href) && href;\n }\n\n if (isElementBlocked(el, ev, blockElementCallback, blockSelectors)) {\n explicitNoTrack = true;\n }\n\n elementsJson.push(getPropertiesFromElement(el, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors));\n }, this);\n\n if (!explicitNoTrack) {\n var docElement = document['documentElement'];\n props = {\n '$event_type': ev.type,\n '$host': window.location.host,\n '$pathname': window.location.pathname,\n '$elements': elementsJson,\n '$el_attr__href': href,\n '$viewportHeight': Math.max(docElement['clientHeight'], window['innerHeight'] || 0),\n '$viewportWidth': Math.max(docElement['clientWidth'], window['innerWidth'] || 0),\n '$pageHeight': document['body']['offsetHeight'] || 0,\n '$pageWidth': document['body']['offsetWidth'] || 0,\n };\n _.each(captureExtraAttrs, function(attr) {\n if (!blockAttrsSet[attr] && target.hasAttribute(attr)) {\n var attrVal = target.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$el_attr__' + attr] = attrVal;\n }\n }\n });\n\n if (captureTextContent) {\n elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (ev.type === EV_CLICK) {\n _.each(CLICK_EVENT_PROPS, function(prop) {\n if (prop in ev) {\n props['$' + prop] = ev[prop];\n }\n });\n if (capturedForHeatMap) {\n props['$captured_for_heatmap'] = true;\n }\n target = guessRealClickTarget(ev);\n }\n // prioritize text content from \"real\" click target if different from original target\n if (captureTextContent) {\n var elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (target) {\n // target may have been recalculated; check allowlists and blocklists again\n if (\n !isElementAllowed(target, ev, allowElementCallback, allowSelectors) ||\n isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n return null;\n }\n\n var targetProps = getPropertiesFromElement(target, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors);\n props['$target'] = targetProps;\n // pull up more props onto main event props\n props['$el_classes'] = targetProps['$classes'];\n _.extend(props, _.strip_empty_properties({\n '$el_id': targetProps['$id'],\n '$el_tag_name': targetProps['$tag_name']\n }));\n }\n }\n }\n\n return props;\n}\n\n\n/**\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {string} the element's direct text content\n */\nfunction getSafeText(el, ev, allowElementCallback, allowSelectors) {\n var elText = '';\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) && el.childNodes && el.childNodes.length) {\n _.each(el.childNodes, function(child) {\n if (isTextNode(child) && child.textContent) {\n elText += child.textContent.trim()\n // scrub potentially sensitive values\n .split(/(\\s+)/).filter(shouldTrackValue).join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ').replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255);\n }\n });\n }\n\n return elText.trim();\n}\n\nfunction guessRealClickTarget(ev) {\n var target = ev.target;\n var composedPath = ev['composedPath']();\n for (var i = 0; i < composedPath.length; i++) {\n var node = composedPath[i];\n if (\n isTag(node, 'a') ||\n isTag(node, 'button') ||\n isTag(node, 'input') ||\n isTag(node, 'select') ||\n (node.getAttribute && node.getAttribute('role') === 'button')\n ) {\n target = node;\n break;\n }\n if (node === target) {\n break;\n }\n }\n return target;\n}\n\nfunction isElementAllowed(el, ev, allowElementCallback, allowSelectors) {\n if (allowElementCallback) {\n try {\n if (!allowElementCallback(el, ev)) {\n return false;\n }\n } catch (err) {\n logger.critical('Error while checking element in allowElementCallback', err);\n return false;\n }\n }\n\n if (!allowSelectors.length) {\n // no allowlist; all elements are fair game\n return true;\n }\n\n for (var i = 0; i < allowSelectors.length; i++) {\n var sel = allowSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n return false;\n}\n\nfunction isElementBlocked(el, ev, blockElementCallback, blockSelectors) {\n var i;\n\n if (blockElementCallback) {\n try {\n if (blockElementCallback(el, ev)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking element in blockElementCallback', err);\n return true;\n }\n }\n\n if (blockSelectors && blockSelectors.length) {\n // programmatically prevent tracking of elements that match CSS selectors\n for (i = 0; i < blockSelectors.length; i++) {\n var sel = blockSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n }\n\n // allow users to programmatically prevent tracking of elements by adding default classes such as 'mp-no-track'\n var classes = getClasses(el);\n for (i = 0; i < OPT_OUT_CLASSES.length; i++) {\n if (classes[OPT_OUT_CLASSES[i]]) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM node has nodeType Node.ELEMENT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of the correct nodeType\n */\nfunction isElementNode(node) {\n return node && node.nodeType === 1; // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nfunction isTag(el, tag) {\n return el && el.tagName && el.tagName.toLowerCase() === tag.toLowerCase();\n}\n\n/*\n * Check whether a DOM node is a TEXT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of type Node.TEXT_NODE\n */\nfunction isTextNode(node) {\n return node && node.nodeType === 3; // Node.TEXT_NODE - use integer constant for browser portability\n}\n\nfunction minDOMApisSupported() {\n try {\n var testEl = document.createElement('div');\n return !!testEl['matches'];\n } catch (err) {\n return false;\n }\n}\n\nfunction weakSetSupported() {\n return typeof WeakSet !== 'undefined';\n}\n\n/*\n * Check whether a DOM event should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} ev - event to check\n * @returns {boolean} whether the event should be tracked\n */\nfunction shouldTrackDomEvent(el, ev) {\n if (!el || isTag(el, 'html') || !isElementNode(el)) {\n return false;\n }\n var tag = el.tagName.toLowerCase();\n switch (tag) {\n case 'form':\n return ev.type === EV_SUBMIT;\n case 'input':\n if (['button', 'submit'].indexOf(el.getAttribute('type')) === -1) {\n return ev.type === EV_CHANGE;\n } else {\n return ev.type === EV_CLICK;\n }\n case 'select':\n case 'textarea':\n return ev.type === EV_CHANGE;\n default:\n return ev.type === EV_CLICK;\n }\n}\n\nfunction elementLooksSensitive(el) {\n var name = (el.name || el.id || '').toString().toLowerCase();\n if (typeof name === 'string') { // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n var sensitiveNameRegex = /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i;\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM element should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) {\n var i;\n\n if (!isElementAllowed(el, ev, allowElementCallback, allowSelectors)) {\n return false;\n }\n\n for (var curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode) {\n var classes = getClasses(curEl);\n for (i = 0; i < SENSITIVE_DATA_CLASSES.length; i++) {\n if (classes[SENSITIVE_DATA_CLASSES[i]]) {\n return false;\n }\n }\n }\n\n var elClasses = getClasses(el);\n for (i = 0; i < OPT_IN_CLASSES.length; i++) {\n if (elClasses[OPT_IN_CLASSES[i]]) {\n return true;\n }\n }\n\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n if (\n isTag(el, 'input') ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return false;\n }\n\n // don't include hidden or password fields\n var type = el.type || '';\n if (typeof type === 'string') { // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch(type.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n if (elementLooksSensitive(el)) {\n return false;\n }\n\n return true;\n}\n\n\n/*\n * Check whether a string value should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackValue(value) {\n if (value === null || _.isUndefined(value)) {\n return false;\n }\n\n if (typeof value === 'string') {\n value = value.trim();\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n var ccRegex = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false;\n }\n\n // check to see if input value looks like a social security number\n var ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(value)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Creates a cross-browser compatible scroll end function with appropriate event listener.\n * For browsers that support scrollend, returns the original function with scrollend event.\n * For browsers without scrollend support, returns a debounced function that triggers\n * 100ms after the last scroll event to simulate scrollend behavior.\n * @param {Function} originalFunction - The function to call when scrolling ends\n * @returns {Object} Object containing listener function and eventType string\n * @returns {Function} returns.listener - The wrapped function to use as event listener\n * @returns {string} returns.eventType - The event type to listen for ('scrollend' or 'scroll')\n */\nfunction getPolyfillScrollEndFunction(originalFunction) {\n var supportsScrollEnd = 'onscrollend' in window;\n var polyfillFunction = safewrap(originalFunction);\n var polyfillEvent = EV_SCROLLEND;\n if (!supportsScrollEnd) {\n // Polyfill for browsers without scrollend support: wait 100ms after the last scroll event\n // https://developer.chrome.com/blog/scrollend-a-new-javascript-event\n var scrollTimer = null;\n var scrollDelayMs = 100;\n\n polyfillFunction = safewrap(function() {\n clearTimeout(scrollTimer);\n scrollTimer = setTimeout(originalFunction, scrollDelayMs);\n });\n\n polyfillEvent = EV_SCROLL;\n }\n\n return {\n listener: polyfillFunction,\n eventType: polyfillEvent\n };\n}\n\nfunction hasInlineEventHandlers(element) {\n for (var i = 0; i < EVENT_HANDLER_ATTRIBUTES.length; i++) {\n if (element.hasAttribute(EVENT_HANDLER_ATTRIBUTES[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction hasInteractiveAriaRole(element) {\n var role = element.getAttribute('role');\n if (!role) return false;\n\n // Handle invalid markup where multiple roles might be specified\n // Only the first token is recognized per ARIA spec\n var primaryRole = role.trim().split(/\\s+/)[0].toLowerCase();\n\n return INTERACTIVE_ARIA_ROLES[primaryRole];\n}\n\nfunction hasAnyInteractivityIndicators(element) {\n var tagName = element.tagName.toLowerCase();\n\n // Check for interactive HTML elements\n if (tagName === 'button' ||\n tagName === 'input' ||\n tagName === 'select' ||\n tagName === 'textarea' ||\n tagName === 'details' ||\n tagName === 'dialog') {\n return true;\n }\n\n if (element.isContentEditable) {\n return true;\n }\n\n if (element.onclick || element.onmousedown || element.onmouseup || element.ontouchstart || element.ontouchend) {\n return true;\n }\n\n if (hasInlineEventHandlers(element)) {\n return true;\n }\n\n if (hasInteractiveAriaRole(element)) {\n return true;\n }\n\n if (tagName === 'a' && element.hasAttribute('href')) {\n return true;\n }\n\n if (element.hasAttribute('tabindex')) {\n return true;\n }\n\n return false;\n}\n\n\nfunction isDefinitelyNonInteractive(element) {\n if (!element || !element.tagName) {\n return true;\n }\n\n var tagName = element.tagName.toLowerCase();\n\n // These tags are definitely non-interactive\n if (ALWAYS_NON_INTERACTIVE_TAGS[tagName]) {\n return true;\n }\n\n // For all other elements, we can only be certain they're non-interactive if they lack ALL indicators of interactivity\n // Check for any signs of interactivity\n if (hasAnyInteractivityIndicators(element)) {\n return false;\n }\n\n // Check parent chain for interactive context\n var parent = element.parentElement;\n var depth = 0;\n\n while (parent && depth < MAX_DEPTH) {\n if (hasAnyInteractivityIndicators(parent)) {\n return false; // Element is inside an interactive parent\n }\n\n if (parent.getRootNode && parent.getRootNode() !== document) {\n var root = parent.getRootNode();\n if (root.host && hasAnyInteractivityIndicators(root.host)) {\n return false; // Inside an interactive shadow host\n }\n }\n\n parent = parent.parentElement;\n depth++;\n }\n\n // Pure text containers without any interactive context\n if (TEXT_CONTAINER_TAGS[tagName]) {\n // These are non-interactive ONLY if they have no interactive indicators (already checked as part of hasAnyInteractivityIndicators)\n return true;\n }\n\n // Default: we can't be certain it's non-interactive\n return false;\n}\n\n/**\n * Get the composed path of a click event for elements embedded in shadow DOM.\n * @param {Event} event - event to get the composed path from\n * @returns {Array} the composed path of the click event\n*/\nfunction getClickEventComposedPath(event) {\n if ('composedPath' in event) {\n return event['composedPath']();\n }\n\n return [];\n}\n\n/**\n * Get the element from a click event, accounting for elements embedded in shadow DOM.\n * @param {Event} event - event to get the target from\n * @returns {Element | null} the element that was the target of the click event\n */\nfunction getClickEventTargetElement(event) {\n var path = getClickEventComposedPath(event);\n\n if (path && path.length > 0) {\n return path[0];\n }\n\n return event['target'] || event['srcElement'];\n}\n\nexport {\n EV_CHANGE, EV_CLICK, EV_HASHCHANGE, EV_INPUT, EV_LOAD,EV_MP_LOCATION_CHANGE, EV_POPSTATE,\n EV_SCROLL, EV_SCROLLEND, EV_SELECT, EV_SUBMIT, EV_TOGGLE, EV_VISIBILITYCHANGE,\n elementLooksSensitive,\n getClickEventComposedPath,\n getClickEventTargetElement,\n getPolyfillScrollEndFunction,\n getPropsForDOMEvent,\n getSafeText,\n isDefinitelyNonInteractive,\n logger,\n minDOMApisSupported,\n shouldTrackDomEvent, shouldTrackElementDetails, shouldTrackValue,\n weakSetSupported\n};\n","/**\n * @typedef {Object} MaskingConfig\n * @property {string} maskingSelector - Combined CSS selector string to mask\n * @property {string} unmaskingSelector - Combined CSS selector string to unmask\n * @property {boolean} maskAll - Whether to mask all by default\n * @property {RegExp} [_legacyClassRegex] - Legacy class regex for backwards compatibility\n */\n\n/**\n * @typedef {Object} PrivacyConfig\n * @property {MaskingConfig} input - Input masking configuration\n * @property {MaskingConfig} text - Text masking configuration\n */\n\nimport { classMatchesRegex } from './rrweb-entrypoint';\nimport { elementLooksSensitive } from '../autocapture/utils';\n\nvar COMMON_MASK_CLASSES_SELECTOR = '.mp-mask, .fs-mask, .amp-mask, .rr-mask, .ph-mask';\nvar RRWEB_PASSWORD_ATTRIBUTE = 'data-rr-is-password';\nvar ALWAYS_MASKED_INPUT_TYPES = ['password', 'email', 'tel', 'hidden'];\n\n/**\n * Normalizes a selector value to an array of selectors\n * @param {string|string[]|undefined} selector\n * @returns {string[]}\n */\nfunction normalizeSelectors(selector) {\n if (!selector) {\n return [];\n }\n if (Array.isArray(selector)) {\n return selector;\n }\n return [selector];\n}\n\n/**\n * Reads flat config options and normalizes them into internal privacy config structure\n * @param {Object} mixpanelInstance\n * @returns {PrivacyConfig} privacyConfig\n */\nfunction getPrivacyConfig(mixpanelInstance) {\n var privacyConfig = {\n input: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n },\n text: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n }\n };\n\n // Input related config\n var maskInputSelector = mixpanelInstance.get_config('record_mask_input_selector');\n var unmaskInputSelector = mixpanelInstance.get_config('record_unmask_input_selector');\n var maskAllInputs = mixpanelInstance.get_config('record_mask_all_inputs');\n\n privacyConfig.input.maskingSelector = normalizeSelectors(maskInputSelector).join(',');\n privacyConfig.input.unmaskingSelector = normalizeSelectors(unmaskInputSelector).join(',');\n if (maskAllInputs !== undefined) {\n privacyConfig.input.maskAll = maskAllInputs;\n }\n\n // Text related config\n var maskTextSelector = mixpanelInstance.get_config('record_mask_text_selector');\n var unmaskTextSelector = mixpanelInstance.get_config('record_unmask_text_selector');\n var maskAllText = mixpanelInstance.get_config('record_mask_all_text');\n var legacyMaskTextClass = mixpanelInstance.get_config('record_mask_text_class');\n\n var textMaskingSelectors = normalizeSelectors(maskTextSelector);\n\n // Handle legacy record_mask_text_class\n if (legacyMaskTextClass) {\n if (legacyMaskTextClass instanceof RegExp) {\n // For RegExp classes, we'll need to handle this differently in the shouldMaskText function\n privacyConfig.text._legacyClassRegex = legacyMaskTextClass;\n } else {\n // String class name - convert to selector\n var classSelector = '.' + legacyMaskTextClass;\n if (textMaskingSelectors.indexOf(classSelector) === -1) {\n textMaskingSelectors.push(classSelector);\n }\n }\n }\n\n privacyConfig.text.maskingSelector = textMaskingSelectors.join(',');\n privacyConfig.text.unmaskingSelector = normalizeSelectors(unmaskTextSelector).join(',');\n\n // Migrate old config: if only record_mask_text_selector is specified, set maskAll to false\n // preserves behavior where the masking selector defaulted to \"*\"\n if (maskAllText === undefined && maskTextSelector !== undefined) {\n privacyConfig.text.maskAll = false;\n } else if (maskAllText !== undefined) {\n privacyConfig.text.maskAll = maskAllText;\n }\n\n return privacyConfig;\n}\n\n/**\n * Checks if element matches a combined CSS selector\n * @param {HTMLElement} element\n * @param {string} selector - Combined CSS selector (comma-separated)\n * @returns {boolean}\n */\nfunction elementMatchesSelector(element, selector) {\n if (!selector) {\n return false;\n }\n return !!element.closest(selector);\n}\n\n/**\n * Determines if an input should be masked based on privacy config\n * @param {HTMLElement} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskInput(element, privacyConfig) {\n var inputType = (element.getAttribute('type') || '').toLowerCase();\n if (ALWAYS_MASKED_INPUT_TYPES.indexOf(inputType) !== -1) {\n return true;\n }\n\n var autocomplete = (element.getAttribute('autocomplete') || '').toLowerCase();\n if (autocomplete && autocomplete !== '' && autocomplete !== 'off') {\n return true;\n }\n\n if (element.hasAttribute(RRWEB_PASSWORD_ATTRIBUTE)) {\n return true;\n }\n\n if (elementLooksSensitive(element)) {\n return true;\n }\n\n if (privacyConfig.input.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.input.unmaskingSelector)) {\n return false;\n }\n\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.input.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\n/**\n * Determines if text should be masked based on privacy config\n * @param {HTMLElement|null} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskText(element, privacyConfig) {\n if (!element) {\n return false;\n }\n\n // Check legacy class regex if present (for backwards compatibility)\n if (privacyConfig.text._legacyClassRegex) {\n if (classMatchesRegex(element, privacyConfig.text._legacyClassRegex, true)) {\n return true;\n }\n }\n\n if (privacyConfig.text.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.text.unmaskingSelector)) {\n return false;\n }\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.text.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\nexport {\n COMMON_MASK_CLASSES_SELECTOR,\n getPrivacyConfig,\n shouldMaskInput,\n shouldMaskText\n};\n","/**\n * This is a port of the open rrweb network plugin in this PR https://github.com/rrweb-io/rrweb/pull/1105\n * the hope is that eventually this can be replaced with the official plugin once it's published (and we sync the mixpanel rrweb fork)\n *\n * This plugin incorporates some important fixes for fetch/XHR body recording that are not yet in the main rrweb repo, as well as makes\n * header and body recording more restrictive by requiring an allowlist instead of content type / blocklist.\n *\n */\nimport { urlMatchesRegexList, console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('network-plugin');\n\n/**\n * Get the time origin for converting performance timestamps to absolute timestamps.\n * Uses Date.now() - performance.now() instead of performance.timeOrigin because\n * browsers can report timeOrigin values that are skewed from actual time, and some\n * browsers (notably older Safari versions) don't implement timeOrigin at all.\n * See: https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L49-L70\n * @param {Window} win\n * @returns {number}\n */\nfunction getTimeOrigin(win) {\n return Math.round(Date.now() - win.performance.now());\n}\n\n/**\n * @typedef {import('../index.d.ts').InitiatorType} InitiatorType\n * @typedef {import('../index.d.ts').NetworkRequest} NetworkRequest\n * @typedef {import('../index.d.ts').NetworkRecordOptions} NetworkRecordOptions\n * @typedef {import('../index.d.ts').NetworkData} NetworkData\n */\n\n/**\n * @typedef {Record} Headers\n */\n\n/**\n * @typedef {string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream | null} Body\n */\n\n/**\n * @callback networkCallback\n * @param {NetworkData} data\n * @returns {void}\n */\n\n/**\n * @callback listenerHandler\n * @returns {void}\n */\n\n/**\n * @typedef {(PerformanceNavigationTiming | PerformanceResourceTiming) & { responseStatus?: number }} ObservedPerformanceEntry\n */\n\n/**\n * @typedef {Object} RecordPlugin\n * @property {string} name\n * @property {(callback: networkCallback, win: Window, options: NetworkRecordOptions) => listenerHandler} observer\n * @property {NetworkRecordOptions} [options]\n */\n\n/** @type {Required} */\nvar defaultNetworkOptions = {\n initiatorTypes: [\n 'audio',\n 'beacon',\n 'body',\n 'css',\n 'early-hint',\n 'embed',\n 'fetch',\n 'frame',\n 'iframe',\n 'icon',\n 'image',\n 'img',\n 'input',\n 'link',\n 'navigation',\n 'object',\n 'ping',\n 'script',\n 'track',\n 'video',\n 'xmlhttprequest',\n ],\n ignoreRequestFn: function() { return false; },\n recordHeaders: {\n request: [],\n response: [],\n },\n recordBodyUrls: {\n request: [],\n response: [],\n },\n recordInitialRequests: false,\n};\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceNavigationTiming}\n */\nfunction isNavigationTiming(entry) {\n return entry.entryType === 'navigation';\n}\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceResourceTiming}\n */\nfunction isResourceTiming (entry) {\n return entry.entryType === 'resource';\n}\n\nexport function findLast(array, predicate) {\n var length = array.length;\n for (var i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i];\n }\n }\n}\n\n/**\n * Monkey-patches a method on an object with a wrapped version, returning a function that restores the original.\n * Adapted from Sentry's `fill` utility:\n * https://github.com/getsentry/sentry-javascript/blob/de5c5cbe177b4334386e747857225eec36a91ea1/packages/core/src/utils/object.ts#L67-L95\n *\n * @param {object} source - The object containing the method to patch\n * @param {string} name - The method name to patch\n * @param {function} replacementFactory - A function that receives the original method and returns the replacement\n * @returns {function} A function that restores the original method\n */\nexport function patch(source, name, replacementFactory) {\n if (!(name in source) || typeof source[name] !== 'function') {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacementFactory(original);\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n}\n\n\n/**\n * Maximum body size to record (1MB)\n */\nvar MAX_BODY_SIZE = 1024 * 1024;\n\n/**\n * Truncate string if it exceeds max size\n * @param {string} str\n * @returns {string}\n */\nexport function truncateBody(str) {\n if (!str || typeof str !== 'string') {\n return str;\n }\n if (str.length > MAX_BODY_SIZE) {\n logger.error('Body truncated from ' + str.length + ' to ' + MAX_BODY_SIZE + ' characters');\n return str.substring(0, MAX_BODY_SIZE) + '... [truncated]';\n }\n return str;\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initPerformanceObserver(cb, win, options) {\n if (!win.PerformanceObserver) {\n logger.error('PerformanceObserver not supported');\n return function() {\n //\n };\n }\n if (options.recordInitialRequests) {\n var initialPerformanceEntries = win.performance\n .getEntries()\n .filter(function(entry) {\n return isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType));\n });\n cb({\n requests: initialPerformanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n isInitial: true,\n });\n }\n var observer = new win.PerformanceObserver(function(entries) {\n var performanceEntries = entries\n .getEntries()\n .filter(function(entry) {\n return isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType) &&\n entry.initiatorType !== 'xmlhttprequest' &&\n entry.initiatorType !== 'fetch';\n });\n cb({\n requests: performanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n });\n });\n observer.observe({ entryTypes: ['navigation', 'resource'] });\n return function() {\n observer.disconnect();\n };\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for headers instead of supporting boolean options\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordHeaders']} recordHeaders\n * @param {string} headerName\n * @returns {boolean}\n */\nexport function shouldRecordHeader(type, recordHeaders, headerName) {\n if (!recordHeaders[type] || recordHeaders[type].length === 0) {\n return false;\n }\n\n return recordHeaders[type].includes(headerName.toLowerCase());\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for URLs instead of supporting boolean options or by content type\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordBodyUrls']} recordBodyUrls\n * @param {string} url\n * @returns {boolean}\n */\nexport function shouldRecordBody(type, recordBodyUrls, url) {\n if (!recordBodyUrls[type] || recordBodyUrls[type].length === 0) {\n return false;\n }\n\n return urlMatchesRegexList(url, recordBodyUrls[type]);\n}\n\nfunction tryReadXHRBody(body) {\n if (body === null || body === undefined) {\n return null;\n }\n\n var result;\n if (typeof body === 'string') {\n result = body;\n } else if (body instanceof Document) {\n result = body.textContent;\n } else if (body instanceof FormData) {\n result = _.HTTPBuildQuery(body);\n } else if (_.isObject(body)) {\n try {\n result = JSON.stringify(body);\n } catch (e) {\n return 'Failed to stringify response object';\n }\n } else {\n return 'Cannot read body of type ' + typeof body;\n }\n\n return truncateBody(result);\n}\n\n/**\n * @param {Request | Response} r\n * @returns {Promise}\n */\nfunction tryReadFetchBody(r) {\n return new Promise(function(resolve) {\n var timeout = setTimeout(function() {\n resolve('Timeout while trying to read body');\n }, 500);\n try {\n r.clone()\n .text()\n .then(\n function(txt) {\n clearTimeout(timeout);\n resolve(truncateBody(txt));\n },\n function(reason) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(reason));\n }\n );\n } catch (e) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(e));\n }\n });\n}\n\n/**\n * @param {Window} win\n * @param {string} initiatorType\n * @param {string} url\n * @param {number} [after]\n * @param {number} [before]\n * @param {number} [attempt]\n * @returns {Promise}\n */\nfunction getRequestPerformanceEntry(win, initiatorType, url, after, before, attempt) {\n if (attempt === undefined) {\n attempt = 0;\n }\n if (attempt > 10) {\n logger.error('Cannot find performance entry');\n return Promise.resolve(null);\n }\n var urlPerformanceEntries = /** @type {PerformanceResourceTiming[]} */ (\n win.performance.getEntriesByName(url)\n );\n var performanceEntry = findLast(\n urlPerformanceEntries,\n function(entry) {\n return isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (!after || entry.startTime >= after) &&\n (!before || entry.startTime <= before);\n }\n );\n if (!performanceEntry) {\n return new Promise(function(resolve) {\n setTimeout(resolve, 50 * attempt);\n }).then(function() {\n return getRequestPerformanceEntry(\n win,\n initiatorType,\n url,\n after,\n before,\n attempt + 1\n );\n });\n }\n return Promise.resolve(performanceEntry);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initXhrObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return function() {\n //\n };\n }\n var restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n function(/** @type {typeof XMLHttpRequest.prototype.open} */ originalOpen) {\n return function(\n /** @type {string} */ method,\n /** @type {string | URL} */ url,\n /** @type {boolean} */ async,\n username, password\n ) {\n if (async === undefined) {\n async = true;\n }\n var xhr = /** @type {XMLHttpRequest} */ (this);\n var req = new Request(url, { method: method });\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n /** @type {Headers} */\n var requestHeaders = {};\n var originalSetRequestHeader = xhr.setRequestHeader.bind(xhr);\n xhr.setRequestHeader = function(/** @type {string} */ header, /** @type {string} */ value) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n return originalSetRequestHeader(header, value);\n };\n networkRequest.requestHeaders = requestHeaders;\n\n var originalSend = xhr.send.bind(xhr);\n xhr.send = function(/** @type {Body} */ body) {\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n networkRequest.requestBody = tryReadXHRBody(body);\n }\n after = win.performance.now();\n return originalSend(body);\n };\n xhr.addEventListener('readystatechange', function() {\n if (xhr.readyState !== xhr.DONE) {\n return;\n }\n before = win.performance.now();\n /** @type {Headers} */\n var responseHeaders = {};\n var rawHeaders = xhr.getAllResponseHeaders();\n if (rawHeaders) {\n var headers = rawHeaders.trim().split(/[\\r\\n]+/);\n headers.forEach(function(line) {\n if (!line) return;\n var colonIndex = line.indexOf(': ');\n if (colonIndex === -1) return;\n var header = line.substring(0, colonIndex);\n var value = line.substring(colonIndex + 2);\n if (header && shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n }\n networkRequest.responseHeaders = responseHeaders;\n if (\n shouldRecordBody('response', options.recordBodyUrls, req.url)\n ) {\n networkRequest.responseBody = tryReadXHRBody(xhr.response);\n }\n getRequestPerformanceEntry(\n win,\n 'xmlhttprequest',\n req.url,\n after,\n before\n )\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for XHR request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: xhr.status,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function(e) {\n logger.error('Error recording XHR request to ' + req.url + ': ' + String(e));\n });\n });\n\n originalOpen.call(xhr, method, url, async, username, password);\n };\n }\n );\n return function() {\n restorePatch();\n };\n}\n\n/**\n * Build the Request used to inspect an outgoing fetch call.\n *\n * Constructing a Request from another Request marks the source's body as used, which makes\n * the caller's own fetch fail with \"Cannot construct a Request with a Request object that has\n * already been used\". Clone Request inputs first so the object the caller passed stays intact.\n *\n * @param {RequestInfo | URL} input\n * @param {RequestInit} [init]\n * @returns {Request}\n */\nexport function buildRecordedRequest(input, init) {\n if (typeof Request !== 'undefined' && input instanceof Request) {\n var cloned = input.clone();\n return init ? new Request(cloned, init) : cloned;\n }\n return new Request(input, init);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nexport function initFetchObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('fetch')) {\n return function() {\n //\n };\n }\n\n var restorePatch = patch(win, 'fetch', function(/** @type {typeof fetch} */ originalFetch) {\n return function() {\n var req = buildRecordedRequest(arguments[0], arguments[1]);\n /** @type {Response | undefined} */\n var res;\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n var originalFetchPromise;\n var requestBodyPromise = Promise.resolve(undefined);\n var responseBodyResolve;\n var responseBodyPromise = new Promise(function(resolve) {\n responseBodyResolve = resolve;\n });\n try {\n /** @type {Headers} */\n var requestHeaders = {};\n req.headers.forEach(function(value, header) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n });\n networkRequest.requestHeaders = requestHeaders;\n\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n requestBodyPromise = tryReadFetchBody(req)\n .then(function(body) {\n networkRequest.requestBody = body;\n });\n }\n\n after = win.performance.now();\n originalFetchPromise = originalFetch.apply(win, arguments).then(function(response) {\n res = response;\n before = win.performance.now();\n\n /** @type {Headers} */\n var responseHeaders = {};\n res.headers.forEach(function(value, header) {\n if (shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n networkRequest.responseHeaders = responseHeaders;\n\n if (shouldRecordBody('response', options.recordBodyUrls, req.url)) {\n tryReadFetchBody(res).then(function(body) {\n networkRequest.responseBody = body;\n responseBodyResolve();\n });\n } else {\n responseBodyResolve();\n }\n\n return res;\n });\n } catch (e) {\n originalFetchPromise = Promise.reject(e);\n }\n\n // await concurrently so we don't delay the fetch response\n Promise.all([requestBodyPromise, responseBodyPromise, originalFetchPromise])\n .then(function () {\n return getRequestPerformanceEntry(win, 'fetch', req.url, after, before);\n })\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for fetch request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: res ? res.status : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function (e) {\n logger.error('Error recording fetch request to ' + req.url + ': ' + String(e));\n });\n\n return originalFetchPromise;\n };\n });\n return function() {\n restorePatch();\n };\n}\n\n/**\n * @param {networkCallback} callback\n * @param {Window} win\n * @param {NetworkRecordOptions} options\n * @returns {listenerHandler}\n */\nfunction initNetworkObserver(callback, win, options) {\n if (!('performance' in win)) {\n return function() {\n //\n };\n }\n\n var recordHeaders = Object.assign({}, defaultNetworkOptions.recordHeaders, options.recordHeaders || {});\n var recordBodyUrls = Object.assign({}, defaultNetworkOptions.recordBodyUrls, options.recordBodyUrls || {});\n options = Object.assign({}, options, {\n recordHeaders: recordHeaders,\n recordBodyUrls: recordBodyUrls,\n });\n var networkOptions = /** @type {Required} */ Object.assign({}, defaultNetworkOptions, options);\n\n /** @type {networkCallback} */\n var cb = function(data) {\n var requests = data.requests.filter(function(request) {\n var shouldIgnoreUrl = urlMatchesRegexList(request.url, networkOptions.ignoreRequestUrls || []);\n return !shouldIgnoreUrl && !networkOptions.ignoreRequestFn(request);\n });\n if (requests.length > 0 || data.isInitial) {\n callback(Object.assign({}, data, { requests: requests }));\n }\n };\n var performanceObserver = initPerformanceObserver(cb, win, networkOptions);\n var xhrObserver = initXhrObserver(cb, win, networkOptions);\n var fetchObserver = initFetchObserver(cb, win, networkOptions);\n return function() {\n performanceObserver();\n xhrObserver();\n fetchObserver();\n };\n}\n\n// arbitrary .mp suffix in case rrweb does publish this plugin later and we use it but need to handle\n// a changed format in the mixpanel product.\nexport var NETWORK_PLUGIN_NAME = 'rrweb/network@1.mp';\n\n/**\n * @param {NetworkRecordOptions} [options]\n * @returns {RecordPlugin}\n */\nexport var getRecordNetworkPlugin = function(options) {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n };\n};\n","/**\n * @typedef {import('../index').RecordPrivacyConfig} RecordPrivacyConfig\n */\n\nimport { window } from '../window';\nimport { EventType, getRecordConsolePlugin, IncrementalSource } from './rrweb-entrypoint';\nimport { MAX_RECORDING_MS, MAX_VALUE_FOR_MIN_RECORDING_MS, console_with_prefix, NOOP_FUNC, _, localStorageSupported, getLocalStorage, canUseCompressionStream, navigator, userAgent, windowOpera} from '../utils'; // eslint-disable-line camelcase\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { addOptOutCheckMixpanelLib } from '../gdpr-utils';\nimport { RequestBatcher } from '../request-batcher';\n\nimport { Config } from '../config';\nimport { RECORD_ENQUEUE_THROTTLE_MS, validateAllowedOrigins } from './utils';\nimport { shouldMaskInput, shouldMaskText, getPrivacyConfig } from './masking';\nimport { getRecordNetworkPlugin } from './rrweb-network-plugin';\n\nvar logger = console_with_prefix('recorder');\nvar CompressionStream = window['CompressionStream'];\n\nvar RECORDER_BATCHER_LIB_CONFIG = {\n 'batch_size': 1000,\n 'batch_flush_interval_ms': 10 * 1000,\n 'batch_request_timeout_ms': 90 * 1000,\n 'batch_autostart': true\n};\n\nvar ACTIVE_SOURCES = new Set([\n IncrementalSource.MouseMove,\n IncrementalSource.MouseInteraction,\n IncrementalSource.Scroll,\n IncrementalSource.ViewportResize,\n IncrementalSource.Input,\n IncrementalSource.TouchMove,\n IncrementalSource.MediaInteraction,\n IncrementalSource.Drag,\n IncrementalSource.Selection,\n]);\n\nfunction isUserEvent(ev) {\n return ev.type === EventType.IncrementalSnapshot && ACTIVE_SOURCES.has(ev.data.source);\n}\n\n/**\n * @typedef {Object} SerializedRecording\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayId\n * @property {string} tabId\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} SessionRecordingOptions\n * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n * @property {String} [options.replayId] - unique uuid for a single replay\n * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout\n * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length\n * @property {import('./rrweb-entrypoint').record} [options.rrwebRecord] - rrweb's `record` function\n * @property {Function} [options.onBatchSent] - callback when a batch of events is sent to the server\n * @property {Storage} [options.sharedLockStorage] - optional storage for shared lock, used for test dependency injection\n * optional properties for deserialization:\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp - the unix timestamp of the last recorded event from rrweb\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} UserIdInfo\n * @property {string} distinct_id\n * @property {string} user_id\n * @property {string} device_id\n */\n\n\n/**\n * This class encapsulates a single session recording and its lifecycle.\n * @param {SessionRecordingOptions} options\n */\nvar SessionRecording = function(options) {\n this._mixpanel = options.mixpanelInstance;\n this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC;\n this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC;\n this._onBatchSent = options.onBatchSent || NOOP_FUNC;\n this._rrwebRecord = options.rrwebRecord || null;\n\n // internal rrweb stopRecording function\n this._stopRecording = null;\n this.replayId = options.replayId;\n\n this.batchStartUrl = options.batchStartUrl || null;\n this.replayStartUrl = options.replayStartUrl || null;\n this.idleExpires = options.idleExpires || null;\n this.maxExpires = options.maxExpires || null;\n this.replayStartTime = options.replayStartTime || null;\n this.lastEventTimestamp = options.lastEventTimestamp || null;\n this.seqNo = options.seqNo || 0;\n\n this.idleTimeoutId = null;\n this.maxTimeoutId = null;\n\n this.recordMaxMs = MAX_RECORDING_MS;\n this.recordMinMs = 0;\n this._recordMinMsCheckStart = null;\n\n // disable persistence if localStorage is not supported\n // request-queue will automatically disable persistence if indexedDB fails to initialize\n var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence');\n\n // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings\n this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId;\n this.queueStorage = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_EVENTS_STORE_NAME, RECORDER_VERSION_DATA);\n this.batcher = new RequestBatcher(this.batcherKey, {\n errorReporter: this.reportError.bind(this),\n flushOnlyOnInterval: true,\n libConfig: RECORDER_BATCHER_LIB_CONFIG,\n sendRequestFunc: this.flushEventsWithOptOut.bind(this),\n queueStorage: this.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n usePersistence: usePersistence,\n stopAllBatchingFunc: this.stopRecording.bind(this),\n\n // increased throttle and shared lock timeout because recording events are very high frequency.\n // this will minimize the amount of lock contention between enqueued events.\n // for session recordings there is a lock for each tab anyway, so there's no risk of deadlock between tabs.\n enqueueThrottleMs: RECORD_ENQUEUE_THROTTLE_MS,\n sharedLockTimeoutMS: 10 * 1000,\n });\n};\n\n/**\n * @returns {UserIdInfo}\n */\nSessionRecording.prototype.getUserIdInfo = function () {\n if (this.finalFlushUserIdInfo) {\n return this.finalFlushUserIdInfo;\n }\n\n var userIdInfo = {\n 'distinct_id': String(this._mixpanel.get_distinct_id()),\n };\n\n // send ID management props if they exist\n var deviceId = this._mixpanel.get_property('$device_id');\n if (deviceId) {\n userIdInfo['$device_id'] = deviceId;\n }\n var userId = this._mixpanel.get_property('$user_id');\n if (userId) {\n userIdInfo['$user_id'] = userId;\n }\n return userIdInfo;\n};\n\nSessionRecording.prototype.unloadPersistedData = function () {\n this.batcher.stop();\n\n return this.queueStorage.init().catch(function () {\n this.reportError('Error initializing IndexedDB storage for unloading persisted data.');\n }.bind(this)).then(function () {\n // if the recording is too short, just delete any stored events without flushing\n if (this.getDurationMs() < this._getRecordMinMs()) {\n return this.queueStorage.removeItem(this.batcherKey);\n }\n\n return this.batcher.flush()\n .then(function () {\n return this.queueStorage.removeItem(this.batcherKey);\n }.bind(this));\n }.bind(this));\n};\n\nSessionRecording.prototype.getConfig = function(configVar) {\n return this._mixpanel.get_config(configVar);\n};\n\n// Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which\n// reaches into this class instance and expects the snake case version of the function.\n// eslint-disable-next-line camelcase\nSessionRecording.prototype.get_config = function(configVar) {\n return this.getConfig(configVar);\n};\n\nSessionRecording.prototype.startRecording = function (shouldStopBatcher) {\n if (this._rrwebRecord === null) {\n this.reportError('rrweb record function not provided. ');\n return;\n }\n\n if (this._stopRecording !== null) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n this.recordMaxMs = this.getConfig('record_max_ms');\n if (this.recordMaxMs > MAX_RECORDING_MS) {\n this.recordMaxMs = MAX_RECORDING_MS;\n logger.critical('record_max_ms cannot be greater than ' + MAX_RECORDING_MS + 'ms. Capping value.');\n }\n\n if (!this.maxExpires) {\n this.maxExpires = new Date().getTime() + this.recordMaxMs;\n }\n\n this.recordMinMs = this._getRecordMinMs();\n\n if (!this.replayStartTime) {\n this.replayStartTime = new Date().getTime();\n this.batchStartUrl = _.info.currentUrl();\n this.replayStartUrl = _.info.currentUrl();\n }\n\n if (shouldStopBatcher || this.recordMinMs > 0) {\n // the primary case for shouldStopBatcher is when we're starting recording after a reset\n // and don't want to send anything over the network until there's\n // actual user activity\n // this also applies if the minimum recording length has not been hit yet\n // so that we don't send data until we know the recording will be long enough\n this.batcher.stop();\n this._recordMinMsCheckStart = null;\n } else {\n this.batcher.start();\n }\n\n var resetIdleTimeout = function () {\n clearTimeout(this.idleTimeoutId);\n var idleTimeoutMs = this.getConfig('record_idle_timeout_ms');\n this.idleTimeoutId = setTimeout(this._onIdleTimeout, idleTimeoutMs);\n this.idleExpires = new Date().getTime() + idleTimeoutMs;\n }.bind(this);\n resetIdleTimeout();\n\n var blockSelector = this.getConfig('record_block_selector');\n if (blockSelector === '' || blockSelector === null) {\n blockSelector = undefined;\n }\n\n var privacyConfig = getPrivacyConfig(this._mixpanel);\n\n var plugins = [];\n if (this.getConfig('record_network')) {\n var options = this.getConfig('record_network_options') || {};\n // don't track requests to Mixpanel /record API\n var ignoreRequestUrls = (options.ignoreRequestUrls || []).slice();\n ignoreRequestUrls.push(this._getApiRoute());\n options.ignoreRequestUrls = ignoreRequestUrls;\n\n plugins.push(getRecordNetworkPlugin(options));\n }\n\n if (this.getConfig('record_console')) {\n plugins.push(\n getRecordConsolePlugin({\n stringifyOptions: {\n stringLengthLimit: 1000,\n numOfKeysLimit: 50,\n depthOfLimit: 2\n }\n })\n );\n }\n\n var validatedOrigins = validateAllowedOrigins(this.getConfig('record_allowed_iframe_origins'), logger);\n\n try {\n this._stopRecording = this._rrwebRecord({\n 'emit': function (ev) {\n if (this.idleExpires && this.idleExpires < ev.timestamp) {\n this._onIdleTimeout();\n return;\n }\n if (this._recordMinMsCheckStart === null) {\n this._recordMinMsCheckStart = ev.timestamp;\n }\n if (isUserEvent(ev)) {\n if (this.batcher.stopped && ev.timestamp - this._recordMinMsCheckStart >= this.recordMinMs) {\n this.batcher.start();\n }\n resetIdleTimeout();\n }\n // promise only used to await during tests\n this.__enqueuePromise = this.batcher.enqueue(ev);\n\n // Capture the timestamp of the last event for duration calculation.\n if (this.lastEventTimestamp === null || ev.timestamp > this.lastEventTimestamp) {\n this.lastEventTimestamp = ev.timestamp;\n }\n }.bind(this),\n 'blockClass': this.getConfig('record_block_class'),\n 'blockSelector': blockSelector,\n 'collectFonts': this.getConfig('record_collect_fonts'),\n 'dataURLOptions': { // canvas image options (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL)\n 'type': 'image/webp',\n 'quality': 0.6\n },\n // mask all inputs and text by default, unmasking is applied via callbacks maskInputFn and maskTextFn\n 'maskAllInputs': true,\n 'maskTextSelector': '*',\n 'maskInputFn': this._getMaskFn(shouldMaskInput, privacyConfig),\n 'maskTextFn': this._getMaskFn(shouldMaskText, privacyConfig),\n 'recordCrossOriginIframes': validatedOrigins.length > 0,\n 'allowedIframeOrigins': validatedOrigins,\n 'recordCanvas': this.getConfig('record_canvas'),\n 'sampling': {\n 'canvas': 15\n },\n 'plugins': plugins,\n });\n } catch (err) {\n this.reportError('Unexpected error when starting rrweb recording.', err);\n }\n\n if (typeof this._stopRecording !== 'function') {\n this.reportError('rrweb failed to start, skipping this recording.');\n this._stopRecording = null;\n this.stopRecording(); // stop batcher looping and any timeouts\n return;\n }\n\n var maxTimeoutMs = this.maxExpires - new Date().getTime();\n this.maxTimeoutId = setTimeout(this._onMaxLengthReached.bind(this), maxTimeoutMs);\n};\n\nSessionRecording.prototype.stopRecording = function (skipFlush) {\n // store the user ID info in case this is getting called in mixpanel.reset()\n this.finalFlushUserIdInfo = this.getUserIdInfo();\n\n if (!this.isRrwebStopped()) {\n try {\n this._stopRecording();\n } catch (err) {\n this.reportError('Error with rrweb stopRecording', err);\n }\n this._stopRecording = null;\n }\n\n var flushPromise;\n if (this.batcher.stopped) {\n // never got user activity to flush after reset, so just clear the batcher\n flushPromise = this.batcher.clear();\n } else if (!skipFlush) {\n // flush any remaining events from running batcher\n flushPromise = this.batcher.flush();\n }\n this.batcher.stop();\n\n clearTimeout(this.idleTimeoutId);\n clearTimeout(this.maxTimeoutId);\n return flushPromise;\n};\n\nSessionRecording.prototype.isRrwebStopped = function () {\n return this._stopRecording === null;\n};\n\n\n/**\n * Flushes the current batch of events to the server, but passes an opt-out callback to make sure\n * we stop recording and dump any queued events if the user has opted out.\n */\nSessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) {\n var onOptOut = function (code) {\n // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out\n if (code === 0) {\n this.stopRecording();\n cb({error: 'Tracking has been opted out, stopping recording.'});\n }\n }.bind(this);\n\n this._flushEvents(data, options, cb, onOptOut);\n};\n\n/**\n * @returns {SerializedRecording}\n */\nSessionRecording.prototype.serialize = function () {\n // don't break if mixpanel instance was destroyed at some point\n var tabId;\n try {\n tabId = this._mixpanel.get_tab_id();\n } catch (e) {\n this.reportError('Error getting tab ID for serialization ', e);\n tabId = null;\n }\n\n return {\n 'replayId': this.replayId,\n 'seqNo': this.seqNo,\n 'replayStartTime': this.replayStartTime,\n 'batchStartUrl': this.batchStartUrl,\n 'replayStartUrl': this.replayStartUrl,\n 'lastEventTimestamp': this.lastEventTimestamp,\n 'idleExpires': this.idleExpires,\n 'maxExpires': this.maxExpires,\n 'tabId': tabId,\n };\n};\n\n\n/**\n * @static\n * @param {SerializedRecording} serializedRecording\n * @param {SessionRecordingOptions} options\n * @returns {SessionRecording}\n */\nSessionRecording.deserialize = function (serializedRecording, options) {\n var recording = new SessionRecording(_.extend({}, options, {\n replayId: serializedRecording['replayId'],\n batchStartUrl: serializedRecording['batchStartUrl'],\n replayStartUrl: serializedRecording['replayStartUrl'],\n idleExpires: serializedRecording['idleExpires'],\n maxExpires: serializedRecording['maxExpires'],\n replayStartTime: serializedRecording['replayStartTime'],\n lastEventTimestamp: serializedRecording['lastEventTimestamp'],\n seqNo: serializedRecording['seqNo'],\n sharedLockStorage: options.sharedLockStorage,\n }));\n\n return recording;\n};\n\nSessionRecording.prototype._getApiRoute = function () {\n return this.getConfig('api_routes')['record'];\n};\n\nSessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) {\n var onSuccess = function (response, responseBody) {\n // Update batch specific props only if the request was successful to guarantee ordering.\n // RequestBatcher will always flush the next batch after the previous one succeeds.\n // extra check to see if the replay ID has changed so that we don't increment the seqNo on the wrong replay\n if (response.status === 200 && this.replayId === currentReplayId) {\n this.seqNo++;\n this.batchStartUrl = _.info.currentUrl();\n }\n\n this._onBatchSent();\n callback({\n status: 0,\n httpStatusCode: response.status,\n responseBody: responseBody,\n retryAfter: response.headers.get('Retry-After')\n });\n }.bind(this);\n var apiHost = (this._mixpanel.get_api_host && this._mixpanel.get_api_host('record')) || this.getConfig('api_host');\n window['fetch'](apiHost + '/' + this._getApiRoute() + '?' + new URLSearchParams(reqParams), {\n 'method': 'POST',\n 'headers': {\n 'Authorization': 'Basic ' + btoa(this.getConfig('token') + ':'),\n 'Content-Type': 'application/octet-stream'\n },\n 'body': reqBody,\n }).then(function (response) {\n response.json().then(function (responseBody) {\n onSuccess(response, responseBody);\n }).catch(function (error) {\n callback({error: error});\n });\n }).catch(function (error) {\n callback({error: error, httpStatusCode: 0});\n });\n};\n\nSessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) {\n var numEvents = data.length;\n\n if (numEvents > 0) {\n var replayId = this.replayId;\n\n // each rrweb event has a timestamp - leverage those to get time properties\n var batchStartTime = Infinity;\n var batchEndTime = -Infinity;\n var hasFullSnapshot = false;\n for (var i = 0; i < numEvents; i++) {\n batchStartTime = Math.min(batchStartTime, data[i].timestamp);\n batchEndTime = Math.max(batchEndTime, data[i].timestamp);\n if (data[i].type === EventType.FullSnapshot) {\n hasFullSnapshot = true;\n }\n }\n\n if (this.seqNo === 0) {\n if (!hasFullSnapshot) {\n callback({error: 'First batch does not contain a full snapshot. Aborting recording.'});\n this.stopRecording(true);\n return;\n }\n this.replayStartTime = batchStartTime;\n } else if (!this.replayStartTime) {\n this.reportError('Replay start time not set but seqNo is not 0. Using current batch start time as a fallback.');\n this.replayStartTime = batchStartTime;\n }\n\n var replayLengthMs = batchEndTime - this.replayStartTime;\n\n var reqParams = {\n '$current_url': this.batchStartUrl,\n '$lib_version': Config.LIB_VERSION,\n 'batch_start_time': batchStartTime / 1000,\n 'mp_lib': 'web',\n 'replay_id': replayId,\n 'replay_length_ms': replayLengthMs,\n 'replay_start_time': this.replayStartTime / 1000,\n 'replay_start_url': this.replayStartUrl,\n 'seq': this.seqNo\n };\n var eventsJson = JSON.stringify(data);\n Object.assign(reqParams, this.getUserIdInfo());\n\n var sendUncompressed = function() {\n reqParams['format'] = 'body';\n this._sendRequest(replayId, reqParams, eventsJson, callback);\n }.bind(this);\n\n if (canUseCompressionStream(userAgent, navigator.vendor, windowOpera)) {\n var jsonStream = new Blob([eventsJson], {type: 'application/json'}).stream();\n var gzipStream = jsonStream.pipeThrough(new CompressionStream('gzip'));\n new Response(gzipStream)\n .blob()\n .then(function(compressedBlob) {\n reqParams['format'] = 'gzip';\n this._sendRequest(replayId, reqParams, compressedBlob, callback);\n }.bind(this), function(err) {\n this.reportError('Error compressing session recording batch; sending uncompressed', err);\n sendUncompressed();\n }.bind(this));\n } else {\n sendUncompressed();\n }\n }\n});\n\n\nSessionRecording.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n try {\n if (!err && !(msg instanceof Error)) {\n msg = new Error(msg);\n }\n this.getConfig('error_reporter')(msg, err);\n } catch(err) {\n logger.error(err);\n }\n};\n\n/**\n * Calculates the duration of the recording in milliseconds, based on the start time and time of last recorded event.\n * @returns {number} The duration of the recording in milliseconds. Returns 0 if recording hasn't started.\n */\nSessionRecording.prototype.getDurationMs = function() {\n if (this.replayStartTime === null) {\n return 0;\n }\n\n // If the recording has no events, assume it is in progress and use the current time as the end time.\n if (this.lastEventTimestamp === null) {\n return new Date().getTime() - this.replayStartTime;\n }\n\n return this.lastEventTimestamp - this.replayStartTime;\n};\n\n/**\n * Lazily loads the minimum recording length config in milliseconds, respecting the maximum limit.\n * @returns {number} The minimum recording length in milliseconds.\n */\nSessionRecording.prototype._getRecordMinMs = function() {\n var configValue = this.getConfig('record_min_ms');\n\n if (configValue > MAX_VALUE_FOR_MIN_RECORDING_MS) {\n logger.critical('record_min_ms cannot be greater than ' + MAX_VALUE_FOR_MIN_RECORDING_MS + 'ms. Capping value.');\n return MAX_VALUE_FOR_MIN_RECORDING_MS;\n }\n\n return configValue;\n};\n\n/**\n * Creates a masking function for rrweb's maskInputFn or maskTextFn\n * @param {(element: HTMLElement, privacyConfig: RecordPrivacyConfig) => boolean} shouldMaskFn - Function that determines if element should be masked\n * @param {RecordPrivacyConfig} privacyConfig - Privacy configuration\n * @returns {(text: string, element: HTMLElement) => string} Function that masks text based on privacy config\n */\nSessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) {\n return function(text, element) {\n // prevent visual artifacts from random whitespace\n if (!text.trim().length) {\n return '';\n }\n\n var shouldMask = true;\n try {\n shouldMask = shouldMaskFn(element, privacyConfig);\n } catch (err) {\n this.reportError('Error checking if text should be masked, defaulting to masked', err);\n }\n\n if (shouldMask) {\n var textLength = Math.min(text.length, 10000); // limit to 10000 chars to optimize performance\n return '*'.repeat(textLength);\n } else {\n return text;\n }\n }.bind(this);\n};\n\nexport { SessionRecording };\n","import { Promise } from '../promise-polyfill';\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { SessionRecording } from './session-recording';\nimport { isRecordingExpired } from './utils';\n\n/**\n * Module for handling the storage and retrieval of recording metadata as well as any active recordings.\n * Makes sure that only one tab can be recording at a time.\n */\nvar RecordingRegistry = function (options) {\n /** @type {IDBStorageWrapper} */\n this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA);\n this.errorReporter = options.errorReporter;\n this.mixpanelInstance = options.mixpanelInstance;\n this.sharedLockStorage = options.sharedLockStorage;\n};\n\nRecordingRegistry.prototype.isPersistenceEnabled = function() {\n return !this.mixpanelInstance.get_config('disable_persistence');\n};\n\nRecordingRegistry.prototype.handleError = function (err) {\n this.errorReporter('IndexedDB error: ', err);\n};\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n */\nRecordingRegistry.prototype.setActiveRecording = function (serializedRecording) {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve();\n }\n\n var tabId = serializedRecording['tabId'];\n if (!tabId) {\n console.warn('No tab ID is set, cannot persist recording metadata.');\n return Promise.resolve();\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.setItem(tabId, serializedRecording);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\n/**\n * @returns {Promise}\n */\nRecordingRegistry.prototype.getActiveRecording = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve(null);\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.getItem(this.mixpanelInstance.get_tab_id());\n }.bind(this))\n .then(function (serializedRecording) {\n return isRecordingExpired(serializedRecording) ? null : serializedRecording;\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nRecordingRegistry.prototype.clearActiveRecording = function () {\n if (this.isPersistenceEnabled()) {\n // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion.\n // this will ensure the next pageload will flush the remaining events, but not try to continue the recording.\n return this.markActiveRecordingExpired();\n } else {\n return this.deleteActiveRecording();\n }\n};\n\nRecordingRegistry.prototype.markActiveRecordingExpired = function () {\n return this.getActiveRecording()\n .then(function (serializedRecording) {\n if (serializedRecording) {\n serializedRecording['maxExpires'] = 0;\n return this.setActiveRecording(serializedRecording);\n }\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nRecordingRegistry.prototype.deleteActiveRecording = function () {\n // avoid initializing IDB if this registry instance hasn't already written a recording\n if (this.idb.isInitialized()) {\n return this.idb.removeItem(this.mixpanelInstance.get_tab_id())\n .catch(this.handleError.bind(this));\n } else {\n return Promise.resolve();\n }\n};\n\n/**\n * Flush any inactive recordings from the registry to minimize data loss.\n * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch.\n */\nRecordingRegistry.prototype.flushInactiveRecordings = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve([]);\n }\n\n return this.idb.init()\n .then(function() {\n return this.idb.getAll();\n }.bind(this))\n .then(function (serializedRecordings) {\n // clean up any expired recordings from the registry, non-expired ones may be active in other tabs\n var unloadPromises = serializedRecordings\n .filter(function (serializedRecording) {\n return isRecordingExpired(serializedRecording);\n })\n .map(function (serializedRecording) {\n var sessionRecording = SessionRecording.deserialize(serializedRecording, {\n mixpanelInstance: this.mixpanelInstance,\n sharedLockStorage: this.sharedLockStorage\n });\n return sessionRecording.unloadPersistedData()\n .then(function () {\n // expired recording was successfully flushed, we can clean it up from the registry\n return this.idb.removeItem(serializedRecording['tabId']);\n }.bind(this))\n .catch(this.handleError.bind(this));\n }.bind(this));\n\n return Promise.all(unloadPromises);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nexport { RecordingRegistry };\n","import { record } from './rrweb-entrypoint';\nimport { Promise } from '../promise-polyfill';\nimport { SessionRecording } from './session-recording';\nimport { RecordingRegistry } from './recording-registry';\n\nimport { console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('recorder');\n\n/**\n * Recorder API: bundles rrweb and and exposes methods to start and stop recordings.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n*/\nvar MixpanelRecorder = function(mixpanelInstance, rrwebRecord, sharedLockStorage) {\n this.mixpanelInstance = mixpanelInstance;\n this.rrwebRecord = rrwebRecord || record;\n this.sharedLockStorage = sharedLockStorage;\n\n /**\n * @member {import('./registry').RecordingRegistry}\n */\n this.recordingRegistry = new RecordingRegistry({\n mixpanelInstance: this.mixpanelInstance,\n errorReporter: logger.error,\n sharedLockStorage: sharedLockStorage\n });\n this._flushInactivePromise = this.recordingRegistry.flushInactiveRecordings();\n\n this.activeRecording = null;\n this.stopRecordingInProgress = false;\n};\n\nMixpanelRecorder.prototype.startRecording = function(options) {\n options = options || {};\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n var onIdleTimeout = function () {\n logger.log('Idle timeout reached, restarting recording.');\n this.resetRecording();\n }.bind(this);\n\n var onMaxLengthReached = function () {\n logger.log('Max recording length reached, stopping recording.');\n this.resetRecording();\n }.bind(this);\n\n var onBatchSent = function () {\n this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n this['__flushPromise'] = this.activeRecording.batcher._flushPromise;\n }.bind(this);\n\n /**\n * @type {import('./session-recording').SessionRecordingOptions}\n */\n var sessionRecordingOptions = {\n mixpanelInstance: this.mixpanelInstance,\n onBatchSent: onBatchSent,\n onIdleTimeout: onIdleTimeout,\n onMaxLengthReached: onMaxLengthReached,\n replayId: _.UUID(),\n rrwebRecord: this.rrwebRecord,\n sharedLockStorage: this.sharedLockStorage\n };\n\n if (options.activeSerializedRecording) {\n this.activeRecording = SessionRecording.deserialize(options.activeSerializedRecording, sessionRecordingOptions);\n } else {\n this.activeRecording = new SessionRecording(sessionRecordingOptions);\n }\n\n this.activeRecording.startRecording(options.shouldStopBatcher);\n return this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n};\n\nMixpanelRecorder.prototype.stopRecording = function() {\n // Prevents activeSerializedRecording from being reused when stopping the recording.\n this.stopRecordingInProgress = true;\n return this._stopCurrentRecording(false, true).then(function() {\n return this.recordingRegistry.clearActiveRecording();\n }.bind(this)).then(function() {\n this.stopRecordingInProgress = false;\n }.bind(this));\n};\n\nMixpanelRecorder.prototype.pauseRecording = function() {\n return this._stopCurrentRecording(false);\n};\n\nMixpanelRecorder.prototype._stopCurrentRecording = function(skipFlush, disableActiveRecording) {\n if (this.activeRecording) {\n var stopRecordingPromise = this.activeRecording.stopRecording(skipFlush);\n if (disableActiveRecording) {\n this.activeRecording = null;\n }\n return stopRecordingPromise;\n }\n return Promise.resolve();\n};\n\nMixpanelRecorder.prototype.resumeRecording = function (startNewIfInactive) {\n if (this.activeRecording && this.activeRecording.isRrwebStopped()) {\n this.activeRecording.startRecording(false);\n return Promise.resolve(null);\n }\n\n return this.recordingRegistry.getActiveRecording()\n .then(function (activeSerializedRecording) {\n if (activeSerializedRecording && !this.stopRecordingInProgress) {\n return this.startRecording({activeSerializedRecording: activeSerializedRecording});\n } else if (startNewIfInactive) {\n return this.startRecording({shouldStopBatcher: false});\n } else {\n logger.log('No resumable recording found.');\n return null;\n }\n }.bind(this));\n};\n\n\nMixpanelRecorder.prototype.resetRecording = function () {\n this.stopRecording();\n this.startRecording({shouldStopBatcher: true});\n};\n\nMixpanelRecorder.prototype.isRecording = function () {\n return this.activeRecording && !this.activeRecording.isRrwebStopped();\n};\n\nMixpanelRecorder.prototype.getActiveReplayId = function () {\n if (this.isRecording()) {\n return this.activeRecording.replayId;\n } else {\n return null;\n }\n};\n\n// getter so that older mixpanel-core versions can still retrieve the replay ID\n// when pulling the latest recorder bundle from the CDN\nObject.defineProperty(MixpanelRecorder.prototype, 'replayId', {\n get: function () {\n return this.getActiveReplayId();\n }\n});\n\n\nexport { MixpanelRecorder };\n","import { window } from '../window';\nimport { RECORDER_GLOBAL_NAME } from '../config';\nimport { MixpanelRecorder } from './recorder';\n\nwindow[RECORDER_GLOBAL_NAME] = MixpanelRecorder;\n"],"names":["win","loc","Config","RECORDER_GLOBAL_NAME","_array_like_to_array","arr","len","i","arr2","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_async_to_generator","fn","self","args","err","_construct","Parent","Class","_is_native_reflect_construct","Constructor","instance","_set_prototype_of","_defineProperties","target","props","descriptor","_create_class","protoProps","staticProps","_extends","source","_get_prototype_of","o","_inherits","subClass","superClass","_instanceof","left","right","_is_native_function","_object_without_properties_loose","excluded","sourceKeys","p","_type_of","obj","_unsupported_iterable_to_array","minLen","n","_wrap_native_super","_cache","Wrapper","result","_","_create_for_of_iterator_helper_loose","allowArrayLike","it","_ts_generator","thisArg","body","f","y","g","verb","v","step","op","e","_ts_values","s","m","__defProp$1","__defNormalProp$1","__publicField$1","_a","__defProp$1$1","__defNormalProp$1$1","__publicField$1$1","NodeType$3","NodeType2","testableAccessors$1","testableMethods$1","untaintedBasePrototype$1","isAngularZonePresent$1","getUntaintedPrototype$1","defaultObj","defaultPrototype","accessorNames","isUntaintedAccessors","accessor","_a2","_b","methodNames","isUntaintedMethods","method","iframeEl","untaintedObject","untaintedAccessorCache$1","getUntaintedAccessor$1","cacheKey","untaintedPrototype","untaintedAccessor","untaintedMethodCache$1","getUntaintedMethod$1","untaintedMethod","childNodes$1","n2","parentNode$1","parentElement$1","textContent$1","contains$1","other","getRootNode$1","host$1","styleSheets$1","shadowRoot$1","querySelector$1","selectors","querySelectorAll$1","mutationObserverCtor$1","patch$1$1","name","replacement","original","wrapped","index$1","isElement","isShadowRoot","hostEl","isNativeShadowDom","shadowRoot2","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule2","statement","stringifyStylesheet","s2","rules2","sheetHref","stringifiedRules","stringifyRule","isCSSImportRule","importStringified","absolutifyURLs","ruleStringified","isCSSStyleRule","fixSafariColons","cssStringified","regex","Mirror","_proto","id","permanent","_this","childNode","node2","meta","oldNode","createMirror$2","maskInputValue","param","element","maskInputOptions","tagName","type","maskInputFn","text","actualType","toLowerCase","str","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","ctx","chunkSize","x2","getImageData","originalGetImageData","pixelBuffer","pixel","getInputType","extractFileExtension","path","baseURL","url","match","_ref","extractOrigin","origin","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","parts","_iterator","_step","part","normalizeCssString","_testNoPxNorm","splitCssText","style","childNodes2","splits","iterCount","cssTextNorm","normFactor","i2","textContentNorm","jLimit","j","startSubstring","cssNormSplits","splitNorm","prevTextContent","prevMinLength","k","normPart","markCssSplits","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName$1","processedTagName","canvasService","canvasCtx","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars2","output","absoluteToDoc","descriptorsStr","inParens","c2","cachedDocument","getHref","isSVGElement","el","customHref","a2","transformAttribute","ignoreAttribute","_value","_isBlockedElement","blockClass","blockSelector","eIndex","className","e2","classMatchesRegex$1","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","listener","iframeLoadTimeout","fired","readyState","timer","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","options","mirror2","needsMask","inlineStylesheet","_options_maskInputOptions","maskTextFn","_options_dataURLOptions","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","_options_newlyAddedElement","newlyAddedElement","_options_cssCaptured","cssCaptured","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parent","parentTagName","textContent2","isStyle","isScript","needBlock","attributes","attr","stylesheet","cssText1","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","imageSrc","priorCrossOrigin","recordInlineImage","mediaAttributes","_n2_getBoundingClientRect","width","height","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","_options_skipChild","skipChild","_options_inlineStylesheet","_options_inlineImages","_options_recordCanvas","onSerialize","onIframeLoad","_options_iframeLoadTimeout","onStylesheetLoad","_options_stylesheetLoadTimeout","stylesheetLoadTimeout","_options_keepIframeSrcFn","_options_preserveWhiteSpace","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","shadowRootEl","bypassOptions","childN","serializedChildNode","shadowRootEl1","_iterator1","_step1","childN1","serializedChildNode1","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","tmp","_ref_blockClass","_ref_blockSelector","_ref_maskTextClass","_ref_maskTextSelector","_ref_inlineStylesheet","_ref_inlineImages","_ref_recordCanvas","_ref_maskAllInputs","maskAllInputs","_ref_slimDOM","slimDOM","_ref_keepIframeSrcFn","getDefaultExportFromCjs$1","getAugmentedNamespace$1","f2","a22","d","picocolors_browser$1","x$1","create$1","picocolors_browserExports$1","__viteBrowserExternal$2","__viteBrowserExternal$1$1","require$$2$1","pico$1","terminalHighlight$1$1","CssSyntaxError$3$1","Error1","CssSyntaxError","message","line","column","file","plugin22","color","css","lines","start","end","maxWidth","mark","aside","_pico$1_createColors","bold","gray","red","index2","number","gutter","spacing","code","cssSyntaxError$1","symbols$1","DEFAULT_RAW$1","capitalize$1","Stringifier$2$1","Stringifier","builder","semicolon","params","detect","buf","depth","indent","between","after","last","child","before","string","own","root2","prop","raw","stringifier$1","Stringifier$1$1","stringify$4$1","stringify_1$1","isClean$2$1","my$2$1","CssSyntaxError$2$1","Stringifier2$1","stringify$3$1","cloneNode$1","cloned","Node$4$1","Node2","defaults","add","overrides","keepBetween","opts","_this_rangeBy","next","stringRepresentation","defaultType","_len","nodes","_key","bookmark","foundSelf","result2","inputs","fixed","emitInputs","inputsNextIndex","inputId","input2","stringifier2","data","node$1","Node$3$1","Declaration$4$1","Declaration","declaration$1","urlAlphabet$1","nanoid$1$1","size","nonSecure$1","SourceMapConsumer$2$1","SourceMapGenerator$2$1","existsSync$1","readFileSync$1","dirname$1$1","join$1","fromBase64$1","PreviousMap$2$1","PreviousMap","prev","baseCharsetUri","baseUri","charsetUri","uri","encoding","sourceMapString","map","comments","prevPath","map1","previousMap$1","SourceMapConsumer$1$1","SourceMapGenerator$1$1","fileURLToPath$1","pathToFileURL$1$1","isAbsolute$1","resolve$1$1","nanoid$2","terminalHighlight$2","CssSyntaxError$1$1","PreviousMap$1$1","fromOffsetCache$1","sourceMapAvailable$1$1","pathAvailable$1$1","Input$4$1","Input","endLine","endColumn","pos1","pos2","offset","lastLine","lineToIndex","prevIndex","l2","min","max","mid","consumer","from","to","fromUrl","json","_i","_iter","input$1","SourceMapConsumer$3","SourceMapGenerator$3","dirname$2","relative$1","resolve$2","sep$1","pathToFileURL$2","Input$3$1","sourceMapAvailable$2","pathAvailable$2","MapGenerator$2$1","MapGenerator","stringify2","cssString","content","eol","noSource","mapping","childless","annotation","cached","already","fileURL","mapGenerator$1","Node$2$1","Comment$4$1","Comment","comment$1","isClean$1$1","my$1$1","Declaration$3$1","Comment$3$1","Node$1$1","parse$4$1","Rule$4$1","AtRule$4$1","Root$6$1","cleanSource$1","markDirtyUp$1","Container$7$1","Container","children","callback","iterator","condition","_node2","cb","exist","existIndex","sample","i21","processed","pattern","decl","selector","dependant","container$1","Container$6$1","LazyResult$4$1","Processor$3$1","Document$3$1","Document2","lazy","document$1$1","printed$1","warnOnce$2$1","Warning$2$1","Warning","range","opt","warning$1","Warning$1$1","Result$3$1","Result","processor2","warning2","result$1","SINGLE_QUOTE$1","DOUBLE_QUOTE$1","BACKSLASH$1","SLASH$1","NEWLINE$1","SPACE$1","FEED$1","TAB$1","CR$1","OPEN_SQUARE$1","CLOSE_SQUARE$1","OPEN_PARENTHESES$1","CLOSE_PARENTHESES$1","OPEN_CURLY$1","CLOSE_CURLY$1","SEMICOLON$1","ASTERISK$1","COLON$1","AT$1","RE_AT_END$1","RE_WORD_END$1","RE_BAD_BRACKET$1","RE_HEX_ESCAPE$1","tokenize$1","ignore","quote","escape","escaped","escapePos","currentToken","length","buffer","returned","position","unclosed","what","endOfFile","nextToken","ignoreUnclosed","controlChar","back","token","Container$5$1","AtRule$3$1","AtRule","_Container$5$1_prototype_append","_Container$5$1_prototype_prepend","atRule$1","Container$4$1","LazyResult$3$1","Processor$2$1","Root$5$1","Root","root$1","list$2$1","spaces","separators","array","current","split","func","inQuote","prevQuote","letter","list_1$1","Container$3$1","list$1$1","Rule$3$1","Rule","values","sep2","rule$1","Declaration$2$1","tokenizer2$1","Comment$2$1","AtRule$2$1","Root$4$1","Rule$2$1","SAFE_COMMENT_NEIGHBOR$1","findLastWithPosition$1","tokens","Parser$1$1","Parser","shift","open","brackets","colon","founded","_step_value","customProperty","firstSpaces","cache","type1","hasWord","bracket","clean","all","lastTokenType","parser$1","Container$2$1","Parser2$1","Input$2$1","parse$3$1","parser2","parse_1$1","isClean$3","my$3","MapGenerator$1$1","stringify$2$1","Container$1$1","Document$2$1","warnOnce$1$1","Result$2$1","parse$2$1","Root$3$1","TYPE_TO_CLASS_NAME$1","PLUGIN_PROPS$1","NOT_VISITORS$1","CHILDREN$1","isPromise$1","getEvents$1","toStack$1","events","cleanMarks$1","postcss$2$1","LazyResult$2$1","LazyResult","onRejected","onFinally","pluginName","pluginVer","runtimeVer","b","event","filter","promise","promise1","_loop","_state","visitor","roots","subRoot","onFulfilled","visitors","visit2","_visitors_visit2_visitorIndex","lazyResult$1","MapGenerator2$1","stringify$1$1","warnOnce2$1","parse$1$1","Result$1$1","NoWorkResult$1$1","NoWorkResult","_map_generate","generatedCSS","generatedMap","noWorkResult$1","NoWorkResult2$1","LazyResult$1$1","Document$1$1","Root$2$1","Processor$1$1","Processor","plugins","normalized","processor$1","Declaration$1$1","PreviousMap2$1","Comment$1$1","AtRule$1$1","Input$1$1","Root$1$1","Rule$1$1","fromJSON$1$1","ownInputs","inputHydrated","_defaults_source","fromJSON_1$1","CssSyntaxError2$1","Declaration2$1","LazyResult2$1","Container2$1","Processor2$1","stringify$5$1","fromJSON$2","Document22","Warning2$1","Comment2$1","AtRule2$1","Result2$1","Input2$1","parse$5","list$3","Rule2$1","Root2$1","Node2$1","postcss$3","initializer","warningPrinted","creator","transformer","processOpts","pluginOpts","postcss_1$1","postcss$1$1","__defProp2","__defNormalProp2","__publicField2","getDefaultExportFromCjs$2","getAugmentedNamespace$2","picocolors_browser$2","x$2","create$2","picocolors_browserExports$2","__viteBrowserExternal$3","__viteBrowserExternal$1$2","require$$2$2","pico$2","terminalHighlight$1$2","CssSyntaxError$3$2","CssSyntaxError2","_pico$2_createColors","cssSyntaxError$2","symbols$2","DEFAULT_RAW$2","capitalize$2","Stringifier$2$2","Stringifier2","stringifier$2","Stringifier$1$2","stringify$4$2","stringify_1$2","isClean$2$2","my$2$2","CssSyntaxError$2$2","Stringifier22","stringify$3$2","cloneNode$2","Node$4$2","Node3","node$2","Node$3$2","Declaration$4$2","Declaration2","declaration$2","urlAlphabet$2","nanoid$1$2","nonSecure$2","SourceMapConsumer$2$2","SourceMapGenerator$2$2","existsSync$2","readFileSync$2","dirname$1$2","join$2","fromBase64$2","PreviousMap$2$2","PreviousMap2","previousMap$2","SourceMapConsumer$1$2","SourceMapGenerator$1$2","fileURLToPath$2","pathToFileURL$1$2","isAbsolute$2","resolve$1$2","nanoid$3","terminalHighlight$3","CssSyntaxError$1$2","PreviousMap$1$2","fromOffsetCache$2","sourceMapAvailable$1$2","pathAvailable$1$2","Input$4$2","Input2","input$2","SourceMapConsumer$4","SourceMapGenerator$4","dirname$3","relative$2","resolve$3","sep$2","pathToFileURL$3","Input$3$2","sourceMapAvailable$3","pathAvailable$3","MapGenerator$2$2","MapGenerator2","mapGenerator$2","Node$2$2","Comment$4$2","Comment2","comment$2","isClean$1$2","my$1$2","Declaration$3$2","Comment$3$2","Node$1$2","parse$4$2","Rule$4$2","AtRule$4$2","Root$6$2","cleanSource$2","markDirtyUp$2","Container$7$2","Container2","container$2","Container$6$2","LazyResult$4$2","Processor$3$2","Document$3$2","Document23","document$1$2","printed$2","warnOnce$2$2","Warning$2$2","Warning2","warning$2","Warning$1$2","Result$3$2","Result2","result$2","SINGLE_QUOTE$2","DOUBLE_QUOTE$2","BACKSLASH$2","SLASH$2","NEWLINE$2","SPACE$2","FEED$2","TAB$2","CR$2","OPEN_SQUARE$2","CLOSE_SQUARE$2","OPEN_PARENTHESES$2","CLOSE_PARENTHESES$2","OPEN_CURLY$2","CLOSE_CURLY$2","SEMICOLON$2","ASTERISK$2","COLON$2","AT$2","RE_AT_END$2","RE_WORD_END$2","RE_BAD_BRACKET$2","RE_HEX_ESCAPE$2","tokenize$2","Container$5$2","AtRule$3$2","AtRule2","_Container$5$2_prototype_append","_Container$5$2_prototype_prepend","atRule$2","Container$4$2","LazyResult$3$2","Processor$2$2","Root$5$2","Root2","root$2","list$2$2","list_1$2","Container$3$2","list$1$2","Rule$3$2","Rule2","rule$2","Declaration$2$2","tokenizer22","Comment$2$2","AtRule$2$2","Root$4$2","Rule$2$2","SAFE_COMMENT_NEIGHBOR$2","findLastWithPosition$2","Parser$1$2","Parser2","parser$2","Container$2$2","Parser22","Input$2$2","parse$3$2","parse_1$2","isClean$4","my$4","MapGenerator$1$2","stringify$2$2","Container$1$2","Document$2$2","warnOnce$1$2","Result$2$2","parse$2$2","Root$3$2","TYPE_TO_CLASS_NAME$2","PLUGIN_PROPS$2","NOT_VISITORS$2","CHILDREN$2","isPromise$2","getEvents$2","toStack$2","cleanMarks$2","postcss$2$2","LazyResult$2$2","LazyResult2","lazyResult$2","MapGenerator22","stringify$1$2","warnOnce22","parse$1$2","Result$1$2","NoWorkResult$1$2","NoWorkResult2","noWorkResult$2","NoWorkResult22","LazyResult$1$2","Document$1$2","Root$2$2","Processor$1$2","Processor2","processor$2","Declaration$1$2","PreviousMap22","Comment$1$2","AtRule$1$2","Input$1$2","Root$1$2","Rule$1$2","fromJSON$1$2","fromJSON_1$2","CssSyntaxError22","Declaration22","LazyResult22","Container22","Processor22","stringify$6","fromJSON$3","Document222","Warning22","Comment22","AtRule22","Result22","Input22","parse$6","list$4","Rule22","Root22","Node22","postcss$4","postcss_1$2","postcss$1$2","BaseRRNode","_args","_newChild","_refChild","_node","childIterator","testableAccessors$2","testableMethods$2","untaintedBasePrototype$2","isAngularZonePresent$2","getUntaintedPrototype$2","untaintedAccessorCache$2","getUntaintedAccessor$2","untaintedMethodCache$2","getUntaintedMethod$2","childNodes$2","parentNode$2","parentElement$2","textContent$2","contains$2","getRootNode$2","host$2","styleSheets$2","shadowRoot$2","querySelector$2","querySelectorAll$2","mutationObserverCtor$2","patch$2","index$2","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","receiver","throttle","wait","timeout","previous","now","remaining","context","hookSetter","isRevoked","nowTimestamp","getWindowScroll","_c","_d","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill$1","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","_this_styleIDMap_get","newId","getShadowHost","shadowHost","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","NodeType","isNodeInLinkedList","DoubleLinkedList","current1","moveKey","parentId","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","parentTag","currentN","iframe","childSn","removedNode","isParentRemoved","n21","isAncestorInSet","candidate","tailNode","parentId1","nextId1","unhandledNode","parentId2","payload","attribute","diffAsStr","unchangedAsStr","textarea","item","cn","attributeName","value1","old","pname","newValue","newPriority","pname1","nodeId","deepDelete","processRemoves","targetId","addsSet","queue","n22","removes","_isParentRemoved","_mirror2","set","_isAncestorInSet","errorHandler","registerErrorHandler","handler","unregisterErrorHandler","callbackWrapper","rrwebWrapped","rest","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","observer","removeMutationBufferForDoc","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","updatePosition","evt","clientX","clientY","handlers","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","eventName","h","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","param1","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","text2","v2","lastInputValue","currentWindow","propertyDescriptor","hookProperties","_handlers","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","rules21","index21","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","argumentsList","_getIdAndStyleId","styleBlock","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","host2","hostId","patchTarget","originalPropertyDescriptor","_a3","sheets","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","loop","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","selectionCb","collapsed","updateSelection","selection","ranges","count","startContainer","startOffset","endContainer","endOffset","blocked","initCustomElementObserver","customElementCb","constructor","mergeHooks","o2","hooks","mutationCb","canvasMutationCb","_hooks","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin3","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","ids","IframeManager","cleanup","storedDoc","observerCleanup","crossOriginMessageEvent","iframeSourceWindow","transformedEvent","iframeMirror","keys","ShadowDomManager","iframeElement","manager","option","sRoot","chars","lookup","i$1","encode","arraybuffer","bytes","base64","canvasVarMap","variableListFor$1","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","list2","serializeArg","name1","name2","name3","src","name4","src1","name5","name6","serializeArgs","webGLConstructorNames","supportedWebGLConstructorNames","initCanvas2DMutationObserver","recordArgs","hookHandler","props2D","getNormalizedContextName","contextType","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","patchGLPrototype","prototype","mutation","initCanvasWebGLMutationObserver","_handlers1","encodedJs","decodeBase64","blob","WorkerWrapper","objURL","worker","CanvasManager","newFrame","_options_sampling","fps","canvasContextReset","snapshotInProgressMap","_e2_data","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","timestamp","_this1","bitmap","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","_values","valuesWithType","StylesheetManager","linkEl","styles","r2","adoptedStyleSheetData","styleEl","_linkEl","ProcessedNodeManager","thisBuffer","buffers","toOrigin","buildAllowedOriginSet","origins","entry","wrappedEmit","takeFullSnapshot$1","canvasManager","recording","cleanFrame","mirror","record","emit","checkoutEveryNms","checkoutEveryNth","_options_blockClass","_options_blockSelector","_options_ignoreClass","_options_ignoreSelector","_options_maskTextClass","_options_maskTextSelector","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","_options_recordDOM","recordDOM","_options_recordCrossOriginIframes","recordCrossOriginIframes","allowedIframeOrigins","_options_recordAfter","recordAfter","_options_userTriggeredOnInput","_options_collectFonts","collectFonts","_options_ignoreCSSAttributes","errorHandler2","validatedOrigins","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","targetOrigin","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","shadowDomManager","observe","iframeHandler","existingCleanup","idx","init","msg","tag","t2","testableAccessors","testableMethods","untaintedBasePrototype","isAngularZonePresent","getUntaintedPrototype","untaintedAccessorCache","getUntaintedAccessor","untaintedMethodCache","getUntaintedMethod","childNodes","parentNode","parentElement","textContent","contains","getRootNode","host","styleSheets","shadowRoot","querySelector","querySelectorAll","mutationObserverCtor","patch$1","index","classMatchesRegex","getDefaultExportFromCjs","getAugmentedNamespace","a","picocolors_browser","x","create","picocolors_browserExports","__viteBrowserExternal","__viteBrowserExternal$1","require$$2","pico","terminalHighlight$1","CssSyntaxError$3","plugin2","_pico_createColors","cssSyntaxError","symbols","DEFAULT_RAW","capitalize","Stringifier$2","stringifier","Stringifier$1","stringify$4","stringify_1","isClean$2","my$2","CssSyntaxError$2","stringify$3","cloneNode","Node$4","Node1","node","Node$3","Declaration$4","declaration","urlAlphabet","nanoid$1","nonSecure","SourceMapConsumer$2","SourceMapGenerator$2","existsSync","readFileSync","dirname$1","join","fromBase64","PreviousMap$2","previousMap","SourceMapConsumer$1","SourceMapGenerator$1","fileURLToPath","pathToFileURL$1","isAbsolute","resolve$1","nanoid","terminalHighlight","CssSyntaxError$1","PreviousMap$1","fromOffsetCache","sourceMapAvailable$1","pathAvailable$1","Input$4","l","input","SourceMapConsumer","SourceMapGenerator","dirname","relative","sep","pathToFileURL","Input$3","sourceMapAvailable","pathAvailable","MapGenerator$2","mapGenerator","Node$2","Comment$4","comment","isClean$1","my$1","Declaration$3","Comment$3","Node$1","parse$4","Rule$4","AtRule$4","Root$6","cleanSource","markDirtyUp","Container$7","i1","container","Container$6","LazyResult$4","Processor$3","Document$3","Document","document$1","printed","warnOnce$2","Warning$2","warning","Warning$1","Result$3","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","tokenize","Container$5","AtRule$3","_Container$5_prototype_append","_Container$5_prototype_prepend","atRule","Container$4","LazyResult$3","Processor$2","Root$5","root","list$2","list_1","Container$3","list$1","Rule$3","rule","Declaration$2","tokenizer2","Comment$2","AtRule$2","Root$4","Rule$2","SAFE_COMMENT_NEIGHBOR","findLastWithPosition","Parser$1","parser","Container$2","Input$2","parse$3","parse_1","isClean","my","MapGenerator$1","stringify$2","Container$1","Document$2","warnOnce$1","Result$2","parse$2","Root$3","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","NOT_VISITORS","CHILDREN","isPromise","getEvents","toStack","cleanMarks","postcss$2","LazyResult$2","lazyResult","stringify$1","warnOnce2","parse$1","Result$1","NoWorkResult$1","noWorkResult","LazyResult$1","Document$1","Root$2","Processor$1","processor","Declaration$1","Comment$1","AtRule$1","Input$1","Root$1","Rule$1","fromJSON$1","fromJSON_1","stringify$5","fromJSON","parse","list","postcss","postcss_1","postcss$1","__defProp","__defNormalProp","__publicField","patch","StackFrame","lineNumber","columnNumber","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","ErrorStackParser","urlLike","regExp","filtered","sanitizedLine","location","locationParts","functionName","fileName","functionNameRegex","matches","lineRE","functionCall","pathToSelector","domSiblings","sibling","isObject","isObjTooDeep","limit","stringify","stringifyOptions","thisPos","shouldIgnore","toString","eventResult","eventValue","_obj","defaultLogOptions","initLogObserver","logOptions","loggerType","logger","logCount","inStack","cancelHandlers","trace","stackFrame","unhandledrejectionHandler","levelType","_logger","level","argsForPayload","PLUGIN_NAME","getRecordConsolePlugin","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","val","config","first","Item","schedule","isThenable","_then","oType","notify","notifyIsolated","chain","ret","defWrapper","MakeDefWrapper","iteratePromises","resolver","rejecter","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","msgs","PromisePolyfill","MAX_RECORDING_MS","MAX_VALUE_FOR_MIN_RECORDING_MS","ArrayProto","FuncProto","ObjProto","slice","hasOwnProperty","windowConsole","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","console","log_func_with_prefix","prefix","console_with_prefix","bound","iterable","results","found","needle","subclass","superclass","encoded","pad","mixed_val","escapable","c","holder","gap","mind","partial","at","ch","escapee","hex","uffff","white","word","object","b64","o1","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","stringl","c1","uuid","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","regexS","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","getElementsBySelector","foundCount","elements","currentContextIndex","currentContext","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","extra_props","batchedThrottle","waitMs","timeoutPromise","throttledItems","Promise","returnValue","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","tld","isOnline","onLine","NOOP_FUNC","urlMatchesRegexList","regexList","JSONStringify","JSONParse","canUseCompressionStream","version","IDBStorageWrapper","dbName","storeName","versionData","storeNamesInDb","openRequest","ev","db","dbOrError","mode","storeCb","doTransaction","transaction","objectStore","req","MIXPANEL_BROWSER_DB_NAME","RECORDING_EVENTS_STORE_NAME","RECORDING_REGISTRY_STORE_NAME","RECORDER_VERSION_DATA","GDPR_DEFAULT_PERSISTENCE_PREFIX","hasOptedOut","_hasDoNotTrackFlagOn","optedOut","_getStorageValue","addOptOutCheckMixpanelLib","_addOptOutCheck","_getStorage","_getStorageKey","_getOptOutCheckPersistenceType","persistenceType","persistencePrefix","writtenTo","hasFlag","nav","hasDntOn","dntValue","getConfigValue","ignoreDnt","SharedLock","lockedCB","pid","startTime","pollIntervalMS","timeoutMS","keyX","keyY","keyZ","delay","waitFor","predicate","getSetY","valY","criticalSection","removeLock","LocalStorageWrapper","storageOverride","RequestQueue","storageKey","queueEntry","flushInterval","queueEntries","enqueueItem","storedQueue","succeeded","batchSize","batch","idsInBatch","filterOutIDsAndInvalid","items","idSet","filteredItems","removeFromStorage","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","MAX_RETRY_INTERVAL_MS","RequestBatcher","flushMS","currentBatchSize","attemptSecondaryFlush","dataForRequest","transformedItems","addPayload","itemId","removeItemsFromQueue","batchSendCallback","res","retryMS","halvedBatchSize","requestOptions","isRecordingExpired","serializedRecording","RECORD_ENQUEUE_THROTTLE_MS","validateAllowedOrigins","valid","elementLooksSensitive","sensitiveNameRegex","COMMON_MASK_CLASSES_SELECTOR","RRWEB_PASSWORD_ATTRIBUTE","ALWAYS_MASKED_INPUT_TYPES","normalizeSelectors","getPrivacyConfig","mixpanelInstance","privacyConfig","maskInputSelector","unmaskInputSelector","unmaskTextSelector","maskAllText","legacyMaskTextClass","textMaskingSelectors","classSelector","elementMatchesSelector","shouldMaskInput","inputType","autocomplete","shouldMaskText","getTimeOrigin","defaultNetworkOptions","isNavigationTiming","isResourceTiming","findLast","replacementFactory","MAX_BODY_SIZE","truncateBody","initPerformanceObserver","initialPerformanceEntries","entries","performanceEntries","shouldRecordHeader","recordHeaders","headerName","shouldRecordBody","recordBodyUrls","tryReadXHRBody","tryReadFetchBody","txt","reason","getRequestPerformanceEntry","initiatorType","attempt","urlPerformanceEntries","performanceEntry","initXhrObserver","restorePatch","originalOpen","async","username","password","xhr","networkRequest","requestHeaders","originalSetRequestHeader","header","originalSend","responseHeaders","rawHeaders","headers","colonIndex","request","buildRecordedRequest","initFetchObserver","originalFetch","originalFetchPromise","requestBodyPromise","responseBodyResolve","responseBodyPromise","response","initNetworkObserver","networkOptions","requests","shouldIgnoreUrl","performanceObserver","xhrObserver","fetchObserver","NETWORK_PLUGIN_NAME","getRecordNetworkPlugin","CompressionStream","RECORDER_BATCHER_LIB_CONFIG","ACTIVE_SOURCES","isUserEvent","SessionRecording","usePersistence","userIdInfo","deviceId","userId","configVar","shouldStopBatcher","resetIdleTimeout","idleTimeoutMs","ignoreRequestUrls","maxTimeoutMs","skipFlush","flushPromise","onOptOut","tabId","currentReplayId","reqParams","reqBody","onSuccess","responseBody","apiHost","numEvents","replayId","batchStartTime","batchEndTime","hasFullSnapshot","replayLengthMs","eventsJson","sendUncompressed","jsonStream","gzipStream","compressedBlob","configValue","shouldMaskFn","shouldMask","textLength","RecordingRegistry","serializedRecordings","unloadPromises","sessionRecording","MixpanelRecorder","rrwebRecord","sharedLockStorage","onIdleTimeout","onMaxLengthReached","onBatchSent","sessionRecordingOptions","disableActiveRecording","stopRecordingPromise","startNewIfInactive","activeSerializedRecording"],"mappings":"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"} \ No newline at end of file diff --git a/dist/async-modules/mixpanel-recorder-ud-sZFul.min.js b/dist/async-modules/mixpanel-recorder-ud-sZFul.min.js new file mode 100644 index 00000000..22fe4347 --- /dev/null +++ b/dist/async-modules/mixpanel-recorder-ud-sZFul.min.js @@ -0,0 +1,2 @@ +(function(){"use strict";var H;if(typeof window=="undefined"){var zs={hostname:""};H={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:zs,referrer:""},screen:{width:0,height:0},location:zs,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else H=window;var Si={LIB_VERSION:"2.85.0-rc1"},Oc="__mp_recorder";function Ws(r,i){(i==null||i>r.length)&&(i=r.length);for(var o=0,e=new Array(i);o=0)&&(o[t]=r[t]);return o}function Yt(r,i){return Yt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Yt(r,i)}function M(r){"@swc/helpers - typeof";return r&&typeof Symbol!="undefined"&&r.constructor===Symbol?"symbol":typeof r}function Ec(r,i){if(r){if(typeof r=="string")return Ws(r,i);var o=Object.prototype.toString.call(r).slice(8,-1);if(o==="Object"&&r.constructor&&(o=r.constructor.name),o==="Map"||o==="Set")return Array.from(o);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return Ws(r,i)}}function Jt(r){var i=typeof Map=="function"?new Map:void 0;return Jt=function(e){if(e===null||!xc(e))return e;if(typeof e!="function")throw new TypeError("Super expression must either be null or a function");if(typeof i!="undefined"){if(i.has(e))return i.get(e);i.set(e,t)}function t(){return Tr(e,arguments,Ci(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),Yt(t,e)},Jt(r)}function js(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(i){}return(js=function(){return!!r})()}function I(r,i){var o=typeof Symbol!="undefined"&&r[Symbol.iterator]||r["@@iterator"];if(o)return(o=o.call(r)).next.bind(o);if(Array.isArray(r)||(o=Ec(r))||i){o&&(r=o);var e=0;return function(){return e>=r.length?{done:!0}:{done:!1,value:r[e++]}}}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 rt(r,i){var o,e,t,n,s={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return n={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(n[Symbol.iterator]=function(){return this}),n;function a(f){return function(l){return u([f,l])}}function u(f){if(o)throw new TypeError("Generator is already executing.");for(;s;)try{if(o=1,e&&(t=f[0]&2?e.return:f[0]?e.throw||((t=e.return)&&t.call(e),0):e.next)&&!(t=t.call(e,f[1])).done)return t;switch(e=0,t&&(f=[f[0]&2,t.value]),f[0]){case 0:case 1:t=f;break;case 4:return s.label++,{value:f[1],done:!1};case 5:s.label++,e=f[1],f=[0];continue;case 7:f=s.ops.pop(),s.trys.pop();continue;default:if(t=s.trys,!(t=t.length>0&&t[t.length-1])&&(f[0]===6||f[0]===2)){s=0;continue}if(f[0]===3&&(!t||f[1]>t[0]&&f[1]=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}};throw new TypeError(i?"Object is not iterable.":"Symbol.iterator is not defined.")}var Ac=Object.defineProperty,Mc=function(r,i,o){return i in r?Ac(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},O=function(r,i,o){return Mc(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},qs,$c=Object.defineProperty,kc=function(r,i,o){return i in r?$c(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},Vs=function(r,i,o){return kc(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},he=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(he||{}),Hs={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Ys={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Nr={},Pc=function(){return!!globalThis.Zone};function Oi(r){if(Nr[r])return Nr[r];var i=globalThis[r],o=i.prototype,e=r in Hs?Hs[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Ys?Ys[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!Pc())return Nr[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Nr[r]=f:o}catch(l){return o}}var Ri={};function We(r,i,o){var e,t=r+"."+String(o);if(Ri[t])return Ri[t].call(i);var n=Oi(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(Ri[t]=s,s.call(i)):i[o]}var xi={};function Js(r,i,o){var e=r+"."+String(o);if(xi[e])return xi[e].bind(i);var t=Oi(r),n=t[o];return typeof n!="function"?i[o]:(xi[e]=n,n.bind(i))}function _c(r){return We("Node",r,"childNodes")}function Tc(r){return We("Node",r,"parentNode")}function Nc(r){return We("Node",r,"parentElement")}function Lc(r){return We("Node",r,"textContent")}function Dc(r,i){return Js("Node",r,"contains")(i)}function Fc(r){return Js("Node",r,"getRootNode")()}function Bc(r){return!r||!("host"in r)?null:We("ShadowRoot",r,"host")}function Uc(r){return r.styleSheets}function zc(r){return!r||!("shadowRoot"in r)?null:We("Element",r,"shadowRoot")}function Wc(r,i){return We("Element",r,"querySelector")(i)}function Gc(r,i){return We("Element",r,"querySelectorAll")(i)}function jc(){return Oi("MutationObserver").constructor}function qc(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var ve={childNodes:_c,parentNode:Tc,parentElement:Nc,textContent:Lc,contains:Dc,getRootNode:Fc,host:Bc,styleSheets:Uc,shadowRoot:zc,querySelector:Wc,querySelectorAll:Gc,mutationObserver:jc,patch:qc};function Zs(r){return r.nodeType===r.ELEMENT_NODE}function Zt(r){var i=r&&"host"in r&&"mode"in r&&ve.host(r)||null;return!!(i&&"shadowRoot"in i&&ve.shadowRoot(i)===r)}function Kt(r){return Object.prototype.toString.call(r)==="[object ShadowRoot]"}function Vc(r){return r.includes(" background-clip: text;")&&!r.includes(" -webkit-background-clip: text;")&&(r=r.replace(/\sbackground-clip:\s*text;/g," -webkit-background-clip: text; background-clip: text;")),r}function Hc(r){var i=r.cssText;if(i.split('"').length<3)return i;var o=["@import","url("+JSON.stringify(r.href)+")"];return r.layerName===""?o.push("layer"):r.layerName&&o.push("layer("+r.layerName+")"),r.supportsText&&o.push("supports("+r.supportsText+")"),r.media.length&&o.push(r.media.mediaText),o.join(" ")+";"}function Ei(r){try{var i=r.rules||r.cssRules;if(!i)return null;var o=r.href;!o&&r.ownerNode&&r.ownerNode.ownerDocument&&(o=r.ownerNode.ownerDocument.location.href);var e=Array.from(i,function(t){return Ks(t,o)}).join("");return Vc(e)}catch(t){return null}}function Ks(r,i){if(Jc(r)){var o;try{o=Ei(r.styleSheet)||Hc(r)}catch(t){o=r.cssText}return r.styleSheet.href?Lr(o,r.styleSheet.href):o}else{var e=r.cssText;return Zc(r)&&r.selectorText.includes(":")&&(e=Yc(e)),i?Lr(e,i):e}}function Yc(r){var i=/(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;return r.replace(i,"$1\\$2")}function Jc(r){return"styleSheet"in r}function Zc(r){return"selectorText"in r}var Xs=(function(){function r(){Vs(this,"idNodeMap",new Map),Vs(this,"nodeMetaMap",new WeakMap)}var i=r.prototype;return i.getId=function(e){var t;if(!e)return-1;var n=(t=this.getMeta(e))==null?void 0:t.id;return n!=null?n:-1},i.getNode=function(e){return this.idNodeMap.get(e)||null},i.getIds=function(){return Array.from(this.idNodeMap.keys())},i.getMeta=function(e){return this.nodeMetaMap.get(e)||null},i.removeNodeFromMap=function(e,t){var n=this;t===void 0&&(t=!1);var s=this.getId(e);this.idNodeMap.delete(s),t&&this.nodeMetaMap.delete(e),e.childNodes&&e.childNodes.forEach(function(a){return n.removeNodeFromMap(a,t)})},i.has=function(e){return this.idNodeMap.has(e)},i.hasNode=function(e){return this.nodeMetaMap.has(e)},i.add=function(e,t){var n=t.id;this.idNodeMap.set(n,e),this.nodeMetaMap.set(e,t)},i.replace=function(e,t){var n=this.getNode(e);if(n){var s=this.nodeMetaMap.get(n);s&&this.nodeMetaMap.set(t,s)}this.idNodeMap.set(e,t)},i.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},r})();function Kc(){return new Xs}function Xt(r){var i=r.element,o=r.maskInputOptions,e=r.tagName,t=r.type,n=r.value,s=r.maskInputFn,a=n||"",u=t&&nt(t);return(o[e.toLowerCase()]||u&&o[u])&&(s?a=s(a,i):a="*".repeat(a.length)),a}function nt(r){return r.toLowerCase()}var Qs="__rrweb_original__";function Xc(r){var i=r.getContext("2d");if(!i)return!0;for(var o=50,e=0;e-1?i=r.split("/").slice(0,3).join("/"):i=r.split("/")[0],i=i.split("?")[0],i}var eh=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,th=/^(?:[a-z+]+:)?\/\//i,rh=/^www\..*/i,nh=/^(data:)([^,]*),(.*)/i;function Lr(r,i){return(r||"").replace(eh,function(o,e,t,n,s,a){var u=t||s||a,f=e||n||"";if(!u)return o;if(th.test(u)||rh.test(u)||nh.test(u))return"url("+f+u+f+")";if(u[0]==="/")return"url("+f+(Qc(i)+u)+f+")";var l=i.split("/"),c=u.split("/");l.pop();for(var h=I(c),v;!(v=h()).done;){var p=v.value;p!=="."&&(p===".."?l.pop():l.push(p))}return"url("+f+l.join("/")+f+")"})}function Dr(r,i){return i===void 0&&(i=!1),i?r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,""):r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,"").replace(/0px/g,"0")}function ih(r,i,o){o===void 0&&(o=!1);var e=Array.from(i.childNodes),t=[],n=0;if(e.length>1&&r&&typeof r=="string"){for(var s=Dr(r,o),a=s.length/r.length,u=1;u2&&v[0]===""&&e[u-1].textContent!=="")p=s.indexOf(h,1);else if(v.length===1){if(h=h.substring(0,h.length-1),v=s.split(h),v.length<=1)return t.push(r),t;c=l+1}else c===f.length-1&&(p=s.indexOf(h));if(v.length>=2&&c>l){var m=e[u-1].textContent;if(m&&typeof m=="string"){var d=Dr(m).length;p=s.indexOf(h,d)}p===-1&&(p=v[0].length)}if(p!==-1){for(var g=Math.floor(p/a);g>0&&g50*e.length)return t.push(r),t;var w=Dr(r.substring(0,g),o);if(w.length===p){t.push(r.substring(0,g)),r=r.substring(g),s=s.substring(p);break}else w.length=i.length);){var n=e(fh);if(n.slice(-1)===",")n=Ot(r,n.substring(0,n.length-1)),t.push(n);else{var s="";n=Ot(r,n);for(var a=!1;;){var u=i.charAt(o);if(u===""){t.push((n+s).trim());break}else if(a)u===")"&&(a=!1);else if(u===","){o+=1,t.push((n+s).trim());break}else u==="("&&(a=!0);s+=u,o+=1}}}return t.join(", ")}var na=new WeakMap;function Ot(r,i){return!i||i.trim()===""?i:Ai(r,i)}function hh(r){return!!(r.tagName==="svg"||r.ownerSVGElement)}function Ai(r,i){var o=na.get(r);if(o||(o=r.createElement("a"),na.set(r,o)),!i)i="";else if(i.startsWith("blob:")||i.startsWith("data:"))return i;return o.setAttribute("href",i),o.href}function ia(r,i,o,e){return e&&(o==="src"||o==="href"&&!(i==="use"&&e[0]==="#")||o==="xlink:href"&&e[0]!=="#"||o==="background"&&(i==="table"||i==="td"||i==="th")?Ot(r,e):o==="srcset"?ch(r,e):o==="style"?Lr(e,Ai(r)):i==="object"&&o==="data"?Ot(r,e):e)}function oa(r,i,o){return(r==="video"||r==="audio")&&i==="autoplay"}function dh(r,i,o){try{if(typeof i=="string"){if(r.classList.contains(i))return!0}else for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}if(o)return r.matches(o)}catch(n){}return!1}function Fr(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return o?Fr(ve.parentNode(r),i,o):!1;for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return o?Fr(ve.parentNode(r),i,o):!1}function sa(r,i,o,e){var t;if(Zs(r)){if(t=r,!ve.childNodes(t).length)return!1}else{if(ve.parentElement(r)===null)return!1;t=ve.parentElement(r)}try{if(typeof i=="string"){if(e){if(t.closest("."+i))return!0}else if(t.classList.contains(i))return!0}else if(Fr(t,i,e))return!0;if(o){if(e){if(t.closest(o))return!0}else if(t.matches(o))return!0}}catch(n){}return!1}function ph(r,i,o){var e=r.contentWindow;if(e){var t=!1,n;try{n=e.document.readyState}catch(u){return}if(n!=="complete"){var s=setTimeout(function(){t||(i(),t=!0)},o);r.addEventListener("load",function(){clearTimeout(s),t=!0,i()});return}var a="about:blank";if(e.location.href!==a||r.src===a||r.src==="")return setTimeout(i,0),r.addEventListener("load",i);r.addEventListener("load",i)}}function vh(r,i,o){var e=!1,t;try{t=r.sheet}catch(s){return}if(!t){var n=setTimeout(function(){e||(i(),e=!0)},o);r.addEventListener("load",function(){clearTimeout(n),e=!0,i()})}}function mh(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.needsMask,a=i.inlineStylesheet,u=i.maskInputOptions,f=u===void 0?{}:u,l=i.maskTextFn,c=i.maskInputFn,h=i.dataURLOptions,v=h===void 0?{}:h,p=i.inlineImages,m=i.recordCanvas,d=i.keepIframeSrcFn,g=i.newlyAddedElement,w=g===void 0?!1:g,b=i.cssCaptured,S=b===void 0?!1:b,C=gh(o,e);switch(r.nodeType){case r.DOCUMENT_NODE:return r.compatMode!=="CSS1Compat"?{type:he.Document,childNodes:[],compatMode:r.compatMode}:{type:he.Document,childNodes:[]};case r.DOCUMENT_TYPE_NODE:return{type:he.DocumentType,name:r.name,publicId:r.publicId,systemId:r.systemId,rootId:C};case r.ELEMENT_NODE:return wh(r,{doc:o,blockClass:t,blockSelector:n,inlineStylesheet:a,maskInputOptions:f,maskInputFn:c,dataURLOptions:v,inlineImages:p,recordCanvas:m,keepIframeSrcFn:d,newlyAddedElement:w,rootId:C});case r.TEXT_NODE:return yh(r,{doc:o,needsMask:s,maskTextFn:l,rootId:C,cssCaptured:S});case r.CDATA_SECTION_NODE:return{type:he.CDATA,textContent:"",rootId:C};case r.COMMENT_NODE:return{type:he.Comment,textContent:ve.textContent(r)||"",rootId:C};default:return!1}}function gh(r,i){if(i.hasNode(r)){var o=i.getId(r);return o===1?void 0:o}}function yh(r,i){var o=i.needsMask,e=i.maskTextFn,t=i.rootId,n=i.cssCaptured,s=ve.parentNode(r),a=s&&s.tagName,u="",f=a==="STYLE"?!0:void 0,l=a==="SCRIPT"?!0:void 0;return l?u="SCRIPT_PLACEHOLDER":n||(u=ve.textContent(r),f&&u&&(u=Lr(u,Ai(i.doc)))),!f&&!l&&u&&o&&(u=e?e(u,ve.parentElement(r)):u.replace(/[\S]/g,"*")),{type:he.Text,textContent:u||"",rootId:t}}function wh(r,i){for(var o=i.doc,e=i.blockClass,t=i.blockSelector,n=i.inlineStylesheet,s=i.maskInputOptions,a=s===void 0?{}:s,u=i.maskInputFn,f=i.dataURLOptions,l=f===void 0?{}:f,c=i.inlineImages,h=i.recordCanvas,v=i.keepIframeSrcFn,p=i.newlyAddedElement,m=p===void 0?!1:p,d=i.rootId,g=dh(r,e,t),w=uh(r),b={},S=r.attributes.length,C=0;C1&&(k=oh(k,r)),b._cssText=k)}if(w==="input"||w==="textarea"||w==="select"){var N=r.value,ae=r.checked;b.type!=="radio"&&b.type!=="checkbox"&&b.type!=="submit"&&b.type!=="button"&&N?b.value=Xt({element:r,type:Qt(r),tagName:w,value:N,maskInputOptions:a,maskInputFn:u}):ae&&(b.checked=ae)}if((w==="input"||w==="textarea")&&b.placeholder&&(b.placeholder=Xt({element:r,type:Qt(r),tagName:w,value:b.placeholder,maskInputOptions:a,maskInputFn:u})),w==="option"&&(r.selected&&!a.select?b.selected=!0:delete b.selected),w==="dialog"&&r.open&&(b.rr_open_mode=r.matches("dialog:modal")?"modal":"non-modal"),w==="canvas"&&h){if(r.__context==="2d")Xc(r)||(b.rr_dataURL=r.toDataURL(l.type,l.quality));else if(!("__context"in r)){var P=r.toDataURL(l.type,l.quality),D=o.createElement("canvas");D.width=r.width,D.height=r.height;var oe=D.toDataURL(l.type,l.quality);P!==oe&&(b.rr_dataURL=P)}}if(w==="img"&&c){It||(It=o.createElement("canvas"),ra=It.getContext("2d"));var z=r,Ce=z.currentSrc||z.getAttribute("src")||"",be=z.crossOrigin,pe=function(){z.removeEventListener("load",pe);try{It.width=z.naturalWidth,It.height=z.naturalHeight,ra.drawImage(z,0,0),b.rr_dataURL=It.toDataURL(l.type,l.quality)}catch(Oe){if(z.crossOrigin!=="anonymous"){z.crossOrigin="anonymous",z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe);return}else console.warn("Cannot inline img src="+Ce+"! Error: "+Oe)}z.crossOrigin==="anonymous"&&(be?b.crossOrigin=be:z.removeAttribute("crossorigin"))};z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe)}if(w==="audio"||w==="video"){var ie=b;ie.rr_mediaState=r.paused?"paused":"played",ie.rr_mediaCurrentTime=r.currentTime,ie.rr_mediaPlaybackRate=r.playbackRate,ie.rr_mediaMuted=r.muted,ie.rr_mediaLoop=r.loop,ie.rr_mediaVolume=r.volume}if(m||(r.scrollLeft&&(b.rr_scrollLeft=r.scrollLeft),r.scrollTop&&(b.rr_scrollTop=r.scrollTop)),g){var de=r.getBoundingClientRect(),dt=de.width,Ne=de.height;b={class:b.class,rr_width:""+dt+"px",rr_height:""+Ne+"px"}}w==="iframe"&&!v(b.src)&&(r.contentDocument||(b.rr_src=b.src),delete b.src);var pt;try{customElements.get(w)&&(pt=!0)}catch(Oe){}return{type:he.Element,tagName:w,attributes:b,childNodes:[],isSVG:hh(r)||void 0,needBlock:g,rootId:d,isCustom:pt}}function Y(r){return r==null?"":r.toLowerCase()}function bh(r,i){if(i.comment&&r.type===he.Comment)return!0;if(r.type===he.Element){if(i.script&&(r.tagName==="script"||r.tagName==="link"&&(r.attributes.rel==="preload"&&r.attributes.as==="script"||r.attributes.rel==="modulepreload")||r.tagName==="link"&&r.attributes.rel==="prefetch"&&typeof r.attributes.href=="string"&&ea(r.attributes.href)==="js"))return!0;if(i.headFavicon&&(r.tagName==="link"&&r.attributes.rel==="shortcut icon"||r.tagName==="meta"&&(Y(r.attributes.name).match(/^msapplication-tile(image|color)$/)||Y(r.attributes.name)==="application-name"||Y(r.attributes.rel)==="icon"||Y(r.attributes.rel)==="apple-touch-icon"||Y(r.attributes.rel)==="shortcut icon")))return!0;if(r.tagName==="meta"){if(i.headMetaDescKeywords&&Y(r.attributes.name).match(/^description|keywords$/))return!0;if(i.headMetaSocial&&(Y(r.attributes.property).match(/^(og|twitter|fb):/)||Y(r.attributes.name).match(/^(og|twitter):/)||Y(r.attributes.name)==="pinterest"))return!0;if(i.headMetaRobots&&(Y(r.attributes.name)==="robots"||Y(r.attributes.name)==="googlebot"||Y(r.attributes.name)==="bingbot"))return!0;if(i.headMetaHttpEquiv&&r.attributes["http-equiv"]!==void 0)return!0;if(i.headMetaAuthorship&&(Y(r.attributes.name)==="author"||Y(r.attributes.name)==="generator"||Y(r.attributes.name)==="framework"||Y(r.attributes.name)==="publisher"||Y(r.attributes.name)==="progid"||Y(r.attributes.property).match(/^article:/)||Y(r.attributes.property).match(/^product:/)))return!0;if(i.headMetaVerification&&(Y(r.attributes.name)==="google-site-verification"||Y(r.attributes.name)==="yandex-verification"||Y(r.attributes.name)==="csrf-token"||Y(r.attributes.name)==="p:domain_verify"||Y(r.attributes.name)==="verify-v1"||Y(r.attributes.name)==="verification"||Y(r.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function Rt(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.maskTextClass,a=i.maskTextSelector,u=i.skipChild,f=u===void 0?!1:u,l=i.inlineStylesheet,c=l===void 0?!0:l,h=i.maskInputOptions,v=h===void 0?{}:h,p=i.maskTextFn,m=i.maskInputFn,d=i.slimDOMOptions,g=i.dataURLOptions,w=g===void 0?{}:g,b=i.inlineImages,S=b===void 0?!1:b,C=i.recordCanvas,R=C===void 0?!1:C,E=i.onSerialize,x=i.onIframeLoad,k=i.iframeLoadTimeout,N=k===void 0?5e3:k,ae=i.onStylesheetLoad,P=i.stylesheetLoadTimeout,D=P===void 0?5e3:P,oe=i.keepIframeSrcFn,z=oe===void 0?function(){return!1}:oe,Ce=i.newlyAddedElement,be=Ce===void 0?!1:Ce,pe=i.cssCaptured,ie=pe===void 0?!1:pe,de=i.needsMask,dt=i.preserveWhiteSpace,Ne=dt===void 0?!0:dt;if(!de){var pt=de===void 0;de=sa(r,s,a,pt)}var Oe=mh(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,dataURLOptions:w,inlineImages:S,recordCanvas:R,keepIframeSrcFn:z,newlyAddedElement:be,cssCaptured:ie});if(!Oe)return console.warn(r,"not serialized"),null;var Qe;e.hasNode(r)?Qe=e.getId(r):bh(Oe,d)||!Ne&&Oe.type===he.Text&&!Oe.textContent.replace(/^\s+|\s+$/gm,"").length?Qe=er:Qe=ta();var G=Object.assign(Oe,{id:Qe});if(e.add(r,G),Qe===er)return null;E&&E(r);var jt=!f;if(G.type===he.Element){jt=jt&&!G.needBlock,delete G.needBlock;var qt=ve.shadowRoot(r);qt&&Kt(qt)&&(G.isShadowHost=!0)}if((G.type===he.Document||G.type===he.Element)&&jt){d.headWhitespace&&G.type===he.Element&&G.tagName==="head"&&(Ne=!1);var et={doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:f,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:D,keepIframeSrcFn:z,cssCaptured:!1};if(!(G.type===he.Element&&G.tagName==="textarea"&&G.attributes.value!==void 0)){G.type===he.Element&&G.attributes._cssText!==void 0&&typeof G.attributes._cssText=="string"&&(et.cssCaptured=!0);for(var mi=I(Array.from(ve.childNodes(r))),Vt;!(Vt=mi()).done;){var gi=Vt.value,yi=Rt(gi,et);yi&&G.childNodes.push(yi)}}var Pr=null;if(Zs(r)&&(Pr=ve.shadowRoot(r)))for(var vt=I(Array.from(ve.childNodes(Pr))),mt;!(mt=vt()).done;){var gt=mt.value,yt=Rt(gt,et);yt&&(Kt(Pr)&&(yt.isShadow=!0),G.childNodes.push(yt))}}var wt=ve.parentNode(r);return wt&&Zt(wt)&&Kt(wt)&&(G.isShadow=!0),G.type===he.Element&&G.tagName==="iframe"&&ph(r,function(){var Ue=r.contentDocument;if(Ue&&x){var Ht=Rt(Ue,{doc:Ue,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:D,keepIframeSrcFn:z});Ht&&x(r,Ht)}},N),G.type===he.Element&&G.tagName==="link"&&typeof G.attributes.rel=="string"&&(G.attributes.rel==="stylesheet"||G.attributes.rel==="preload"&&typeof G.attributes.href=="string"&&ea(G.attributes.href)==="css")&&vh(r,function(){if(ae){var Ue=Rt(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:D,keepIframeSrcFn:z});Ue&&ae(r,Ue)}},D),G}function Sh(r,i){var o=i||{},e=o.mirror,t=e===void 0?new Xs:e,n=o.blockClass,s=n===void 0?"rr-block":n,a=o.blockSelector,u=a===void 0?null:a,f=o.maskTextClass,l=f===void 0?"rr-mask":f,c=o.maskTextSelector,h=c===void 0?null:c,v=o.inlineStylesheet,p=v===void 0?!0:v,m=o.inlineImages,d=m===void 0?!1:m,g=o.recordCanvas,w=g===void 0?!1:g,b=o.maskAllInputs,S=b===void 0?!1:b,C=o.maskTextFn,R=o.maskInputFn,E=o.slimDOM,x=E===void 0?!1:E,k=o.dataURLOptions,N=o.preserveWhiteSpace,ae=o.onSerialize,P=o.onIframeLoad,D=o.iframeLoadTimeout,oe=o.onStylesheetLoad,z=o.stylesheetLoadTimeout,Ce=o.keepIframeSrcFn,be=Ce===void 0?function(){return!1}:Ce,pe=S===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:S===!1?{password:!0}:S,ie=x===!0||x==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:x==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:x===!1?{}:x;return Rt(r,{doc:r,mirror:t,blockClass:s,blockSelector:u,maskTextClass:l,maskTextSelector:h,skipChild:!1,inlineStylesheet:p,maskInputOptions:pe,maskTextFn:C,maskInputFn:R,slimDOMOptions:ie,dataURLOptions:k,inlineImages:d,recordCanvas:w,preserveWhiteSpace:N,onSerialize:ae,onIframeLoad:P,iframeLoadTimeout:D,onStylesheetLoad:oe,stylesheetLoadTimeout:z,keepIframeSrcFn:be,newlyAddedElement:!1})}function Ch(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function Ih(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Mi={exports:{}},K=String,aa=function(){return{isColorSupported:!1,reset:K,bold:K,dim:K,italic:K,underline:K,inverse:K,hidden:K,strikethrough:K,black:K,red:K,green:K,yellow:K,blue:K,magenta:K,cyan:K,white:K,gray:K,bgBlack:K,bgRed:K,bgGreen:K,bgYellow:K,bgBlue:K,bgMagenta:K,bgCyan:K,bgWhite:K}};Mi.exports=aa(),Mi.exports.createColors=aa;var Oh=Mi.exports,Rh={},xh=Object.freeze(Object.defineProperty({__proto__:null,default:Rh},Symbol.toStringTag,{value:"Module"})),ue=Ih(xh),ua=Oh,fa=ue,$i=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ua.isColorSupported),fa&&t&&(s=fa(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ua.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Jt(Error)),ki=$i;$i.default=$i;var Ge={};Ge.isClean=Symbol("isClean"),Ge.my=Symbol("my");var la={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Eh(r){return r[0].toUpperCase()+r.slice(1)}var Pi=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),ca=Pi;Pi.default=Pi;var Ah=ca;function _i(r,i){var o=new Ah(i);o.stringify(r)}var Br=_i;_i.default=_i;var Ur=Ge.isClean,Mh=Ge.my,$h=ki,kh=ca,Ph=Br;function Ti(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Ti(s,o)}):(n==="object"&&t!==null&&(t=Ti(t)),o[e]=t)}return o}var Ni=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[Ur]=!1,this[Mh]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Ti(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new $h(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[Ur]){this[Ur]=!1;for(var e=this;e=e.parent;)e[Ur]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=Di(e),Dh(e))return this.mapFile=e,Fh(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,ha))return da.fromSourceMap(t).toString();if(A(t,da))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Bh(Di(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),pa=Fi;Fi.default=Fi;var zh=ue.SourceMapConsumer,Wh=ue.SourceMapGenerator,va=ue.fileURLToPath,Gr=ue.pathToFileURL,Bi=ue.isAbsolute,Ui=ue.resolve,Gh=Lh.nanoid,zi=ue,ma=ki,jh=pa,Wi=Symbol("fromOffsetCache"),qh=!!(zh&&Wh),ga=!!(Ui&&Bi),jr=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!ga||/^\w+:\/\//.test(e.from)||Bi(e.from)?this.file=e.from:this.file=Ui(e.from)),ga&&qh){var t=new jh(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new ma(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new ma(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(Gr&&(a.input.url=Gr(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[Wi])n=this[Wi];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Ui(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;Bi(u.source)?l=Gr(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Gr(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(va)c.file=va(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Yh&&Hh&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Vr.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Vr({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new Vr({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?Hr(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=Hr(ba(n,this.mapOpts.annotation)));var s=wa(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Vh(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(Ca){var n=Ca(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;Sa==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),Ia=Jh,Zh=zr,Gi=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Zh),Yr=Gi;Gi.default=Gi;var Oa=Ge.isClean,Ra=Ge.my,xa=Wr,Ea=Yr,Kh=zr,Aa,ji,qi,Ma;function $a(r){return r.map(function(i){return i.nodes&&(i.nodes=$a(i.nodes)),delete i.source,i})}function ka(r){if(r[Oa]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ka(e)}}var Le=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Kh);Le.registerParse=function(r){Aa=r},Le.registerRule=function(r){ji=r},Le.registerAtRule=function(r){qi=r},Le.registerRoot=function(r){Ma=r};var it=Le;Le.default=Le,Le.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,qi.prototype):r.type==="rule"?Object.setPrototypeOf(r,ji.prototype):r.type==="decl"?Object.setPrototypeOf(r,xa.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ea.prototype):r.type==="root"&&Object.setPrototypeOf(r,Ma.prototype),r[Ra]=!0,r.nodes&&r.nodes.forEach(function(i){Le.rebuild(i)})};var Xh=it,Pa,_a,tr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new Pa(new _a,this,t);return n.stringify()},i})(Xh);tr.registerLazyResult=function(r){Pa=r},tr.registerProcessor=function(r){_a=r};var Vi=tr;tr.default=tr;var Ta={},Na=function(i){Ta[i]||(Ta[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Hi=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),La=Hi;Hi.default=Hi;var Qh=La,Yi=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Qh(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ji=Yi;Yi.default=Yi;var Zi=39,Da=34,Jr=92,Fa=47,Zr=10,rr=32,Kr=12,Xr=9,Qr=13,ed=91,td=93,rd=40,nd=41,id=123,od=125,sd=59,ad=42,ud=58,fd=64,en=/[\t\n\f\r "#'()/;[\\\]{}]/g,tn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,ld=/.[\r\n"'(/\\]/,Ba=/[\da-f]/i,cd=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Zr:case rr:case Xr:case Qr:case Kr:{s=d;do s+=1,n=e.charCodeAt(s);while(n===rr||n===Zr||n===Xr||n===Qr||n===Kr);p=["space",e.slice(d,s)],d=s-1;break}case ed:case td:case id:case od:case ud:case sd:case nd:{var N=String.fromCharCode(n);p=[N,N,d];break}case rd:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==Zi&&v!==Da&&v!==rr&&v!==Zr&&v!==Xr&&v!==Kr&&v!==Qr){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Jr;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||ld.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case Zi:case Da:{a=n===Zi?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Jr;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case fd:{en.lastIndex=d+1,en.test(e),en.lastIndex===0?s=e.length-1:s=en.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Jr:{for(s=d,f=!0;e.charCodeAt(s+1)===Jr;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Fa&&n!==rr&&n!==Zr&&n!==Xr&&n!==Qr&&n!==Kr&&(s+=1,Ba.test(e.charAt(s)))){for(;Ba.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===rr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Fa&&e.charCodeAt(d+1)===ad?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(tn.lastIndex=d+1,tn.test(e),tn.lastIndex===0?s=e.length-1:s=tn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Ua=it,rn=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Wa(new Ga,this,t);return n.stringify()},i})(za);xt.registerLazyResult=function(r){Wa=r},xt.registerProcessor=function(r){Ga=r};var nr=xt;xt.default=xt,za.registerRoot(xt);var ir={comma:function(i){return ir.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return ir.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},ja=ir;ir.default=ir;var qa=it,hd=ja,nn=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return hd.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(qa),Xi=nn;nn.default=nn,qa.registerRule(nn);var dd=Wr,pd=cd,vd=Yr,md=Ki,gd=nr,Va=Xi,Ha={empty:!0,space:!0};function yd(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var wd=(function(){function r(o){this.input=o,this.root=new gd,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new md;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new vd;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=pd(this.input)},i.decl=function(e,t){var n=new dd;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||yd(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Va;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!_d[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Td[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return _r(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!or(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return or(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=xd;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new Rd(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(or(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Ae];)a[Ae]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Md("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(or(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ou.isColorSupported),su&&t&&(s=su(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ou.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Jt(Error)),so=oo;oo.default=oo;var je={};je.isClean=Symbol("isClean"),je.my=Symbol("my");var au={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function wp(r){return r[0].toUpperCase()+r.slice(1)}var ao=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),uu=ao;ao.default=ao;var bp=uu;function uo(r,i){var o=new bp(i);o.stringify(r)}var sn=uo;uo.default=uo;var an=je.isClean,Sp=je.my,Cp=so,Ip=uu,Op=sn;function fo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return fo(s,o)}):(n==="object"&&t!==null&&(t=fo(t)),o[e]=t)}return o}var lo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[an]=!1,this[Sp]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=fo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new Cp(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[an]){this[an]=!1;for(var e=this;e=e.parent;)e[an]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ho(e),Mp(e))return this.mapFile=e,$p(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,fu))return lu.fromSourceMap(t).toString();if(A(t,lu))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=kp(ho(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),cu=po;po.default=po;var _p=fe.SourceMapConsumer,Tp=fe.SourceMapGenerator,hu=fe.fileURLToPath,ln=fe.pathToFileURL,vo=fe.isAbsolute,mo=fe.resolve,Np=Ap.nanoid,go=fe,du=so,Lp=cu,yo=Symbol("fromOffsetCache"),Dp=!!(_p&&Tp),pu=!!(mo&&vo),cn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!pu||/^\w+:\/\//.test(e.from)||vo(e.from)?this.file=e.from:this.file=mo(e.from)),pu&&Dp){var t=new Lp(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new du(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new du(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(ln&&(a.input.url=ln(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[yo])n=this[yo];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:mo(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;vo(u.source)?l=ln(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||ln(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(hu)c.file=hu(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Up&&Bp&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=dn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new dn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new dn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?pn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=pn(gu(n,this.mapOpts.annotation)));var s=mu(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Fp(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(wu){var n=wu(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;yu==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),bu=zp,Wp=un,wo=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Wp),vn=wo;wo.default=wo;var Su=je.isClean,Cu=je.my,Iu=fn,Ou=vn,Gp=un,Ru,bo,So,xu;function Eu(r){return r.map(function(i){return i.nodes&&(i.nodes=Eu(i.nodes)),delete i.source,i})}function Au(r){if(r[Su]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;Au(e)}}var De=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Gp);De.registerParse=function(r){Ru=r},De.registerRule=function(r){bo=r},De.registerAtRule=function(r){So=r},De.registerRoot=function(r){xu=r};var ot=De;De.default=De,De.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,So.prototype):r.type==="rule"?Object.setPrototypeOf(r,bo.prototype):r.type==="decl"?Object.setPrototypeOf(r,Iu.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ou.prototype):r.type==="root"&&Object.setPrototypeOf(r,xu.prototype),r[Cu]=!0,r.nodes&&r.nodes.forEach(function(i){De.rebuild(i)})};var jp=ot,Mu,$u,ur=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new Mu(new $u,this,t);return n.stringify()},i})(jp);ur.registerLazyResult=function(r){Mu=r},ur.registerProcessor=function(r){$u=r};var Co=ur;ur.default=ur;var ku={},Pu=function(i){ku[i]||(ku[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Io=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),_u=Io;Io.default=Io;var qp=_u,Oo=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new qp(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ro=Oo;Oo.default=Oo;var xo=39,Tu=34,mn=92,Nu=47,gn=10,fr=32,yn=12,wn=9,bn=13,Vp=91,Hp=93,Yp=40,Jp=41,Zp=123,Kp=125,Xp=59,Qp=42,ev=58,tv=64,Sn=/[\t\n\f\r "#'()/;[\\\]{}]/g,Cn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,rv=/.[\r\n"'(/\\]/,Lu=/[\da-f]/i,nv=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case gn:case fr:case wn:case bn:case yn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===fr||n===gn||n===wn||n===bn||n===yn);p=["space",e.slice(d,s)],d=s-1;break}case Vp:case Hp:case Zp:case Kp:case ev:case Xp:case Jp:{var N=String.fromCharCode(n);p=[N,N,d];break}case Yp:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==xo&&v!==Tu&&v!==fr&&v!==gn&&v!==wn&&v!==yn&&v!==bn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===mn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||rv.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case xo:case Tu:{a=n===xo?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===mn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case tv:{Sn.lastIndex=d+1,Sn.test(e),Sn.lastIndex===0?s=e.length-1:s=Sn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case mn:{for(s=d,f=!0;e.charCodeAt(s+1)===mn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Nu&&n!==fr&&n!==gn&&n!==wn&&n!==bn&&n!==yn&&(s+=1,Lu.test(e.charAt(s)))){for(;Lu.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===fr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Nu&&e.charCodeAt(d+1)===Qp?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(Cn.lastIndex=d+1,Cn.test(e),Cn.lastIndex===0?s=e.length-1:s=Cn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Du=ot,In=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Bu(new Uu,this,t);return n.stringify()},i})(Fu);Mt.registerLazyResult=function(r){Bu=r},Mt.registerProcessor=function(r){Uu=r};var lr=Mt;Mt.default=Mt,Fu.registerRoot(Mt);var cr={comma:function(i){return cr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return cr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},zu=cr;cr.default=cr;var Wu=ot,iv=zu,On=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return iv.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Wu),Ao=On;On.default=On,Wu.registerRule(On);var ov=fn,sv=nv,av=vn,uv=Eo,fv=lr,Gu=Ao,ju={empty:!0,space:!0};function lv(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var cv=(function(){function r(o){this.input=o,this.root=new fv,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new uv;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new av;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=sv(this.input)},i.decl=function(e,t){var n=new ov;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||lv(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Gu;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!Rv[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!xv[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return _r(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!hr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return hr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=yv;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new gv(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(hr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Me];)a[Me]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Sv("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(hr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndexi?(e&&(clearTimeout(e),e=null),t=u,r.apply(l,s)):!e&&o.trailing!==!1&&(e=setTimeout(function(){t=o.leading===!1?0:Date.now(),e=null,r.apply(l,s)},f))}}function En(r,i,o,e,t){t===void 0&&(t=window);var n=t.Object.getOwnPropertyDescriptor(r,i);return t.Object.defineProperty(r,i,e?o:{set:function(a){var u=this;setTimeout(function(){o.set.call(u,a)},0),n&&n.set&&n.set.call(this,a)}}),function(){return En(r,i,n||{},!0)}}var An=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(An=function(){return new Date().getTime()});function af(r){var i,o,e,t,n=r.document;return{left:n.scrollingElement?n.scrollingElement.scrollLeft:r.pageXOffset!==void 0?r.pageXOffset:n.documentElement.scrollLeft||(n==null?void 0:n.body)&&((i=F.parentElement(n.body))==null?void 0:i.scrollLeft)||((o=n==null?void 0:n.body)==null?void 0:o.scrollLeft)||0,top:n.scrollingElement?n.scrollingElement.scrollTop:r.pageYOffset!==void 0?r.pageYOffset:(n==null?void 0:n.documentElement.scrollTop)||(n==null?void 0:n.body)&&((e=F.parentElement(n.body))==null?void 0:e.scrollTop)||((t=n==null?void 0:n.body)==null?void 0:t.scrollTop)||0}}function uf(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function ff(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function lf(r){if(!r)return null;var i=r.nodeType===r.ELEMENT_NODE?r:F.parentElement(r);return i}function ge(r,i,o,e){if(!r)return!1;var t=lf(r);if(!t)return!1;try{if(typeof i=="string"){if(t.classList.contains(i)||e&&t.closest("."+i)!==null)return!0}else if(Fr(t,i,e))return!0}catch(n){}return!!(o&&(t.matches(o)||e&&t.closest(o)!==null))}function gm(r,i){return i.getId(r)!==-1}function Do(r,i,o){return r.tagName==="TITLE"&&o.headTitleMutations?!0:i.getId(r)===er}function cf(r,i){if(Zt(r))return!1;var o=i.getId(r);if(!i.has(o))return!0;var e=F.parentNode(r);return e&&e.nodeType===r.DOCUMENT_NODE?!1:e?cf(e,i):!0}function Fo(r){return!!r.changedTouches}function ym(r){r===void 0&&(r=window),"NodeList"in r&&!r.NodeList.prototype.forEach&&(r.NodeList.prototype.forEach=Array.prototype.forEach),"DOMTokenList"in r&&!r.DOMTokenList.prototype.forEach&&(r.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function hf(r,i){return!!(r.nodeName==="IFRAME"&&i.getMeta(r))}function df(r,i){return!!(r.nodeName==="LINK"&&r.nodeType===r.ELEMENT_NODE&&r.getAttribute&&r.getAttribute("rel")==="stylesheet"&&i.getMeta(r))}function Bo(r){return r?A(r,im)&&"shadowRoot"in r?!!r.shadowRoot:!!F.shadowRoot(r):!1}var wm=(function(){function r(){O(this,"id",1),O(this,"styleIDMap",new WeakMap),O(this,"idStyleMap",new Map)}var i=r.prototype;return i.getId=function(e){var t;return(t=this.styleIDMap.get(e))!=null?t:-1},i.has=function(e){return this.styleIDMap.has(e)},i.add=function(e,t){if(this.has(e))return this.getId(e);var n;return t===void 0?n=this.id++:n=t,this.styleIDMap.set(e,n),this.idStyleMap.set(n,e),n},i.getStyle=function(e){return this.idStyleMap.get(e)||null},i.reset=function(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1},i.generateId=function(){return this.id++},i.remove=function(e){var t=this.styleIDMap.get(e);return t!==void 0?(this.styleIDMap.delete(e),this.idStyleMap.delete(t),!0):!1},r})();function pf(r){var i,o=null;return"getRootNode"in r&&((i=F.getRootNode(r))==null?void 0:i.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&F.host(F.getRootNode(r))&&(o=F.host(F.getRootNode(r))),o}function bm(r){for(var i=r,o;o=pf(i);)i=o;return i}function Sm(r){var i=r.ownerDocument;if(!i)return!1;var o=bm(r);return F.contains(i,o)}function vf(r){var i=r.ownerDocument;return i?F.contains(i,r)||Sm(r):!1}var B=(function(r){return r[r.DomContentLoaded=0]="DomContentLoaded",r[r.Load=1]="Load",r[r.FullSnapshot=2]="FullSnapshot",r[r.IncrementalSnapshot=3]="IncrementalSnapshot",r[r.Meta=4]="Meta",r[r.Custom=5]="Custom",r[r.Plugin=6]="Plugin",r})(B||{}),_=(function(r){return r[r.Mutation=0]="Mutation",r[r.MouseMove=1]="MouseMove",r[r.MouseInteraction=2]="MouseInteraction",r[r.Scroll=3]="Scroll",r[r.ViewportResize=4]="ViewportResize",r[r.Input=5]="Input",r[r.TouchMove=6]="TouchMove",r[r.MediaInteraction=7]="MediaInteraction",r[r.StyleSheetRule=8]="StyleSheetRule",r[r.CanvasMutation=9]="CanvasMutation",r[r.Font=10]="Font",r[r.Log=11]="Log",r[r.Drag=12]="Drag",r[r.StyleDeclaration=13]="StyleDeclaration",r[r.Selection=14]="Selection",r[r.AdoptedStyleSheet=15]="AdoptedStyleSheet",r[r.CustomElement=16]="CustomElement",r})(_||{}),we=(function(r){return r[r.MouseUp=0]="MouseUp",r[r.MouseDown=1]="MouseDown",r[r.Click=2]="Click",r[r.ContextMenu=3]="ContextMenu",r[r.DblClick=4]="DblClick",r[r.Focus=5]="Focus",r[r.Blur=6]="Blur",r[r.TouchStart=7]="TouchStart",r[r.TouchMove_Departed=8]="TouchMove_Departed",r[r.TouchEnd=9]="TouchEnd",r[r.TouchCancel=10]="TouchCancel",r})(we||{}),Fe=(function(r){return r[r.Mouse=0]="Mouse",r[r.Pen=1]="Pen",r[r.Touch=2]="Touch",r})(Fe||{}),_t=(function(r){return r[r["2D"]=0]="2D",r[r.WebGL=1]="WebGL",r[r.WebGL2=2]="WebGL2",r})(_t||{}),Tt=(function(r){return r[r.Play=0]="Play",r[r.Pause=1]="Pause",r[r.Seeked=2]="Seeked",r[r.VolumeChange=3]="VolumeChange",r[r.RateChange=4]="RateChange",r})(Tt||{}),mf=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(mf||{});function gf(r){return"__ln"in r}var Cm=(function(){function r(){O(this,"length",0),O(this,"head",null),O(this,"tail",null)}var i=r.prototype;return i.get=function(e){if(e>=this.length)throw new Error("Position outside of list range");for(var t=this.head,n=0;n=0;i--){var o=$e[i];o.getDoc()===r&&$e.splice(i,1)}}function Mm(r){var i=r.mousemoveCb,o=r.sampling,e=r.doc,t=r.mirror;if(o.mousemove===!1)return function(){};var n=typeof o.mousemove=="number"?o.mousemove:50,s=typeof o.mousemoveCallback=="number"?o.mousemoveCallback:500,a=[],u,f=vr(U(function(h){var v=Date.now()-u;i(a.map(function(p){return p.timeOffset-=v,p}),h),a=[],u=null}),s),l=U(vr(U(function(h){var v=gr(h),p=Fo(h)?h.changedTouches[0]:h,m=p.clientX,d=p.clientY;u||(u=An()),a.push({x:m,y:d,id:t.getId(v),timeOffset:An()-u}),f(typeof DragEvent!="undefined"&&A(h,DragEvent)?_.Drag:A(h,MouseEvent)?_.MouseMove:_.TouchMove)}),n,{trailing:!1})),c=[me("mousemove",l,e),me("touchmove",l,e),me("drag",l,e)];return U(function(){c.forEach(function(h){return h()})})}function $m(r){var i=r.mouseInteractionCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling;if(s.mouseInteraction===!1)return function(){};var a=s.mouseInteraction===!0||s.mouseInteraction===void 0?{}:s.mouseInteraction,u=[],f=null,l=function(c){return function(h){var v=gr(h);if(!ge(v,t,n,!0)){var p=null,m=c;if("pointerType"in h){switch(h.pointerType){case"mouse":p=Fe.Mouse;break;case"touch":p=Fe.Touch;break;case"pen":p=Fe.Pen;break}p===Fe.Touch?we[c]===we.MouseDown?m="TouchStart":we[c]===we.MouseUp&&(m="TouchEnd"):Fe.Pen}else Fo(h)&&(p=Fe.Touch);p!==null?(f=p,(m.startsWith("Touch")&&p===Fe.Touch||m.startsWith("Mouse")&&p===Fe.Mouse)&&(p=null)):we[c]===we.Click&&(p=f,f=null);var d=Fo(h)?h.changedTouches[0]:h;if(d){var g=e.getId(v),w=d.clientX,b=d.clientY;U(i)(T({type:we[m],id:g,x:w,y:b},p!==null&&{pointerType:p}))}}}};return Object.keys(we).filter(function(c){return Number.isNaN(Number(c))&&!c.endsWith("_Departed")&&a[c]!==!1}).forEach(function(c){var h=nt(c),v=l(c);if(window.PointerEvent)switch(we[c]){case we.MouseDown:case we.MouseUp:h=h.replace("mouse","pointer");break;case we.TouchStart:case we.TouchEnd:return}u.push(me(h,v,o))}),U(function(){u.forEach(function(c){return c()})})}function If(r){var i=r.scrollCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling,a=U(vr(U(function(u){var f=gr(u);if(!(!f||ge(f,t,n,!0))){var l=e.getId(f);if(f===o&&o.defaultView){var c=af(o.defaultView);i({id:l,x:c.left,y:c.top})}else i({id:l,x:f.scrollLeft,y:f.scrollTop})}}),s.scroll||100));return me("scroll",a,o)}function km(r,i){var o=r.viewportResizeCb,e=i.win,t=-1,n=-1,s=U(vr(U(function(){var a=uf(),u=ff();(t!==a||n!==u)&&(o({width:Number(u),height:Number(a)}),t=a,n=u)}),200));return me("resize",s,e)}var Pm=["INPUT","TEXTAREA","SELECT"],Of=new WeakMap;function _m(r){var i=r.inputCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.ignoreClass,a=r.ignoreSelector,u=r.maskInputOptions,f=r.maskInputFn,l=r.sampling,c=r.userTriggeredOnInput;function h(S){var C=gr(S),R=S.isTrusted,E=C&&C.tagName;if(C&&E==="OPTION"&&(C=F.parentElement(C)),!(!C||!E||Pm.indexOf(E)<0||ge(C,t,n,!0))&&!(C.classList.contains(s)||a&&C.matches(a))){var x=C.value,k=!1,N=Qt(C)||"";N==="radio"||N==="checkbox"?k=C.checked:(u[E.toLowerCase()]||u[N])&&(x=Xt({element:C,maskInputOptions:u,tagName:E,type:N,value:x,maskInputFn:f})),v(C,c?{text:x,isChecked:k,userTriggered:R}:{text:x,isChecked:k});var ae=C.name;N==="radio"&&ae&&k&&o.querySelectorAll('input[type="radio"][name="'+ae+'"]').forEach(function(P){if(P!==C){var D=P.value;v(P,c?{text:D,isChecked:!k,userTriggered:!1}:{text:D,isChecked:!k})}})}}function v(S,C){var R=Of.get(S);if(!R||R.text!==C.text||R.isChecked!==C.isChecked){Of.set(S,C);var E=e.getId(S);U(i)(T({},C,{id:E}))}}var p=l.input==="last"?["change"]:["input","change"],m=p.map(function(S){return me(S,U(h),o)}),d=o.defaultView;if(!d)return function(){m.forEach(function(S){return S()})};var g=d.Object.getOwnPropertyDescriptor(d.HTMLInputElement.prototype,"value"),w=[[d.HTMLInputElement.prototype,"value"],[d.HTMLInputElement.prototype,"checked"],[d.HTMLSelectElement.prototype,"value"],[d.HTMLTextAreaElement.prototype,"value"],[d.HTMLSelectElement.prototype,"selectedIndex"],[d.HTMLOptionElement.prototype,"selected"]];if(g&&g.set){var b;(b=m).push.apply(b,[].concat(w.map(function(S){return En(S[0],S[1],{set:function(){U(h)({target:this,isTrusted:!1})}},!1,d)})))}return U(function(){m.forEach(function(S){return S()})})}function Mn(r){var i=[];function o(e,t){if($n("CSSGroupingRule")&&A(e.parentRule,CSSGroupingRule)||$n("CSSMediaRule")&&A(e.parentRule,CSSMediaRule)||$n("CSSSupportsRule")&&A(e.parentRule,CSSSupportsRule)||$n("CSSConditionRule")&&A(e.parentRule,CSSConditionRule)){var n=Array.from(e.parentRule.cssRules),s=n.indexOf(e);t.unshift(s)}else if(e.parentStyleSheet){var a=Array.from(e.parentStyleSheet.cssRules),u=a.indexOf(e);t.unshift(u)}return t}return o(r,i)}function Ve(r,i,o){var e,t;return r?(r.ownerNode?e=i.getId(r.ownerNode):t=o.getId(r),{styleId:t,id:e}):{}}function Tm(r,i){var o=r.styleSheetRuleCb,e=r.mirror,t=r.stylesheetManager,n=i.win;if(!n.CSSStyleSheet||!n.CSSStyleSheet.prototype)return function(){};var s=n.CSSStyleSheet.prototype.insertRule;n.CSSStyleSheet.prototype.insertRule=new Proxy(s,{apply:U(function(h,v,p){var m=p[0],d=p[1],g=Ve(v,e,t.styleMirror),w=g.id,b=g.styleId;return(w&&w!==-1||b&&b!==-1)&&o({id:w,styleId:b,adds:[{rule:m,index:d}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.addRule=function(h,v,p){p===void 0&&(p=this.cssRules.length);var m=h+" { "+v+" }";return n.CSSStyleSheet.prototype.insertRule.apply(this,[m,p])};var a=n.CSSStyleSheet.prototype.deleteRule;n.CSSStyleSheet.prototype.deleteRule=new Proxy(a,{apply:U(function(h,v,p){var m=p[0],d=Ve(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,removes:[{index:m}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.removeRule=function(h){return n.CSSStyleSheet.prototype.deleteRule.apply(this,[h])};var u;n.CSSStyleSheet.prototype.replace&&(u=n.CSSStyleSheet.prototype.replace,n.CSSStyleSheet.prototype.replace=new Proxy(u,{apply:U(function(h,v,p){var m=p[0],d=Ve(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replace:m}),h.apply(v,p)})}));var f;n.CSSStyleSheet.prototype.replaceSync&&(f=n.CSSStyleSheet.prototype.replaceSync,n.CSSStyleSheet.prototype.replaceSync=new Proxy(f,{apply:U(function(h,v,p){var m=p[0],d=Ve(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replaceSync:m}),h.apply(v,p)})}));var l={};kn("CSSGroupingRule")?l.CSSGroupingRule=n.CSSGroupingRule:(kn("CSSMediaRule")&&(l.CSSMediaRule=n.CSSMediaRule),kn("CSSConditionRule")&&(l.CSSConditionRule=n.CSSConditionRule),kn("CSSSupportsRule")&&(l.CSSSupportsRule=n.CSSSupportsRule));var c={};return Object.entries(l).forEach(function(h){var v=h[0],p=h[1];c[v]={insertRule:p.prototype.insertRule,deleteRule:p.prototype.deleteRule},p.prototype.insertRule=new Proxy(c[v].insertRule,{apply:U(function(m,d,g){var w=g[0],b=g[1],S=Ve(d.parentStyleSheet,e,t.styleMirror),C=S.id,R=S.styleId;return(C&&C!==-1||R&&R!==-1)&&o({id:C,styleId:R,adds:[{rule:w,index:[].concat(Mn(d),[b||0])}]}),m.apply(d,g)})}),p.prototype.deleteRule=new Proxy(c[v].deleteRule,{apply:U(function(m,d,g){var w=g[0],b=Ve(d.parentStyleSheet,e,t.styleMirror),S=b.id,C=b.styleId;return(S&&S!==-1||C&&C!==-1)&&o({id:S,styleId:C,removes:[{index:[].concat(Mn(d),[w])}]}),m.apply(d,g)})})}),U(function(){n.CSSStyleSheet.prototype.insertRule=s,n.CSSStyleSheet.prototype.deleteRule=a,u&&(n.CSSStyleSheet.prototype.replace=u),f&&(n.CSSStyleSheet.prototype.replaceSync=f),Object.entries(l).forEach(function(h){var v=h[0],p=h[1];p.prototype.insertRule=c[v].insertRule,p.prototype.deleteRule=c[v].deleteRule})})}function Rf(r,i){var o=r.mirror,e=r.stylesheetManager,t,n,s,a=null;i.nodeName==="#document"?a=o.getId(i):a=o.getId(F.host(i));var u=i.nodeName==="#document"?(t=i.defaultView)==null?void 0:t.Document:(s=(n=i.ownerDocument)==null?void 0:n.defaultView)==null?void 0:s.ShadowRoot,f=u!=null&&u.prototype?Object.getOwnPropertyDescriptor(u==null?void 0:u.prototype,"adoptedStyleSheets"):void 0;return a===null||a===-1||!u||!f?function(){}:(Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:function(){var c;return(c=f.get)==null?void 0:c.call(this)},set:function(c){var h,v=(h=f.set)==null?void 0:h.call(this,c);if(a!==null&&a!==-1)try{e.adoptStyleSheets(c,a)}catch(p){}return v}}),U(function(){Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:f.get,set:f.set})}))}function Nm(r,i){var o=r.styleDeclarationCb,e=r.mirror,t=r.ignoreCSSAttributes,n=r.stylesheetManager,s=i.win,a=s.CSSStyleDeclaration.prototype.setProperty;s.CSSStyleDeclaration.prototype.setProperty=new Proxy(a,{apply:U(function(f,l,c){var h,v=c[0],p=c[1],m=c[2];if(t.has(v))return a.apply(l,[v,p,m]);var d=Ve((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,set:{property:v,value:p,priority:m},index:Mn(l.parentRule)}),f.apply(l,c)})});var u=s.CSSStyleDeclaration.prototype.removeProperty;return s.CSSStyleDeclaration.prototype.removeProperty=new Proxy(u,{apply:U(function(f,l,c){var h,v=c[0];if(t.has(v))return u.apply(l,[v]);var p=Ve((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),m=p.id,d=p.styleId;return(m&&m!==-1||d&&d!==-1)&&o({id:m,styleId:d,remove:{property:v},index:Mn(l.parentRule)}),f.apply(l,c)})}),U(function(){s.CSSStyleDeclaration.prototype.setProperty=a,s.CSSStyleDeclaration.prototype.removeProperty=u})}function Lm(r){var i=r.mediaInteractionCb,o=r.blockClass,e=r.blockSelector,t=r.mirror,n=r.sampling,s=r.doc,a=U(function(f){return vr(U(function(l){var c=gr(l);if(!(!c||ge(c,o,e,!0))){var h=c.currentTime,v=c.volume,p=c.muted,m=c.playbackRate,d=c.loop;i({type:f,id:t.getId(c),currentTime:h,volume:v,muted:p,playbackRate:m,loop:d})}}),n.media||500)}),u=[me("play",a(Tt.Play),s),me("pause",a(Tt.Pause),s),me("seeked",a(Tt.Seeked),s),me("volumechange",a(Tt.VolumeChange),s),me("ratechange",a(Tt.RateChange),s)];return U(function(){u.forEach(function(f){return f()})})}function Dm(r){var i=r.fontCb,o=r.doc,e=o.defaultView;if(!e)return function(){};var t=[],n=new WeakMap,s=e.FontFace;e.FontFace=function(f,l,c){var h=new s(f,l,c);return n.set(h,{family:f,buffer:typeof l!="string",descriptors:c,fontSource:typeof l=="string"?l:JSON.stringify(Array.from(new Uint8Array(l)))}),h};var a=st(o.fonts,"add",function(u){return function(f){return setTimeout(U(function(){var l=n.get(f);l&&(i(l),n.delete(f))}),0),u.apply(this,[f])}});return t.push(function(){e.FontFace=s}),t.push(a),U(function(){t.forEach(function(u){return u()})})}function Fm(r){var i=r.doc,o=r.mirror,e=r.blockClass,t=r.blockSelector,n=r.selectionCb,s=!0,a=U(function(){var u=i.getSelection();if(!(!u||s&&(u!=null&&u.isCollapsed))){s=u.isCollapsed||!1;for(var f=[],l=u.rangeCount||0,c=0;c0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))},i.handleMessage=function(e){var t=e;if(!(t.data.type!=="rrweb"||t.origin!==t.data.origin)){var n=e.source;if(n){var s=this.crossOriginIframeMap.get(e.source);if(s){var a=this.transformCrossOriginEvent(s,t.data.event);a&&this.wrappedEmit(a,t.data.isCheckout)}}}},i.transformCrossOriginEvent=function(e,t){var n=this,s;switch(t.type){case B.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(t.data.node,e);var a=t.data.node.id;return this.crossOriginIframeRootIdMap.set(e,a),this.patchRootIdOnNode(t.data.node,a),{timestamp:t.timestamp,type:B.IncrementalSnapshot,data:{source:_.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:t.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case B.Meta:case B.Load:case B.DomContentLoaded:return!1;case B.Plugin:return t;case B.Custom:return this.replaceIds(t.data.payload,e,["id","parentId","previousId","nextId"]),t;case B.IncrementalSnapshot:switch(t.data.source){case _.Mutation:return t.data.adds.forEach(function(u){n.replaceIds(u,e,["parentId","nextId","previousId"]),n.replaceIdOnNode(u.node,e);var f=n.crossOriginIframeRootIdMap.get(e);f&&n.patchRootIdOnNode(u.node,f)}),t.data.removes.forEach(function(u){n.replaceIds(u,e,["parentId","id"])}),t.data.attributes.forEach(function(u){n.replaceIds(u,e,["id"])}),t.data.texts.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case _.Drag:case _.TouchMove:case _.MouseMove:return t.data.positions.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case _.ViewportResize:return!1;case _.MediaInteraction:case _.MouseInteraction:case _.Scroll:case _.CanvasMutation:case _.Input:return this.replaceIds(t.data,e,["id"]),t;case _.StyleSheetRule:case _.StyleDeclaration:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleId"]),t;case _.Font:return t;case _.Selection:return t.data.ranges.forEach(function(u){n.replaceIds(u,e,["start","end"])}),t;case _.AdoptedStyleSheet:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleIds"]),(s=t.data.styles)==null||s.forEach(function(u){n.replaceStyleIds(u,e,["styleId"])}),t}}return!1},i.replace=function(e,t,n,s){for(var a=I(s),u;!(u=a()).done;){var f=u.value;!Array.isArray(t[f])&&typeof t[f]!="number"||(Array.isArray(t[f])?t[f]=e.getIds(n,t[f]):t[f]=e.getId(n,t[f]))}return t},i.replaceIds=function(e,t,n){return this.replace(this.crossOriginIframeMirror,e,t,n)},i.replaceStyleIds=function(e,t,n){return this.replace(this.crossOriginIframeStyleMirror,e,t,n)},i.replaceIdOnNode=function(e,t){var n=this;this.replaceIds(e,t,["id","rootId"]),"childNodes"in e&&e.childNodes.forEach(function(s){n.replaceIdOnNode(s,t)})},i.patchRootIdOnNode=function(e,t){var n=this;e.type!==mf.Document&&!e.rootId&&(e.rootId=t),"childNodes"in e&&e.childNodes.forEach(function(s){n.patchRootIdOnNode(s,t)})},r})(),Gm=(function(){function r(o){O(this,"shadowDoms",new WeakSet),O(this,"mutationCb"),O(this,"scrollCb"),O(this,"bypassOptions"),O(this,"mirror"),O(this,"restoreHandlers",[]),this.mutationCb=o.mutationCb,this.scrollCb=o.scrollCb,this.bypassOptions=o.bypassOptions,this.mirror=o.mirror,this.init()}var i=r.prototype;return i.init=function(){this.reset(),this.patchAttachShadow(Element,document)},i.addShadowRoot=function(e,t){var n=this;if(Kt(e)&&!this.shadowDoms.has(e)){this.shadowDoms.add(e);var s=Cf(T({},this.bypassOptions,{doc:t,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(function(){return s.disconnect()}),this.restoreHandlers.push(If(T({},this.bypassOptions,{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(function(){e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&n.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,n.mirror.getId(F.host(e))),n.restoreHandlers.push(Rf({mirror:n.mirror,stylesheetManager:n.bypassOptions.stylesheetManager},e))},0)}},i.observeAttachShadow=function(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)},i.patchAttachShadow=function(e,t){var n=this;this.restoreHandlers.push(st(e.prototype,"attachShadow",function(s){return function(a){var u=s.call(this,a),f=F.shadowRoot(this);return f&&vf(this)&&n.addShadowRoot(f,t),u}}))},i.reset=function(){this.restoreHandlers.forEach(function(e){try{e()}catch(t){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet},r})(),Nt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",jm=typeof Uint8Array=="undefined"?[]:new Uint8Array(256),Pn=0;Pn>2],n+=Nt[(o[e]&3)<<4|o[e+1]>>4],n+=Nt[(o[e+1]&15)<<2|o[e+2]>>6],n+=Nt[o[e+2]&63];return t%3===2?n=n.substring(0,n.length-1)+"=":t%3===1&&(n=n.substring(0,n.length-2)+"=="),n},Ef=new Map;function Vm(r,i){var o=Ef.get(r);return o||(o=new Map,Ef.set(r,o)),o.has(i)||o.set(i,[]),o.get(i)}var Af=function(r,i,o){if(!(!r||!($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"))){var e=r.constructor.name,t=Vm(o,e),n=t.indexOf(r);return n===-1&&(n=t.length,t.push(r)),n}};function _n(r,i,o){if(A(r,Array))return r.map(function(p){return _n(p,i,o)});if(r===null)return r;if(A(r,Float32Array)||A(r,Float64Array)||A(r,Int32Array)||A(r,Uint32Array)||A(r,Uint8Array)||A(r,Uint16Array)||A(r,Int16Array)||A(r,Int8Array)||A(r,Uint8ClampedArray)){var e=r.constructor.name;return{rr_type:e,args:[Object.values(r)]}}else if(A(r,ArrayBuffer)){var t=r.constructor.name,n=qm(r);return{rr_type:t,base64:n}}else if(A(r,DataView)){var s=r.constructor.name;return{rr_type:s,args:[_n(r.buffer,i,o),r.byteOffset,r.byteLength]}}else if(A(r,HTMLImageElement)){var a=r.constructor.name,u=r.src;return{rr_type:a,src:u}}else if(A(r,HTMLCanvasElement)){var f="HTMLImageElement",l=r.toDataURL();return{rr_type:f,src:l}}else if(A(r,ImageData)){var c=r.constructor.name;return{rr_type:c,args:[_n(r.data,i,o),r.width,r.height]}}else if($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"){var h=r.constructor.name,v=Af(r,i,o);return{rr_type:h,index:v}}return r}var Mf=function(r,i,o){return r.map(function(e){return _n(e,i,o)})},$f=function(r,i){var o=["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"],e=o.filter(function(t){return typeof i[t]=="function"});return!!e.find(function(t){return A(r,i[t])})};function Hm(r,i,o,e){for(var t=function(){var f=u.value;try{if(typeof i.CanvasRenderingContext2D.prototype[f]!="function")return"continue";var l=st(i.CanvasRenderingContext2D.prototype,f,function(h){return function(){for(var v=this,p=arguments.length,m=new Array(p),d=0;d1?u-1:0),l=1;l0&&(a.styles=u),this.adoptedStyleSheetCb(a)}},i.reset=function(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet},i.cleanupStylesheetsForRemovedNode=function(e){var t=this;try{if(e.nodeType===Node.DOCUMENT_NODE){var n=e;if(n.adoptedStyleSheets)for(var s=I(n.adoptedStyleSheets),a;!(a=s()).done;){var u=a.value;this.styleMirror.remove(u)}}if(e.nodeName==="STYLE"){var f=e;f.sheet&&this.styleMirror.remove(f.sheet)}if(e.nodeName==="LINK"&&e.rel==="stylesheet"){var l=e;l.sheet&&this.styleMirror.remove(l.sheet)}e.childNodes&&e.childNodes.forEach(function(c){t.cleanupStylesheetsForRemovedNode(c)})}catch(c){}},i.trackStylesheetInLinkElement=function(e){},r})(),eg=(function(){function r(){O(this,"nodeMap",new WeakMap),O(this,"active",!1)}var i=r.prototype;return i.inOtherBuffer=function(e,t){var n=this.nodeMap.get(e);return n&&Array.from(n).some(function(s){return s!==t})},i.add=function(e,t){var n=this;this.active||(this.active=!0,requestAnimationFrame(function(){n.nodeMap=new WeakMap,n.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(t))},i.destroy=function(){},r})();function tg(r){try{var i=new URL(r).origin;return i!=="null"?i:null}catch(o){return null}}function rg(r){if(!Array.isArray(r)||r.length===0)throw new Error("[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.");for(var i=new Set,o=0;o0&&(vt=rg(de),vt.size===0&&(vt=void 0));var mt=ie?window.parent===window:!0,gt=!1;if(!mt)try{window.parent.document&&(gt=!1)}catch(W){gt=!0}if(mt&&!i)throw new Error("emit function is required");if(!mt&&!gt)return function(){};D!==void 0&&N.mousemove===void 0&&(N.mousemove=D),Re.reset();var yt=w===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:b!==void 0?b:{password:!0},wt=S===!0||S==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:S==="all",headMetaDescKeywords:S==="all",headTitleMutations:S==="all"}:S||{};ym();var Ue,Ht=0,gc=function(W){for(var ye=I(et||[]),$;!($=ye()).done;){var J=$.value;J.eventProcessor&&(W=J.eventProcessor(W))}return x&&!gt&&(W=x(W)),W};se=function(W,ye){var $,J=W;if(J.timestamp=An(),($=$e[0])!=null&&$.isFrozen()&&J.type!==B.FullSnapshot&&!(J.type===B.IncrementalSnapshot&&J.data.source===_.Mutation)&&$e.forEach(function(ab){return ab.unfreeze()}),mt)i==null||i(gc(J),ye);else if(gt){var Ct={type:"rrweb",event:gc(J),origin:window.location.origin,isCheckout:ye};if(vt)for(var Us=I(vt),Ic;!(Ic=Us()).done;){var ib=Ic.value;window.parent.postMessage(Ct,ib)}else window.parent.postMessage(Ct,"*")}if(J.type===B.FullSnapshot)Ue=J,Ht=0;else if(J.type===B.IncrementalSnapshot){if(J.data.source===_.Mutation&&J.data.isAttachIframe)return;Ht++;var ob=e&&Ht>=e,sb=o&&J.timestamp-Ue.timestamp>o;(ob||sb)&&Tn(!0)}};for(var wi=function(W){se({type:B.IncrementalSnapshot,data:T({source:_.Mutation},W)})},yc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:_.Scroll},W)})},wc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:_.CanvasMutation},W)})},rb=function(W){return se({type:B.IncrementalSnapshot,data:T({source:_.AdoptedStyleSheet},W)})},bt=new Qm({mutationCb:wi,adoptedStyleSheetCb:rb}),ze=new Wm({mirror:Re,mutationCb:wi,stylesheetManager:bt,recordCrossOriginIframes:ie,wrappedEmit:se}),nb=I(et||[]),bc;!(bc=nb()).done;){var Sc=bc.value;Sc.getMirror&&Sc.getMirror({nodeMirror:Re,crossOriginIframeMirror:ze.crossOriginIframeMirror,crossOriginIframeStyleMirror:ze.crossOriginIframeStyleMirror})}var Fs=new eg;zo=new Xm({recordCanvas:be,mutationCb:wc,win:window,blockClass:n,blockSelector:a,mirror:Re,sampling:N.canvas,dataURLOptions:P});var bi=new Gm({mutationCb:wi,scrollCb:yc,bypassOptions:{blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskInputOptions:yt,dataURLOptions:P,maskTextFn:R,maskInputFn:C,recordCanvas:be,inlineImages:qt,sampling:N,slimDOMOptions:wt,iframeManager:ze,stylesheetManager:bt,canvasManager:zo,keepIframeSrcFn:Vt,processedNodeManager:Fs},mirror:Re});Tn=function(W){if(W===void 0&&(W=!1),!!z){se({type:B.Meta,data:{href:window.location.href,width:ff(),height:uf()}},W),bt.reset(),bi.init(),$e.forEach(function($){return $.lock()});var ye=Sh(document,{mirror:Re,blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskAllInputs:yt,maskTextFn:R,maskInputFn:C,slimDOM:wt,dataURLOptions:P,recordCanvas:be,inlineImages:qt,onSerialize:function($){hf($,Re)&&ze.addIframe($),df($,Re)&&bt.trackLinkElement($),Bo($)&&bi.addShadowRoot(F.shadowRoot($),document)},onIframeLoad:function($,J){ze.attachIframe($,J),bi.observeAttachShadow($)},onStylesheetLoad:function($,J){bt.attachLinkElement($,J)},keepIframeSrcFn:Vt});if(!ye)return console.warn("Failed to snapshot the document");se({type:B.FullSnapshot,data:{node:ye,initialOffset:af(window)}},W),$e.forEach(function($){return $.unlock()}),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&bt.adoptStyleSheets(document.adoptedStyleSheets,Re.getId(document))}};try{var St=[],Cc=function(W){var ye;return U(zm)({mutationCb:wi,mousemoveCb:function($,J){return se({type:B.IncrementalSnapshot,data:{source:J,positions:$}})},mouseInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.MouseInteraction},$)})},scrollCb:yc,viewportResizeCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.ViewportResize},$)})},inputCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.Input},$)})},mediaInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.MediaInteraction},$)})},styleSheetRuleCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.StyleSheetRule},$)})},styleDeclarationCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.StyleDeclaration},$)})},canvasMutationCb:wc,fontCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.Font},$)})},selectionCb:function($){se({type:B.IncrementalSnapshot,data:T({source:_.Selection},$)})},customElementCb:function($){se({type:B.IncrementalSnapshot,data:T({source:_.CustomElement},$)})},blockClass:n,ignoreClass:f,ignoreSelector:c,maskTextClass:v,maskTextSelector:m,maskInputOptions:yt,inlineStylesheet:g,sampling:N,recordDOM:z,recordCanvas:be,inlineImages:qt,userTriggeredOnInput:Oe,collectFonts:G,doc:W,maskInputFn:C,maskTextFn:R,keepIframeSrcFn:Vt,blockSelector:a,slimDOMOptions:wt,dataURLOptions:P,mirror:Re,iframeManager:ze,stylesheetManager:bt,shadowDomManager:bi,processedNodeManager:Fs,canvasManager:zo,ignoreCSSAttributes:yi,plugins:((ye=et==null?void 0:et.filter(function($){return $.observer}))==null?void 0:ye.map(function($){return{observer:$.observer,options:$.options,callback:function(J){return se({type:B.Plugin,data:{plugin:$.name,payload:J}})}}}))||[]},E)};ze.addLoadListener(function(W){try{var ye=W.contentDocument,$=Cc(ye);St.push($);var J=ze.getObserverCleanup(W);ze.setObserverCleanup(W,function(){if(J)try{J()}catch(Us){}try{$();var Ct=St.indexOf($);Ct!==-1&&St.splice(Ct,1),Am(ye)}catch(Us){}})}catch(Ct){console.warn(Ct)}});var Bs=function(){Tn(),St.push(Cc(document)),Nn=!0};return document.readyState==="interactive"||document.readyState==="complete"?Bs():(St.push(me("DOMContentLoaded",function(){se({type:B.DomContentLoaded,data:{}}),Ne==="DOMContentLoaded"&&Bs()})),St.push(me("load",function(){se({type:B.Load,data:{}}),Ne==="load"&&Bs()},window))),function(){St.forEach(function(W){try{W()}catch($){var ye=String($).toLowerCase();ye.includes("cross-origin")||console.warn($)}}),Fs.destroy(),Nn=!1,Em()}}catch(W){console.warn(W)}}He.addCustomEvent=function(r,i){if(!Nn)throw new Error("please add custom event after start recording");se({type:B.Custom,data:{tag:r,payload:i}})},He.freezePage=function(){$e.forEach(function(r){return r.freeze()})},He.takeFullSnapshot=function(r){if(!Nn)throw new Error("please take full snapshot after start recording");Tn(r)},He.mirror=Re;var Nf;(function(r){r[r.NotStarted=0]="NotStarted",r[r.Running=1]="Running",r[r.Stopped=2]="Stopped"})(Nf||(Nf={})),He.addCustomEvent,He.freezePage,He.takeFullSnapshot;var Lf={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Df={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Ln={},ng=function(){return!!globalThis.Zone};function Go(r){if(Ln[r])return Ln[r];var i=globalThis[r],o=i.prototype,e=r in Lf?Lf[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Df?Df[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!ng())return Ln[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Ln[r]=f:o}catch(l){return o}}var jo={};function Ye(r,i,o){var e,t=r+"."+String(o);if(jo[t])return jo[t].call(i);var n=Go(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(jo[t]=s,s.call(i)):i[o]}var qo={};function Ff(r,i,o){var e=r+"."+String(o);if(qo[e])return qo[e].bind(i);var t=Go(r),n=t[o];return typeof n!="function"?i[o]:(qo[e]=n,n.bind(i))}function ig(r){return Ye("Node",r,"childNodes")}function og(r){return Ye("Node",r,"parentNode")}function sg(r){return Ye("Node",r,"parentElement")}function ag(r){return Ye("Node",r,"textContent")}function ug(r,i){return Ff("Node",r,"contains")(i)}function fg(r){return Ff("Node",r,"getRootNode")()}function lg(r){return!r||!("host"in r)?null:Ye("ShadowRoot",r,"host")}function cg(r){return r.styleSheets}function hg(r){return!r||!("shadowRoot"in r)?null:Ye("Element",r,"shadowRoot")}function dg(r,i){return Ye("Element",r,"querySelector")(i)}function pg(r,i){return Ye("Element",r,"querySelectorAll")(i)}function vg(){return Go("MutationObserver").constructor}function mg(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var Bf={childNodes:ig,parentNode:og,parentElement:sg,textContent:ag,contains:ug,getRootNode:fg,host:lg,styleSheets:cg,shadowRoot:hg,querySelector:dg,querySelectorAll:pg,mutationObserver:vg,patch:mg};function Vo(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return Vo(Bf.parentNode(r),i);for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return Vo(Bf.parentNode(r),i)}function gg(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function yg(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Ho={exports:{}},Q=String,Uf=function(){return{isColorSupported:!1,reset:Q,bold:Q,dim:Q,italic:Q,underline:Q,inverse:Q,hidden:Q,strikethrough:Q,black:Q,red:Q,green:Q,yellow:Q,blue:Q,magenta:Q,cyan:Q,white:Q,gray:Q,bgBlack:Q,bgRed:Q,bgGreen:Q,bgYellow:Q,bgBlue:Q,bgMagenta:Q,bgCyan:Q,bgWhite:Q}};Ho.exports=Uf(),Ho.exports.createColors=Uf;var wg=Ho.exports,bg={},Sg=Object.freeze(Object.defineProperty({__proto__:null,default:bg},Symbol.toStringTag,{value:"Module"})),le=yg(Sg),zf=wg,Wf=le,Yo=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=zf.isColorSupported),Wf&&t&&(s=Wf(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=zf.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Jt(Error)),Jo=Yo;Yo.default=Yo;var Je={};Je.isClean=Symbol("isClean"),Je.my=Symbol("my");var Gf={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Cg(r){return r[0].toUpperCase()+r.slice(1)}var Zo=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),jf=Zo;Zo.default=Zo;var Ig=jf;function Ko(r,i){var o=new Ig(i);o.stringify(r)}var Dn=Ko;Ko.default=Ko;var Fn=Je.isClean,Og=Je.my,Rg=Jo,xg=jf,Eg=Dn;function Xo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Xo(s,o)}):(n==="object"&&t!==null&&(t=Xo(t)),o[e]=t)}return o}var Qo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[Fn]=!1,this[Og]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Xo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new Rg(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[Fn]){this[Fn]=!1;for(var e=this;e=e.parent;)e[Fn]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ts(e),Pg(e))return this.mapFile=e,_g(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,qf))return Vf.fromSourceMap(t).toString();if(A(t,Vf))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Tg(ts(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),Hf=rs;rs.default=rs;var Lg=le.SourceMapConsumer,Dg=le.SourceMapGenerator,Yf=le.fileURLToPath,zn=le.pathToFileURL,ns=le.isAbsolute,is=le.resolve,Fg=kg.nanoid,os=le,Jf=Jo,Bg=Hf,ss=Symbol("fromOffsetCache"),Ug=!!(Lg&&Dg),Zf=!!(is&&ns),Wn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!Zf||/^\w+:\/\//.test(e.from)||ns(e.from)?this.file=e.from:this.file=is(e.from)),Zf&&Ug){var t=new Bg(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new Jf(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new Jf(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(zn&&(a.input.url=zn(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[ss])n=this[ss];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:is(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;ns(u.source)?l=zn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||zn(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(Yf)c.file=Yf(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Gg&&Wg&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=jn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new jn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new jn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?qn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=qn(Qf(n,this.mapOpts.annotation)));var s=Xf(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new zg(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(tl){var n=tl(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;el==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),rl=jg,qg=Bn,as=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(qg),Vn=as;as.default=as;var nl=Je.isClean,il=Je.my,ol=Un,sl=Vn,Vg=Bn,al,us,fs,ul;function fl(r){return r.map(function(i){return i.nodes&&(i.nodes=fl(i.nodes)),delete i.source,i})}function ll(r){if(r[nl]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ll(e)}}var Be=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Vg);Be.registerParse=function(r){al=r},Be.registerRule=function(r){us=r},Be.registerAtRule=function(r){fs=r},Be.registerRoot=function(r){ul=r};var at=Be;Be.default=Be,Be.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,fs.prototype):r.type==="rule"?Object.setPrototypeOf(r,us.prototype):r.type==="decl"?Object.setPrototypeOf(r,ol.prototype):r.type==="comment"?Object.setPrototypeOf(r,sl.prototype):r.type==="root"&&Object.setPrototypeOf(r,ul.prototype),r[il]=!0,r.nodes&&r.nodes.forEach(function(i){Be.rebuild(i)})};var Hg=at,cl,hl,yr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new cl(new hl,this,t);return n.stringify()},i})(Hg);yr.registerLazyResult=function(r){cl=r},yr.registerProcessor=function(r){hl=r};var ls=yr;yr.default=yr;var dl={},pl=function(i){dl[i]||(dl[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},cs=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),vl=cs;cs.default=cs;var Yg=vl,hs=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Yg(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),ds=hs;hs.default=hs;var ps=39,ml=34,Hn=92,gl=47,Yn=10,wr=32,Jn=12,Zn=9,Kn=13,Jg=91,Zg=93,Kg=40,Xg=41,Qg=123,ey=125,ty=59,ry=42,ny=58,iy=64,Xn=/[\t\n\f\r "#'()/;[\\\]{}]/g,Qn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,oy=/.[\r\n"'(/\\]/,yl=/[\da-f]/i,sy=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Yn:case wr:case Zn:case Kn:case Jn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===wr||n===Yn||n===Zn||n===Kn||n===Jn);p=["space",e.slice(d,s)],d=s-1;break}case Jg:case Zg:case Qg:case ey:case ny:case ty:case Xg:{var N=String.fromCharCode(n);p=[N,N,d];break}case Kg:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==ps&&v!==ml&&v!==wr&&v!==Yn&&v!==Zn&&v!==Jn&&v!==Kn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Hn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||oy.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case ps:case ml:{a=n===ps?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Hn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case iy:{Xn.lastIndex=d+1,Xn.test(e),Xn.lastIndex===0?s=e.length-1:s=Xn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Hn:{for(s=d,f=!0;e.charCodeAt(s+1)===Hn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==gl&&n!==wr&&n!==Yn&&n!==Zn&&n!==Kn&&n!==Jn&&(s+=1,yl.test(e.charAt(s)))){for(;yl.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===wr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===gl&&e.charCodeAt(d+1)===ry?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(Qn.lastIndex=d+1,Qn.test(e),Qn.lastIndex===0?s=e.length-1:s=Qn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},wl=at,ei=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Sl(new Cl,this,t);return n.stringify()},i})(bl);Lt.registerLazyResult=function(r){Sl=r},Lt.registerProcessor=function(r){Cl=r};var br=Lt;Lt.default=Lt,bl.registerRoot(Lt);var Sr={comma:function(i){return Sr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return Sr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},Il=Sr;Sr.default=Sr;var Ol=at,ay=Il,ti=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return ay.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Ol),ms=ti;ti.default=ti,Ol.registerRule(ti);var uy=Un,fy=sy,ly=Vn,cy=vs,hy=br,Rl=ms,xl={empty:!0,space:!0};function dy(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var py=(function(){function r(o){this.input=o,this.root=new hy,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new cy;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new ly;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=fy(this.input)},i.decl=function(e,t){var n=new uy;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||dy(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Rl;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!Ay[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!My[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return _r(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!Cr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return Cr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=Sy;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new by(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(Cr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[ke];)a[ke]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Oy("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(Cr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var t=e.replace(/^\s+/,"").replace(/\(eval code/g,"("),n=t.match(/ (\((.+):(\d+):(\d+)\)$)/);t=n?t.replace(n[0],""):t;var s=t.split(/\s+/).slice(1),a=this.extractLocation(n?n[1]:s.pop()),u=s.join(" ")||void 0,f=["eval",""].indexOf(a[0])>-1?void 0:a[0];return new Bt({functionName:u,fileName:f,lineNumber:a[1],columnNumber:a[2]})},this)},parseFFOrSafari:function(i){var o=i.stack.split("\n").filter(function(e){return!e.match(cw)},this);return o.map(function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new Bt({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),s=n&&n[1]?n[1]:void 0,a=this.extractLocation(e.replace(t,""));return new Bt({functionName:s,fileName:a[0],lineNumber:a[1],columnNumber:a[2]})},this)},parseOpera:function(i){return!i.stacktrace||i.message.indexOf("\n")>-1&&i.message.split("\n").length>i.stacktrace.split("\n").length?this.parseOpera9(i):i.stack?this.parseOpera11(i):this.parseOpera10(i)},parseOpera9:function(i){for(var o=/Line (\d+).*script (?:in )?(\S+)/i,e=i.message.split("\n"),t=[],n=2,s=e.length;n/,"$2").replace(/\([^)]*\)/g,"")||void 0;return new Bt({functionName:a,fileName:n[0],lineNumber:n[1],columnNumber:n[2]})},this)}};function hw(r){if(!r||!r.outerHTML)return"";for(var i="";r.parentElement;){var o=r.localName;if(!o)break;o=o.toLowerCase();var e=r.parentElement,t=[];if(e.children&&e.children.length>0)for(var n=0;n1&&(o+=":eq("+t.indexOf(r)+")"),i=o+(i?">"+i:""),r=e}return i}function Is(r){return Object.prototype.toString.call(r)==="[object Object]"}function Fl(r,i){if(i===0)return!0;for(var o=Object.keys(r),e=I(o),t;!(t=e()).done;){var n=t.value;if(Is(r[n])&&Fl(r[n],i-1))return!0}return!1}function Ut(r,i){var o={numOfKeysLimit:50,depthOfLimit:4};Object.assign(o,i);var e=[],t=[];return JSON.stringify(r,function(a,u){if(e.length>0){var f=e.indexOf(this);~f?e.splice(f+1):e.push(this),~f?t.splice(f,1/0,a):t.push(a),~e.indexOf(u)&&(e[0]===u?u="[Circular ~]":u="[Circular ~."+t.slice(0,e.indexOf(u)).join(".")+"]")}else e.push(u);if(u===null)return u;if(u===void 0)return"undefined";if(n(u))return s(u);if((typeof u=="undefined"?"undefined":M(u))==="bigint")return u.toString()+"n";if(A(u,Event)){var l={};for(var c in u){var h=u[c];Array.isArray(h)?l[c]=hw(h.length?h[0]:null):l[c]=h}return l}else{if(A(u,Node))return A(u,HTMLElement)?u?u.outerHTML:"":u.nodeName;if(A(u,Error))return u.stack?u.stack+"\nEnd of stack for Error object":u.name+": "+u.message}return u});function n(a){return!!(Is(a)&&Object.keys(a).length>o.numOfKeysLimit||typeof a=="function"||Is(a)&&Fl(a,o.depthOfLimit))}function s(a){var u=a.toString();return o.stringLengthLimit&&u.length>o.stringLengthLimit&&(u=""+u.slice(0,o.stringLengthLimit)+"..."),u}}var Bl={level:["assert","clear","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],lengthThreshold:1e3,logger:"console"};function dw(r,i,o){var e=o?Object.assign({},Bl,o):Bl,t=e.logger;if(!t)return function(){};var n;typeof t=="string"?n=i[t]:n=t;var s=0,a=!1,u=[];if(e.level.includes("error")){var f=function(m){var d=m.message,g=m.error,w=Cs.parse(g).map(function(S){return S.toString()}),b=[Ut(d,e.stringifyOptions)];r({level:"error",trace:w,payload:b})};i.addEventListener("error",f),u.push(function(){i.removeEventListener("error",f)});var l=function(m){var d,g;A(m.reason,Error)?(d=m.reason,g=[Ut("Uncaught (in promise) "+d.name+": "+d.message,e.stringifyOptions)]):(d=new Error,g=[Ut("Uncaught (in promise)",e.stringifyOptions),Ut(m.reason,e.stringifyOptions)]);var w=Cs.parse(d).map(function(b){return b.toString()});r({level:"error",trace:w,payload:g})};i.addEventListener("unhandledrejection",l),u.push(function(){i.removeEventListener("unhandledrejection",l)})}for(var c=I(e.level),h;!(h=c()).done;){var v=h.value;u.push(p(n,v))}return function(){u.forEach(function(m){return m()})};function p(m,d){var g=this;return m[d]?fw(m,d,function(w){var b=g;return function(){for(var S=arguments.length,C=new Array(S),R=0;R0&&ii(xs,o))}catch(e){Rr.call(new ql(o),e)}}}function Rr(r){var i=this;i.triggered||(i.triggered=!0,i.def&&(i=i.def),i.msg=r,i.state=2,i.chain.length>0&&ii(xs,i))}function jl(r,i,o,e){for(var t=0;t0&&(i[e]=o)}),i},y.truncate=function(r,i){var o;return typeof r=="string"?o=r.slice(0,i):y.isArray(r)?(o=[],y.each(r,function(e){o.push(y.truncate(e,i))})):y.isObject(r)?(o={},y.each(r,function(e,t){o[t]=y.truncate(e,i)})):o=r,o},y.JSONEncode=(function(){return function(r){var i=r,o=function(t){var n=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return n.lastIndex=0,n.test(t)?'"'+t.replace(n,function(a){var u=s[a];return typeof u=="string"?u:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'},e=function(t,n){var s="",a=" ",u=0,f="",l="",c=0,h=s,v=[],p=n[t];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(t)),typeof p){case"string":return o(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(s+=a,v=[],xr.apply(p)==="[object Array]"){for(c=p.length,u=0;u="0"&&i<="9";)p+=i,n();if(i===".")for(p+=".";n()&&i>="0"&&i<="9";)p+=i;if(i==="e"||i==="E")for(p+=i,n(),(i==="-"||i==="+")&&(p+=i,n());i>="0"&&i<="9";)p+=i,n();if(v=+p,!isFinite(v))t("Bad number");else return v},a=function(){var v,p,m="",d;if(i==='"')for(;n();){if(i==='"')return n(),m;if(i==="\\")if(n(),i==="u"){for(d=0,p=0;p<4&&(v=parseInt(n(),16),!!isFinite(v));p+=1)d=d*16+v;m+=String.fromCharCode(d)}else if(typeof o[i]=="string")m+=o[i];else break;else m+=i}t("Bad string")},u=function(){for(;i&&i<=" ";)n()},f=function(){switch(i){case"t":return n("t"),n("r"),n("u"),n("e"),!0;case"f":return n("f"),n("a"),n("l"),n("s"),n("e"),!1;case"n":return n("n"),n("u"),n("l"),n("l"),null}t('Unexpected "'+i+'"')},l,c=function(){var v=[];if(i==="["){if(n("["),u(),i==="]")return n("]"),v;for(;i;){if(v.push(l()),u(),i==="]")return n("]"),v;n(","),u()}}t("Bad array")},h=function(){var v,p={};if(i==="{"){if(n("{"),u(),i==="}")return n("}"),p;for(;i;){if(v=a(),u(),n(":"),Object.hasOwnProperty.call(p,v)&&t('Duplicate key "'+v+'"'),p[v]=l(),u(),i==="}")return n("}"),p;n(","),u()}}t("Bad object")};return l=function(){switch(u(),i){case"{":return h();case"[":return c();case'"':return a();case"-":return s();default:return i>="0"&&i<="9"?s():f()}},function(v){var p;return e=v,r=0,i=" ",p=l(),u(),i&&t("Syntax error"),p}})(),y.base64Encode=function(r){var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o,e,t,n,s,a,u,f,l=0,c=0,h="",v=[];if(!r)return r;r=y.utf8Encode(r);do o=r.charCodeAt(l++),e=r.charCodeAt(l++),t=r.charCodeAt(l++),f=o<<16|e<<8|t,n=f>>18&63,s=f>>12&63,a=f>>6&63,u=f&63,v[c++]=i.charAt(n)+i.charAt(s)+i.charAt(a)+i.charAt(u);while(l127&&s<2048?a=String.fromCharCode(s>>6|192,s&63|128):a=String.fromCharCode(s>>12|224,s>>6&63|128,s&63|128),a!==null&&(e>o&&(i+=r.substring(o,e)),i+=a,o=e=n+1)}return e>o&&(i+=r.substring(o,r.length)),i},y.UUID=function(){try{return H.crypto.randomUUID()}catch(o){for(var r=new Array(36),i=0;i<36;i++)r[i]=Math.floor(Math.random()*16);return r[14]=4,r[19]=r[19]&=-5,r[19]=r[19]|=8,r[8]=r[13]=r[18]=r[23]="-",y.map(r,function(e){return e.toString(16)}).join("")}};var Xl=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];y.isBlockedUA=function(r){var i;for(r=r.toLowerCase(),i=0;i=0}function e(t){if(!Se.getElementsByTagName)return[];var n=t.split(" "),s,a,u,f,l,c,h,v,p,m,d=[Se];for(c=0;c-1){a=s.split("#"),u=a[0];var g=a[1],w=Se.getElementById(g);if(!w||u&&w.nodeName.toLowerCase()!=u)return[];d=[w];continue}if(s.indexOf(".")>-1){a=s.split("."),u=a[0];var b=a[1];for(u||(u="*"),f=[],l=0,h=0;h-1};break;default:x=function(k){return k.getAttribute(C)}}for(d=[],m=0,h=0;h=3?i[2]:""},currentUrl:function(){return H.location.href},properties:function(r){return typeof r!="object"&&(r={}),y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Ar),$referrer:Se.referrer,$referring_domain:y.info.referringDomain(Se.referrer),$device:y.info.device(ft)}),{$current_url:y.info.currentUrl(),$browser_version:y.info.browserVersion(ft,zt.vendor,Ar),$screen_height:Yl.height,$screen_width:Yl.width,mp_lib:"web",$lib_version:Si.LIB_VERSION,$insert_id:Ps(),time:y.timestamp()/1e3},y.strip_empty_properties(r))},people_properties:function(){return y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Ar)}),{$browser_version:y.info.browserVersion(ft,zt.vendor,Ar)})},mpPageViewProperties:function(){return y.strip_empty_properties({current_page_title:Se.title,current_domain:H.location.hostname,current_url_path:H.location.pathname,current_url_protocol:H.location.protocol,current_url_search:H.location.search})}};var xw=function(r,i){var o=null,e=[];return function(t){var n=this;return e.push(t),o||(o=new L(function(s){setTimeout(function(){var a=r.apply(n,[e]);o=null,e=[],s(a)},i)})),o}},Ps=function(r){var i=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return r?i.substring(0,r):i},Ew=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Aw=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,tc=function(r){var i=Aw,o=r.split("."),e=o[o.length-1];(e.length>4||e==="com"||e==="org")&&(i=Ew);var t=r.match(i);return t?t[0]:""},Mw=function(){var r=H.navigator.onLine;return y.isUndefined(r)||r},_s=function(){},rc=function(r,i){for(var o=!1,e=0;e=16.4&&t<16.6)};y.info=y.info,y.info.browser=y.info.browser,y.info.browserVersion=y.info.browserVersion,y.info.device=y.info.device,y.info.properties=y.info.properties,y.isBlockedUA=y.isBlockedUA,y.isEmptyObject=y.isEmptyObject,y.isObject=y.isObject,y.JSONDecode=y.JSONDecode,y.JSONEncode=y.JSONEncode,y.toArray=y.toArray,y.NPO=Ke;var _e=function(r,i,o,e){this.dbName=r,this.storeName=i,this.version=o.version,this.storeNamesInDb=o.storeNames,this.createIfMissing=!e||e.createIfMissing!==!1,this.dbPromise=null};_e.prototype._openDb=function(){var r=this.dbName,i=this.version,o=this.storeNamesInDb,e=this.createIfMissing,t=function(){return new L(function(n,s){var a=H.indexedDB.open(r,i);a.onerror=function(){s(a.error)},a.onsuccess=function(){n(a.result)},a.onupgradeneeded=function(u){if(!e&&u.oldVersion===0){a.transaction.abort();return}var f=u.target.result;o.forEach(function(l){f.objectStoreNames.contains(l)||f.createObjectStore(l)})}})};return e||!H.indexedDB.databases?t():H.indexedDB.databases().then(function(n){for(var s=0;sf){kw.error("Timeout waiting for mutex on "+a+"; clearing lock. ["+n+"]"),l.removeItem(v),l.removeItem(h),g();return}setTimeout(function(){try{b()}catch(S){t(S)}},u*(Math.random()+.1))},m=function(b,S){b()?S():p(function(){m(b,S)})},d=function(){var b=l.getItem(h);return b&&b!==n?!1:(l.setItem(h,n),l.getItem(h)===n?!0:(Mr(l,!0)||t(new Error("localStorage support dropped while acquiring lock")),!1))},g=function(){l.setItem(c,n),m(d,function(){if(l.getItem(c)===n){w();return}p(function(){if(l.getItem(h)!==n){g();return}m(function(){return!l.getItem(v)},w)})})},w=function(){l.setItem(v,"1");var b=function(){l.removeItem(v),l.getItem(h)===n&&l.removeItem(h),l.getItem(c)===n&&l.removeItem(c)};r().then(function(S){b(),e(S)}).catch(function(S){b(),t(S)})};try{if(Mr(l,!0))g();else throw new Error("localStorage support check failed")}catch(b){t(b)}},this))};var Wt=function(r){this.storage=r||fi()};Wt.prototype.init=function(){return this.storage?L.resolve():L.reject(new Error("localStorage is not available"))},Wt.prototype.isInitialized=function(){return!0},Wt.prototype.setItem=function(r,i){return new L(y.bind(function(o,e){try{this.storage.setItem(r,li(i))}catch(t){e(t)}o()},this))},Wt.prototype.getItem=function(r){return new L(y.bind(function(i,o){var e;try{e=ci(this.storage.getItem(r))}catch(t){o(t)}i(e)},this))},Wt.prototype.removeItem=function(r){return new L(y.bind(function(i,o){try{this.storage.removeItem(r)}catch(e){o(e)}i()},this))};var uc=lt("batch"),xe=function(r,i){i=i||{},this.storageKey=r,this.usePersistence=i.usePersistence,this.usePersistence&&(this.queueStorage=i.queueStorage||new Wt,this.lock=new ac(r,{storage:i.sharedLockStorage,timeoutMS:i.sharedLockTimeoutMS})),this.reportError=i.errorReporter||y.bind(uc.error,uc),this.consentGate=i.consentGate,this.pid=i.pid||null,this.memQueue=[],this.initialized=!1,i.enqueueThrottleMs?this.enqueuePersisted=xw(y.bind(this._enqueuePersisted,this),i.enqueueThrottleMs):this.enqueuePersisted=y.bind(function(o){return this._enqueuePersisted([o])},this)};xe.prototype.ensureInit=function(){return this.initialized||!this.usePersistence?L.resolve():this.queueStorage.init().then(y.bind(function(){this.initialized=!0},this)).catch(y.bind(function(r){this.reportError("Error initializing queue persistence. Disabling persistence",r),this.initialized=!0,this.usePersistence=!1},this))},xe.prototype.enqueue=function(r,i){var o={id:Ps(),flushAfter:new Date().getTime()+i*2,payload:r};return this._persists()?this.enqueuePersisted(o):(this.memQueue.push(o),L.resolve(!0))},xe.prototype._persists=function(){return this.usePersistence&&this.consentGate.allowsStoring()},xe.prototype._enqueuePersisted=function(r){if(!this._persists())return L.resolve(!1);var i=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(o){return this.saveToStorage(o.concat(r))},this)).then(y.bind(function(o){return o&&(this.memQueue=this.memQueue.concat(r)),o},this)).catch(y.bind(function(o){return this.reportError("Error enqueueing items",o,r),!1},this))},this);return this.lock.withLock(i,this.pid).catch(y.bind(function(o){return this.reportError("Error acquiring storage lock",o),!1},this))},xe.prototype.fillBatch=function(r){var i=this.memQueue.slice(0,r);return this.usePersistence&&i.lengthn.flushAfter&&!e[n.id]&&(n.orphaned=!0,i.push(n),i.length>=r))break}}return i},this)):L.resolve(i)};var fc=function(r,i){var o=[];return y.each(r,function(e){e.id&&!i[e.id]&&o.push(e)}),o};xe.prototype.removeItemsByID=function(r){var i={};if(y.each(r,function(e){i[e]=!0}),this.memQueue=fc(this.memQueue,i),this._persists()){var o=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){return e=fc(e,i),this.saveToStorage(e)},this)).then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){for(var t=0;t5&&(this.reportError("[dupe] item ID sent too many times, not sending",{item:c,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[p]}),v=!1):this.reportError("[dupe] found item with no ID",{item:c}),v&&s.push(h)}a[c.id]=h},this),s.length<1)return this.requestInProgress=!1,this.resetFlush(),L.resolve();var u=y.bind(function(){return this.queue.removeItemsByID(y.map(t,function(c){return c.id})).then(y.bind(function(c){return y.each(t,y.bind(function(h){var v=h.id;v?(this.itemIdsSentSuccessfully[v]=this.itemIdsSentSuccessfully[v]||0,this.itemIdsSentSuccessfully[v]++,this.itemIdsSentSuccessfully[v]>5&&this.reportError("[dupe] item ID sent too many times",{item:h,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[v]})):this.reportError("[dupe] found item with no ID while removing",{item:h})},this)),c?(this.consecutiveRemovalFailures=0,this.flushOnlyOnInterval&&!n?(this.resetFlush(),L.resolve()):this.flush()):(++this.consecutiveRemovalFailures>5?(this.reportError("Too many queue failures; disabling batching system."),this.stopAllBatching()):this.resetFlush(),L.resolve())},this))},this),f=y.bind(function(c){this.requestInProgress=!1;try{if(r.unloading)return this.queue.updatePayloads(a);if(y.isObject(c)&&c.error==="timeout"&&new Date().getTime()-o>=i)return this.reportError("Network timeout; retrying"),this.flush();if(y.isObject(c)&&(c.httpStatusCode>=500||c.httpStatusCode===429||c.httpStatusCode<=0&&!Mw()||c.error==="timeout")){var h=this.flushInterval*2;return c.retryAfter&&(h=parseInt(c.retryAfter,10)*1e3||h),h=Math.min(Pw,h),this.reportError("Error; retry in "+h+" ms"),this.scheduleFlush(h),L.resolve()}else if(y.isObject(c)&&c.httpStatusCode===413)if(t.length>1){var v=Math.max(1,Math.floor(e/2));return this.batchSize=Math.min(this.batchSize,v,t.length-1),this.reportError("413 response; reducing batch size to "+this.batchSize),this.resetFlush(),L.resolve()}else return this.reportError("Single-event request too large; dropping",t),this.resetBatchSize(),u();else return u()}catch(p){this.reportError("Error handling API response",p),this.resetFlush()}},this),l={method:"POST",verbose:!0,ignore_json_errors:!0,timeout_ms:i};return r.unloading&&(l.transport="sendBeacon"),$r.log("MIXPANEL REQUEST:",s),this.sendRequestPromise(s,l).then(f)},this)).catch(y.bind(function(t){this.reportError("Error flushing request queue",t),this.resetFlush()},this))},Ee.prototype.reportError=function(r,i){if($r.error.apply($r.error,arguments),this.errorReporter)try{i instanceof Error||(i=new Error(r)),this.errorReporter(r,i)}catch(o){$r.error(o)}};var cc=function(r){var i=Date.now();return!r||i>r.maxExpires||i>r.idleExpires},_w=250,Tw=function(r,i){if(!y.isArray(r))return r&&i.critical("record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled."),[];for(var o=[],e=0;e=0;e-=1)if(i(r[e]))return r[e]}function dc(r,i,o){if(!(i in r)||typeof r[i]!="function")return function(){};var e=r[i],t=o(e);return r[i]=t,function(){r[i]=e}}var Ls=1024*1024;function pc(r){return!r||typeof r!="string"?r:r.length>Ls?(ct.error("Body truncated from "+r.length+" to "+Ls+" characters"),r.substring(0,Ls)+"... [truncated]"):r}function Gw(r,i,o){if(!i.PerformanceObserver)return ct.error("PerformanceObserver not supported"),function(){};if(o.recordInitialRequests){var e=i.performance.getEntries().filter(function(n){return zw(n)||Ns(n)&&o.initiatorTypes.includes(n.initiatorType)});r({requests:e.map(function(n){return{url:n.name,initiatorType:n.initiatorType,status:"responseStatus"in n?n.responseStatus:void 0,startTime:Math.round(n.startTime),endTime:Math.round(n.responseEnd),timeOrigin:di(i)}}),isInitial:!0})}var t=new i.PerformanceObserver(function(n){var s=n.getEntries().filter(function(a){return Ns(a)&&o.initiatorTypes.includes(a.initiatorType)&&a.initiatorType!=="xmlhttprequest"&&a.initiatorType!=="fetch"});r({requests:s.map(function(a){return{url:a.name,initiatorType:a.initiatorType,status:"responseStatus"in a?a.responseStatus:void 0,startTime:Math.round(a.startTime),endTime:Math.round(a.responseEnd),timeOrigin:di(i)}})})});return t.observe({entryTypes:["navigation","resource"]}),function(){t.disconnect()}}function pi(r,i,o){return!i[r]||i[r].length===0?!1:i[r].includes(o.toLowerCase())}function vi(r,i,o){return!i[r]||i[r].length===0?!1:rc(o,i[r])}function vc(r){if(r==null)return null;var i;if(typeof r=="string")i=r;else if(r instanceof Document)i=r.textContent;else if(r instanceof FormData)i=y.HTTPBuildQuery(r);else if(y.isObject(r))try{i=JSON.stringify(r)}catch(o){return"Failed to stringify response object"}else return"Cannot read body of type "+typeof r;return pc(i)}function mc(r){return new Promise(function(i){var o=setTimeout(function(){i("Timeout while trying to read body")},500);try{r.clone().text().then(function(e){clearTimeout(o),i(pc(e))},function(e){clearTimeout(o),i("Failed to read body: "+String(e))})}catch(e){clearTimeout(o),i("Failed to read body: "+String(e))}})}function Ds(r,i,o,e,t,n){if(n===void 0&&(n=0),n>10)return ct.error("Cannot find performance entry"),Promise.resolve(null);var s=r.performance.getEntriesByName(o),a=Ww(s,function(u){return Ns(u)&&u.initiatorType===i&&(!e||u.startTime>=e)&&(!t||u.startTime<=t)});return a?Promise.resolve(a):new Promise(function(u){setTimeout(u,50*n)}).then(function(){return Ds(r,i,o,e,t,n+1)})}function jw(r,i,o){if(!o.initiatorTypes.includes("xmlhttprequest"))return function(){};var e=dc(i.XMLHttpRequest.prototype,"open",function(t){return function(n,s,a,u,f){a===void 0&&(a=!0);var l=this,c=new Request(s,{method:n}),h={},v,p,m={},d=l.setRequestHeader.bind(l);l.setRequestHeader=function(w,b){return pi("request",o.recordHeaders,w)&&(m[w]=b),d(w,b)},h.requestHeaders=m;var g=l.send.bind(l);l.send=function(w){return vi("request",o.recordBodyUrls,c.url)&&(h.requestBody=vc(w)),v=i.performance.now(),g(w)},l.addEventListener("readystatechange",function(){if(l.readyState===l.DONE){p=i.performance.now();var w={},b=l.getAllResponseHeaders();if(b){var S=b.trim().split(/[\r\n]+/);S.forEach(function(C){if(C){var R=C.indexOf(": ");if(R!==-1){var E=C.substring(0,R),x=C.substring(R+2);E&&pi("response",o.recordHeaders,E)&&(w[E]=x)}}})}h.responseHeaders=w,vi("response",o.recordBodyUrls,c.url)&&(h.responseBody=vc(l.response)),Ds(i,"xmlhttprequest",c.url,v,p).then(function(C){if(!C){ct.error("Failed to get performance entry for XHR request to "+c.url);return}var R={url:C.name,method:c.method,initiatorType:C.initiatorType,status:l.status,startTime:Math.round(C.startTime),endTime:Math.round(C.responseEnd),timeOrigin:di(i),requestHeaders:h.requestHeaders,requestBody:h.requestBody,responseHeaders:h.responseHeaders,responseBody:h.responseBody};r({requests:[R]})}).catch(function(C){ct.error("Error recording XHR request to "+c.url+": "+String(C))})}}),t.call(l,n,s,a,u,f)}});return function(){e()}}function qw(r,i){if(typeof Request!="undefined"&&r instanceof Request){var o=r.clone();return i?new Request(o,i):o}return new Request(r,i)}function Vw(r,i,o){if(!o.initiatorTypes.includes("fetch"))return function(){};var e=dc(i,"fetch",function(t){return function(){var n=qw(arguments[0],arguments[1]),s,a={},u,f,l,c=Promise.resolve(void 0),h,v=new Promise(function(m){h=m});try{var p={};n.headers.forEach(function(m,d){pi("request",o.recordHeaders,d)&&(p[d]=m)}),a.requestHeaders=p,vi("request",o.recordBodyUrls,n.url)&&(c=mc(n).then(function(m){a.requestBody=m})),u=i.performance.now(),l=t.apply(i,arguments).then(function(m){s=m,f=i.performance.now();var d={};return s.headers.forEach(function(g,w){pi("response",o.recordHeaders,w)&&(d[w]=g)}),a.responseHeaders=d,vi("response",o.recordBodyUrls,n.url)?mc(s).then(function(g){a.responseBody=g,h()}):h(),s})}catch(m){l=Promise.reject(m)}return Promise.all([c,v,l]).then(function(){return Ds(i,"fetch",n.url,u,f)}).then(function(m){if(!m){ct.error("Failed to get performance entry for fetch request to "+n.url);return}var d={url:m.name,method:n.method,initiatorType:m.initiatorType,status:s?s.status:void 0,startTime:Math.round(m.startTime),endTime:Math.round(m.responseEnd),timeOrigin:di(i),requestHeaders:a.requestHeaders,requestBody:a.requestBody,responseHeaders:a.responseHeaders,responseBody:a.responseBody};r({requests:[d]})}).catch(function(m){ct.error("Error recording fetch request to "+n.url+": "+String(m))}),l}});return function(){e()}}function Hw(r,i,o){if(!("performance"in i))return function(){};var e=Object.assign({},Ts.recordHeaders,o.recordHeaders||{}),t=Object.assign({},Ts.recordBodyUrls,o.recordBodyUrls||{});o=Object.assign({},o,{recordHeaders:e,recordBodyUrls:t});var n=Object.assign({},Ts,o),s=function(l){var c=l.requests.filter(function(h){var v=rc(h.url,n.ignoreRequestUrls||[]);return!v&&!n.ignoreRequestFn(h)});(c.length>0||l.isInitial)&&r(Object.assign({},l,{requests:c}))},a=Gw(s,i,n),u=jw(s,i,n),f=Vw(s,i,n);return function(){a(),u(),f()}}var Yw="rrweb/network@1.mp",Jw=function(r){return{name:Yw,observer:Hw,options:r}},ht=lt("recorder"),Zw=H.CompressionStream,Kw={batch_size:1e3,batch_flush_interval_ms:10*1e3,batch_request_timeout_ms:90*1e3,batch_autostart:!0},Xw=new Set([_.MouseMove,_.MouseInteraction,_.Scroll,_.ViewportResize,_.Input,_.TouchMove,_.MediaInteraction,_.Drag,_.Selection]);function Qw(r){return r.type===B.IncrementalSnapshot&&Xw.has(r.data.source)}var ce=function(r){this._mixpanel=r.mixpanelInstance,this.consentGate=r.consentGate,this._onIdleTimeout=r.onIdleTimeout||_s,this._onMaxLengthReached=r.onMaxLengthReached||_s,this._onBatchSent=r.onBatchSent||_s,this._rrwebRecord=r.rrwebRecord||null,this._stopRecording=null,this.replayId=r.replayId,this.batchStartUrl=r.batchStartUrl||null,this.replayStartUrl=r.replayStartUrl||null,this.idleExpires=r.idleExpires||null,this.maxExpires=r.maxExpires||null,this.replayStartTime=r.replayStartTime||null,this.lastEventTimestamp=r.lastEventTimestamp||null,this.seqNo=r.seqNo||0,this.idleTimeoutId=null,this.maxTimeoutId=null,this.recordMaxMs=oi,this.recordMinMs=0,this._recordMinMsCheckStart=null;var i=Mr(r.sharedLockStorage||fi(),!0)&&this.consentGate.allowsPersistence();this.batcherKey="__mprec_"+this.getConfig("name")+"_"+this.getConfig("token")+"_"+this.replayId,this.queueStorage=new _e(nc,ic,sc),this.batcher=new Ee(this.batcherKey,{errorReporter:this.reportError.bind(this),flushOnlyOnInterval:!0,libConfig:Kw,sendRequestFunc:this.flushEventsWithOptOut.bind(this),queueStorage:this.queueStorage,sharedLockStorage:r.sharedLockStorage,usePersistence:i,stopAllBatchingFunc:this.stopRecording.bind(this),consentGate:this.consentGate,enqueueThrottleMs:_w,sharedLockTimeoutMS:10*1e3})};ce.prototype.getUserIdInfo=function(){if(this.finalFlushUserIdInfo)return this.finalFlushUserIdInfo;var r={distinct_id:String(this._mixpanel.get_distinct_id())},i=this._mixpanel.get_property("$device_id");i&&(r.$device_id=i);var o=this._mixpanel.get_property("$user_id");return o&&(r.$user_id=o),r},ce.prototype.unloadPersistedData=function(){return this.batcher.stop(),this.queueStorage.init().catch(function(){this.reportError("Error initializing IndexedDB storage for unloading persisted data.")}.bind(this)).then(function(){return this.getDurationMs()oi&&(this.recordMaxMs=oi,ht.critical("record_max_ms cannot be greater than "+oi+"ms. Capping value.")),this.maxExpires||(this.maxExpires=new Date().getTime()+this.recordMaxMs),this.recordMinMs=this._getRecordMinMs(),this.replayStartTime||(this.replayStartTime=new Date().getTime(),this.batchStartUrl=y.info.currentUrl(),this.replayStartUrl=y.info.currentUrl()),r||this.recordMinMs>0?(this.batcher.stop(),this._recordMinMsCheckStart=null):this.batcher.start();var i=function(){clearTimeout(this.idleTimeoutId);var f=this.getConfig("record_idle_timeout_ms");this.idleTimeoutId=setTimeout(this._onIdleTimeout,f),this.idleExpires=new Date().getTime()+f}.bind(this);i();var o=this.getConfig("record_block_selector");(o===""||o===null)&&(o=void 0);var e=Fw(this._mixpanel),t=[];if(this.getConfig("record_network")){var n=this.getConfig("record_network_options")||{},s=(n.ignoreRequestUrls||[]).slice();s.push(this._getApiRoute()),n.ignoreRequestUrls=s,t.push(Jw(n))}this.getConfig("record_console")&&t.push(vw({stringifyOptions:{stringLengthLimit:1e3,numOfKeysLimit:50,depthOfLimit:2}}));var a=Tw(this.getConfig("record_allowed_iframe_origins"),ht);try{this._stopRecording=this._rrwebRecord({emit:function(f){if(this.idleExpires&&this.idleExpires=this.recordMinMs&&this.batcher.start(),i()),this.__enqueuePromise=this.batcher.enqueue(f),(this.lastEventTimestamp===null||f.timestamp>this.lastEventTimestamp)&&(this.lastEventTimestamp=f.timestamp)}.bind(this),blockClass:this.getConfig("record_block_class"),blockSelector:o,collectFonts:this.getConfig("record_collect_fonts"),dataURLOptions:{type:"image/webp",quality:.6},maskAllInputs:!0,maskTextSelector:"*",maskInputFn:this._getMaskFn(Bw,e),maskTextFn:this._getMaskFn(Uw,e),recordCrossOriginIframes:a.length>0,allowedIframeOrigins:a,recordCanvas:this.getConfig("record_canvas"),sampling:{canvas:15},plugins:t})}catch(f){this.reportError("Unexpected error when starting rrweb recording.",f)}if(typeof this._stopRecording!="function"){this.reportError("rrweb failed to start, skipping this recording."),this._stopRecording=null,this.stopRecording();return}var u=this.maxExpires-new Date().getTime();this.maxTimeoutId=setTimeout(this._onMaxLengthReached.bind(this),u)},ce.prototype.stopRecording=function(r){if(this.finalFlushUserIdInfo=this.getUserIdInfo(),!this.isRrwebStopped()){try{this._stopRecording()}catch(o){this.reportError("Error with rrweb stopRecording",o)}this._stopRecording=null}var i;return this.batcher.stopped?i=this.batcher.clear():r||(i=this.batcher.flush()),this.batcher.stop(),clearTimeout(this.idleTimeoutId),clearTimeout(this.maxTimeoutId),i},ce.prototype.isRrwebStopped=function(){return this._stopRecording===null},ce.prototype.flushEventsWithOptOut=function(r,i,o){if(!this.consentGate.allowsApiCalls()){this.stopRecording(),o({error:"Tracking has been opted out, stopping recording."});return}this._flushEvents(r,i,o)},ce.prototype.serialize=function(){var r;try{r=this._mixpanel.get_tab_id()}catch(i){this.reportError("Error getting tab ID for serialization ",i),r=null}return{replayId:this.replayId,seqNo:this.seqNo,replayStartTime:this.replayStartTime,batchStartUrl:this.batchStartUrl,replayStartUrl:this.replayStartUrl,lastEventTimestamp:this.lastEventTimestamp,idleExpires:this.idleExpires,maxExpires:this.maxExpires,tabId:r}},ce.deserialize=function(r,i){var o=new ce(y.extend({},i,{replayId:r.replayId,batchStartUrl:r.batchStartUrl,replayStartUrl:r.replayStartUrl,idleExpires:r.idleExpires,maxExpires:r.maxExpires,replayStartTime:r.replayStartTime,lastEventTimestamp:r.lastEventTimestamp,seqNo:r.seqNo,sharedLockStorage:i.sharedLockStorage}));return o},ce.prototype._getApiRoute=function(){return this.getConfig("api_routes").record},ce.prototype._sendRequest=function(r,i,o,e){if(!this.consentGate.allowsApiCalls()){e(0);return}var t=function(s,a){s.status===200&&this.replayId===r&&(this.seqNo++,this.batchStartUrl=y.info.currentUrl()),this._onBatchSent(),e({status:0,httpStatusCode:s.status,responseBody:a,retryAfter:s.headers.get("Retry-After")})}.bind(this),n=this._mixpanel.get_api_host&&this._mixpanel.get_api_host("record")||this.getConfig("api_host");H.fetch(n+"/"+this._getApiRoute()+"?"+new URLSearchParams(i),{method:"POST",headers:{Authorization:"Basic "+btoa(this.getConfig("token")+":"),"Content-Type":"application/octet-stream"},body:o}).then(function(s){s.json().then(function(a){t(s,a)}).catch(function(a){e({error:a})})}).catch(function(s){e({error:s,httpStatusCode:0})})},ce.prototype._flushEvents=function(r,i,o){var e=r.length;if(e>0){for(var t=this.replayId,n=1/0,s=-1/0,a=!1,u=0;uEs?(ht.critical("record_min_ms cannot be greater than "+Es+"ms. Capping value."),Es):r},ce.prototype._getMaskFn=function(r,i){return function(o,e){if(!o.trim().length)return o;var t=!0;try{t=r(e,i)}catch(s){this.reportError("Error checking if text should be masked, defaulting to masked",s)}if(t){var n=Math.min(o.length,1e4);return"*".repeat(n)}else return o}.bind(this)};var Xe=function(r){this.idb=new _e(nc,oc,sc),this.errorReporter=r.errorReporter,this.mixpanelInstance=r.mixpanelInstance,this.consentGate=r.consentGate,this.sharedLockStorage=r.sharedLockStorage};Xe.prototype.isPersistenceEnabled=function(){return this.consentGate.allowsPersistence()},Xe.prototype.handleError=function(r){this.errorReporter("IndexedDB error: ",r)},Xe.prototype.setActiveRecording=function(r){if(!this.isPersistenceEnabled())return L.resolve();var i=r.tabId;return i?this.idb.init().then(function(){return this.idb.setItem(i,r)}.bind(this)).catch(this.handleError.bind(this)):(console.warn("No tab ID is set, cannot persist recording metadata."),L.resolve())},Xe.prototype.getActiveRecording=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getItem(this.mixpanelInstance.get_tab_id())}.bind(this)).then(function(r){return cc(r)?null:r}.bind(this)).catch(this.handleError.bind(this)):L.resolve(null)},Xe.prototype.clearActiveRecording=function(){return this.markActiveRecordingExpired()},Xe.prototype.markActiveRecordingExpired=function(){return this.getActiveRecording().then(function(r){if(r)return r.maxExpires=0,this.setActiveRecording(r)}.bind(this)).catch(this.handleError.bind(this))},Xe.prototype.flushInactiveRecordings=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getAll()}.bind(this)).then(function(r){var i=r.filter(function(o){return cc(o)}).map(function(o){var e=ce.deserialize(o,{mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,sharedLockStorage:this.sharedLockStorage});return e.unloadPersistedData().then(function(){return this.idb.removeItem(o.tabId)}.bind(this)).catch(this.handleError.bind(this))}.bind(this));return L.all(i)}.bind(this)).catch(this.handleError.bind(this)):L.resolve([])};function eb(r,i){var o={allowsApiCalls:function(){try{return r("api_calls")}catch(e){return Pe.error("Unexpected error when checking tracking opt-out status: "+e),!0}},allowsSending:function(){return r("send")},allowsFetching:function(){return r("fetch")},allowsStoring:function(){return r("store")},allowsPersistence:function(){return o.allowsStoring()&&!i("disable_persistence")}};return o}function tb(r){return eb(function(i){var o=r._consent_allows;return typeof o=="function"?!!o.call(r,i):i!=="api_calls"||!r.has_opted_out_tracking()},function(i){return r.get_config(i)})}var kr=lt("recorder"),Te=function(r,i,o){this.mixpanelInstance=r,this.rrwebRecord=i||He,this.sharedLockStorage=o,this.consentGate=tb(r),this.recordingRegistry=new Xe({mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,errorReporter:kr.error,sharedLockStorage:o}),this._flushInactivePromise=this.recordingRegistry.flushInactiveRecordings(),this.activeRecording=null,this.stopRecordingInProgress=!1};Te.prototype.startRecording=function(r){if(r=r||{},this.activeRecording&&!this.activeRecording.isRrwebStopped()){kr.log("Recording already in progress, skipping startRecording.");return}var i=function(){kr.log("Idle timeout reached, restarting recording."),this.resetRecording()}.bind(this),o=function(){kr.log("Max recording length reached, stopping recording."),this.resetRecording()}.bind(this),e=function(){this.recordingRegistry.setActiveRecording(this.activeRecording.serialize()),this.__flushPromise=this.activeRecording.batcher._flushPromise}.bind(this),t={mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,onBatchSent:e,onIdleTimeout:i,onMaxLengthReached:o,replayId:y.UUID(),rrwebRecord:this.rrwebRecord,sharedLockStorage:this.sharedLockStorage};return r.activeSerializedRecording?this.activeRecording=ce.deserialize(r.activeSerializedRecording,t):this.activeRecording=new ce(t),this.activeRecording.startRecording(r.shouldStopBatcher),this.recordingRegistry.setActiveRecording(this.activeRecording.serialize())},Te.prototype.stopRecording=function(){return this.stopRecordingInProgress=!0,this._stopCurrentRecording(!1,!0).then(function(){return this.recordingRegistry.clearActiveRecording()}.bind(this)).then(function(){this.stopRecordingInProgress=!1}.bind(this))},Te.prototype.pauseRecording=function(){return this._stopCurrentRecording(!1)},Te.prototype._stopCurrentRecording=function(r,i){if(this.activeRecording){var o=this.activeRecording.stopRecording(r);return i&&(this.activeRecording=null),o}return L.resolve()},Te.prototype.resumeRecording=function(r){return this.activeRecording&&this.activeRecording.isRrwebStopped()?(this.activeRecording.startRecording(!1),L.resolve(null)):this.recordingRegistry.getActiveRecording().then(function(i){return i&&!this.stopRecordingInProgress?this.startRecording({activeSerializedRecording:i}):r?this.startRecording({shouldStopBatcher:!1}):(kr.log("No resumable recording found."),null)}.bind(this))},Te.prototype.resetRecording=function(){this.stopRecording(),this.startRecording({shouldStopBatcher:!0})},Te.prototype.isRecording=function(){return this.activeRecording&&!this.activeRecording.isRrwebStopped()},Te.prototype.getActiveReplayId=function(){return this.isRecording()?this.activeRecording.replayId:null},Object.defineProperty(Te.prototype,"replayId",{get:function(){return this.getActiveReplayId()}}),H[Oc]=Te})(); +//# sourceMappingURL=mixpanel-recorder-ud-sZFul.min.js.map diff --git a/dist/async-modules/mixpanel-recorder-ud-sZFul.min.js.map b/dist/async-modules/mixpanel-recorder-ud-sZFul.min.js.map new file mode 100644 index 00000000..37f4cd6c --- /dev/null +++ b/dist/async-modules/mixpanel-recorder-ud-sZFul.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mixpanel-recorder-ud-sZFul.min.js","sources":["../../src/window.js","../../src/config.js","../rrweb-compiled.js","../../src/promise-polyfill.js","../../src/utils.js","../../src/storage/indexed-db.js","../../src/recorder/idb-config.js","../../src/shared-lock.js","../../src/storage/local-storage.js","../../src/request-queue.js","../../src/request-batcher.js","../../src/recorder/utils.js","../../src/autocapture/utils.js","../../src/recorder/masking.js","../../src/recorder/rrweb-network-plugin.js","../../src/recorder/session-recording.js","../../src/recorder/recording-registry.js","../../src/consent-gate.js","../../src/recorder/recorder.js","../../src/recorder/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.85.0-rc1'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function construct(Parent, args, Class) {\n var a = [\n null\n ];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _set_prototype_of(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n return Constructor;\n}\nfunction _extends() {\n _extends = Object.assign || function(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i];\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _get_prototype_of(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _set_prototype_of(o, p);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function wrapNativeSuper(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _set_prototype_of(Wrapper, Class);\n };\n return _wrap_native_super(Class);\n}\nfunction _is_native_reflect_construct() {\n try {\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike) {\n if (it) o = it;\n var i = 0;\n return function() {\n if (i >= o.length) {\n return {\n done: true\n };\n }\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction _ts_values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = function(obj, key, value) {\n return key in obj ? __defProp$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1 = function(obj, key, value) {\n return __defNormalProp$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar _a;\nvar __defProp$1$1 = Object.defineProperty;\nvar __defNormalProp$1$1 = function(obj, key, value) {\n return key in obj ? __defProp$1$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1$1 = function(obj, key, value) {\n return __defNormalProp$1$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar NodeType$3 = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType$3 || {});\nvar testableAccessors$1 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$1 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$1 = {};\nvar isAngularZonePresent$1 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key]) return untaintedBasePrototype$1[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$1()) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$1[cacheKey]) return untaintedAccessorCache$1[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$1[cacheKey]) return untaintedMethodCache$1[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nfunction patch$1$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1,\n patch: patch$1$1\n};\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n var hostEl = // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null;\n return Boolean(hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2);\n}\nfunction isNativeShadowDom(shadowRoot2) {\n return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(/\\sbackground-clip:\\s*text;/g, \" -webkit-background-clip: text; background-clip: text;\");\n }\n return cssText;\n}\nfunction escapeImportStatement(rule2) {\n var cssText = rule2.cssText;\n if (cssText.split('\"').length < 3) return cssText;\n var statement = [\n \"@import\",\n \"url(\" + JSON.stringify(rule2.href) + \")\"\n ];\n if (rule2.layerName === \"\") {\n statement.push(\"layer\");\n } else if (rule2.layerName) {\n statement.push(\"layer(\" + rule2.layerName + \")\");\n }\n if (rule2.supportsText) {\n statement.push(\"supports(\" + rule2.supportsText + \")\");\n }\n if (rule2.media.length) {\n statement.push(rule2.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n var rules2 = s2.rules || s2.cssRules;\n if (!rules2) {\n return null;\n }\n var sheetHref = s2.href;\n if (!sheetHref && s2.ownerNode && s2.ownerNode.ownerDocument) {\n sheetHref = s2.ownerNode.ownerDocument.location.href;\n }\n var stringifiedRules = Array.from(rules2, function(rule2) {\n return stringifyRule(rule2, sheetHref);\n }).join(\"\");\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule2, sheetHref) {\n if (isCSSImportRule(rule2)) {\n var importStringified;\n try {\n importStringified = // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule2);\n } catch (error) {\n importStringified = rule2.cssText;\n }\n if (rule2.styleSheet.href) {\n return absolutifyURLs(importStringified, rule2.styleSheet.href);\n }\n return importStringified;\n } else {\n var ruleStringified = rule2.cssText;\n if (isCSSStyleRule(rule2) && rule2.selectorText.includes(\":\")) {\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\nfunction fixSafariColons(cssStringified) {\n var regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule2) {\n return \"styleSheet\" in rule2;\n}\nfunction isCSSStyleRule(rule2) {\n return \"selectorText\" in rule2;\n}\nvar Mirror = /*#__PURE__*/ function() {\n function Mirror() {\n __publicField$1$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n var _proto = Mirror.prototype;\n _proto.getId = function getId(n2) {\n var _a2;\n if (!n2) return -1;\n var id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id != null ? id : -1;\n };\n _proto.getNode = function getNode(id) {\n return this.idNodeMap.get(id) || null;\n };\n _proto.getIds = function getIds() {\n return Array.from(this.idNodeMap.keys());\n };\n _proto.getMeta = function getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n };\n // removes the node from idNodeMap\n // if permanent is true, also removes from nodeMetaMap\n _proto.removeNodeFromMap = function removeNodeFromMap(n2, permanent) {\n var _this = this;\n if (permanent === void 0) permanent = false;\n var id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (permanent) this.nodeMetaMap.delete(n2);\n if (n2.childNodes) {\n n2.childNodes.forEach(function(childNode) {\n return _this.removeNodeFromMap(childNode, permanent);\n });\n }\n };\n _proto.has = function has(id) {\n return this.idNodeMap.has(id);\n };\n _proto.hasNode = function hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n };\n _proto.add = function add(n2, meta) {\n var id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n };\n _proto.replace = function replace(id, n2) {\n var oldNode = this.getNode(id);\n if (oldNode) {\n var meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n };\n _proto.reset = function reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n };\n return Mirror;\n}();\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue(param) {\n var element = param.element, maskInputOptions = param.maskInputOptions, tagName = param.tagName, type = param.type, value = param.value, maskInputFn = param.maskInputFn;\n var text = value || \"\";\n var actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nvar ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n var ctx = canvas.getContext(\"2d\");\n if (!ctx) return true;\n var chunkSize = 50;\n for(var x2 = 0; x2 < canvas.width; x2 += chunkSize){\n for(var y = 0; y < canvas.height; y += chunkSize){\n var getImageData = ctx.getImageData;\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n var pixelBuffer = new Uint32Array(// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(ctx, x2, y, Math.min(chunkSize, canvas.width - x2), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some(function(pixel) {\n return pixel !== 0;\n })) return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n var type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n var url;\n try {\n url = new URL(path, baseURL != null ? baseURL : window.location.href);\n } catch (err) {\n return null;\n }\n var regex = /\\.([0-9a-z]+)(?:$)/i;\n var match = url.pathname.match(regex);\n var _ref;\n return (_ref = match == null ? void 0 : match[1]) != null ? _ref : null;\n}\nfunction extractOrigin(url) {\n var origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nvar URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nvar URL_WWW_MATCH = /^www\\..*/i;\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n return (cssText || \"\").replace(URL_IN_CSS_REF, function(origin, quote1, path1, quote2, path2, path3) {\n var filePath = path1 || path2 || path3;\n var maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (DATA_URI.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (filePath[0] === \"/\") {\n return \"url(\" + maybeQuote + (extractOrigin(href) + filePath) + maybeQuote + \")\";\n }\n var stack = href.split(\"/\");\n var parts = filePath.split(\"/\");\n stack.pop();\n for(var _iterator = _create_for_of_iterator_helper_loose(parts), _step; !(_step = _iterator()).done;){\n var part = _step.value;\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return \"url(\" + maybeQuote + stack.join(\"/\") + maybeQuote + \")\";\n });\n}\nfunction normalizeCssString(cssText, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n if (_testNoPxNorm) {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\");\n } else {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\").replace(/0px/g, \"0\");\n }\n}\nfunction splitCssText(cssText, style, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n var childNodes2 = Array.from(style.childNodes);\n var splits = [];\n var iterCount = 0;\n if (childNodes2.length > 1 && cssText && typeof cssText === \"string\") {\n var cssTextNorm = normalizeCssString(cssText, _testNoPxNorm);\n var normFactor = cssTextNorm.length / cssText.length;\n for(var i2 = 1; i2 < childNodes2.length; i2++){\n if (childNodes2[i2].textContent && typeof childNodes2[i2].textContent === \"string\") {\n var textContentNorm = normalizeCssString(childNodes2[i2].textContent, _testNoPxNorm);\n var jLimit = 100;\n var j = 3;\n for(; j < textContentNorm.length; j++){\n if (// keep consuming css identifiers (to get a decent chunk more quickly)\n textContentNorm[j].match(/[a-zA-Z0-9]/) || // substring needs to be unique to this section\n textContentNorm.indexOf(textContentNorm.substring(0, j), 1) !== -1) {\n continue;\n }\n break;\n }\n for(; j < textContentNorm.length; j++){\n var startSubstring = textContentNorm.substring(0, j);\n var cssNormSplits = cssTextNorm.split(startSubstring);\n var splitNorm = -1;\n if (cssNormSplits.length === 2) {\n splitNorm = cssNormSplits[0].length;\n } else if (cssNormSplits.length > 2 && cssNormSplits[0] === \"\" && childNodes2[i2 - 1].textContent !== \"\") {\n splitNorm = cssTextNorm.indexOf(startSubstring, 1);\n } else if (cssNormSplits.length === 1) {\n startSubstring = startSubstring.substring(0, startSubstring.length - 1);\n cssNormSplits = cssTextNorm.split(startSubstring);\n if (cssNormSplits.length <= 1) {\n splits.push(cssText);\n return splits;\n }\n j = jLimit + 1;\n } else if (j === textContentNorm.length - 1) {\n splitNorm = cssTextNorm.indexOf(startSubstring);\n }\n if (cssNormSplits.length >= 2 && j > jLimit) {\n var prevTextContent = childNodes2[i2 - 1].textContent;\n if (prevTextContent && typeof prevTextContent === \"string\") {\n var prevMinLength = normalizeCssString(prevTextContent).length;\n splitNorm = cssTextNorm.indexOf(startSubstring, prevMinLength);\n }\n if (splitNorm === -1) {\n splitNorm = cssNormSplits[0].length;\n }\n }\n if (splitNorm !== -1) {\n var k = Math.floor(splitNorm / normFactor);\n for(; k > 0 && k < cssText.length;){\n iterCount += 1;\n if (iterCount > 50 * childNodes2.length) {\n splits.push(cssText);\n return splits;\n }\n var normPart = normalizeCssString(cssText.substring(0, k), _testNoPxNorm);\n if (normPart.length === splitNorm) {\n splits.push(cssText.substring(0, k));\n cssText = cssText.substring(k);\n cssTextNorm = cssTextNorm.substring(splitNorm);\n break;\n } else if (normPart.length < splitNorm) {\n k += Math.max(1, Math.floor((splitNorm - normPart.length) / normFactor));\n } else {\n k -= Math.max(1, Math.floor((normPart.length - splitNorm) * normFactor));\n }\n }\n break;\n }\n }\n }\n }\n }\n splits.push(cssText);\n return splits;\n}\nfunction markCssSplits(cssText, style) {\n return splitCssText(cssText, style).join(\"/* rr_split */\");\n}\nvar _id = 1;\nvar tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nvar IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (_instanceof(element, HTMLFormElement)) {\n return \"form\";\n }\n var processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nvar canvasService;\nvar canvasCtx;\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n var pos = 0;\n function collectCharacters(regEx) {\n var chars2;\n var match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n var output = [];\n while(true){\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n var url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n var descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n var inParens = false;\n while(true){\n var c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nvar cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n var a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absolutifyURLs(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for(var eIndex = element.classList.length; eIndex--;){\n var className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {}\n return false;\n}\nfunction classMatchesRegex$1(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction needMaskingText(node2, maskTextClass, maskTextSelector, checkAncestors) {\n var el;\n if (isElement(node2)) {\n el = node2;\n if (!index$1.childNodes(el).length) {\n return false;\n }\n } else if (index$1.parentElement(node2) === null) {\n return false;\n } else {\n el = index$1.parentElement(node2);\n }\n try {\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(\".\" + maskTextClass)) return true;\n } else {\n if (el.classList.contains(maskTextClass)) return true;\n }\n } else {\n if (classMatchesRegex$1(el, maskTextClass, checkAncestors)) return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector)) return true;\n } else {\n if (el.matches(maskTextSelector)) return true;\n }\n }\n } catch (e2) {}\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n var win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n var fired = false;\n var readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n var blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n var fired = false;\n var styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded) return;\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, needsMask = options.needsMask, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var rootId = getRootId(doc, mirror2);\n switch(n2.nodeType){\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n compatMode: n2.compatMode\n };\n } else {\n return {\n type: NodeType$3.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$3.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId: rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc: doc,\n blockClass: blockClass,\n blockSelector: blockSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n rootId: rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc: doc,\n needsMask: needsMask,\n maskTextFn: maskTextFn,\n rootId: rootId,\n cssCaptured: cssCaptured\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$3.CDATA,\n textContent: \"\",\n rootId: rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$3.Comment,\n textContent: index$1.textContent(n2) || \"\",\n rootId: rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc)) return void 0;\n var docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n var needsMask = options.needsMask, maskTextFn = options.maskTextFn, rootId = options.rootId, cssCaptured = options.cssCaptured;\n var parent = index$1.parentNode(n2);\n var parentTagName = parent && parent.tagName;\n var textContent2 = \"\";\n var isStyle = parentTagName === \"STYLE\" ? true : void 0;\n var isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isScript) {\n textContent2 = \"SCRIPT_PLACEHOLDER\";\n } else if (!cssCaptured) {\n textContent2 = index$1.textContent(n2);\n if (isStyle && textContent2) {\n textContent2 = absolutifyURLs(textContent2, getHref(options.doc));\n }\n }\n if (!isStyle && !isScript && textContent2 && needsMask) {\n textContent2 = maskTextFn ? maskTextFn(textContent2, index$1.parentElement(n2)) : textContent2.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$3.Text,\n textContent: textContent2 || \"\",\n rootId: rootId\n };\n}\nfunction serializeElementNode(n2, options) {\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, rootId = options.rootId;\n var needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n var tagName = getValidTagName$1(n2);\n var attributes = {};\n var len = n2.attributes.length;\n for(var i2 = 0; i2 < len; i2++){\n var attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value);\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n var stylesheet = Array.from(doc.styleSheets).find(function(s2) {\n return s2.href === n2.href;\n });\n var cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"style\" && n2.sheet) {\n var cssText1 = stringifyStylesheet(n2.sheet);\n if (cssText1) {\n if (n2.childNodes.length > 1) {\n cssText1 = markCssSplits(cssText1, n2);\n }\n attributes._cssText = cssText1;\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n var value = n2.value;\n var checked = n2.checked;\n if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n attributes.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: value,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n } else if (checked) {\n attributes.checked = checked;\n }\n }\n if ((tagName === \"input\" || tagName === \"textarea\") && attributes.placeholder) {\n attributes.placeholder = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: attributes.placeholder,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes.selected = true;\n } else {\n delete attributes.selected;\n }\n }\n if (tagName === \"dialog\" && n2.open) {\n attributes.rr_open_mode = n2.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes.rr_dataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n } else if (!(\"__context\" in n2)) {\n var canvasDataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n var blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n var image = n2;\n var imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"\";\n var priorCrossOrigin = image.crossOrigin;\n var recordInlineImage = function() {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\"Cannot inline img src=\" + imageSrc + \"! Error: \" + err);\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n var mediaAttributes = attributes;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n var _n2_getBoundingClientRect = n2.getBoundingClientRect(), width = _n2_getBoundingClientRect.width, height = _n2_getBoundingClientRect.height;\n attributes = {\n class: attributes.class,\n rr_width: \"\" + width + \"px\",\n rr_height: \"\" + height + \"px\"\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n if (!n2.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n var isCustomElement;\n try {\n if (customElements.get(tagName)) isCustomElement = true;\n } catch (e2) {}\n return {\n type: NodeType$3.Element,\n tagName: tagName,\n attributes: attributes,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock: needBlock,\n rootId: rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$3.Comment) {\n return true;\n } else if (sn.type === NodeType$3.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" && sn.attributes.as === \"script\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _options_skipChild = options.skipChild, skipChild = _options_skipChild === void 0 ? false : _options_skipChild, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _options_iframeLoadTimeout = options.iframeLoadTimeout, iframeLoadTimeout = _options_iframeLoadTimeout === void 0 ? 5e3 : _options_iframeLoadTimeout, onStylesheetLoad = options.onStylesheetLoad, _options_stylesheetLoadTimeout = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _options_stylesheetLoadTimeout === void 0 ? 5e3 : _options_stylesheetLoadTimeout, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var needsMask = options.needsMask;\n var _options_preserveWhiteSpace = options.preserveWhiteSpace, preserveWhiteSpace = _options_preserveWhiteSpace === void 0 ? true : _options_preserveWhiteSpace;\n if (!needsMask) {\n var checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(n2, maskTextClass, maskTextSelector, checkAncestors);\n }\n var _serializedNode = serializeNode(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n cssCaptured: cssCaptured\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n var id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$3.Text && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n var serializedNode = Object.assign(_serializedNode, {\n id: id\n });\n mirror2.add(n2, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n var recordChild = !skipChild;\n if (serializedNode.type === NodeType$3.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n var shadowRootEl = index$1.shadowRoot(n2);\n if (shadowRootEl && isNativeShadowDom(shadowRootEl)) serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$3.Document || serializedNode.type === NodeType$3.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n var bypassOptions = {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: skipChild,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n cssCaptured: false\n };\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n else {\n if (serializedNode.type === NodeType$3.Element && serializedNode.attributes._cssText !== void 0 && typeof serializedNode.attributes._cssText === \"string\") {\n bypassOptions.cssCaptured = true;\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(n2))), _step; !(_step = _iterator()).done;){\n var childN = _step.value;\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n var shadowRootEl1 = null;\n if (isElement(n2) && (shadowRootEl1 = index$1.shadowRoot(n2))) {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(shadowRootEl1))), _step1; !(_step1 = _iterator1()).done;){\n var childN1 = _step1.value;\n var serializedChildNode1 = serializeNodeWithId(childN1, bypassOptions);\n if (serializedChildNode1) {\n isNativeShadowDom(shadowRootEl1) && (serializedChildNode1.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode1);\n }\n }\n }\n }\n var parent = index$1.parentNode(n2);\n if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"iframe\") {\n onceIframeLoaded(n2, function() {\n var iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(n2, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n onceStylesheetLoaded(n2, function() {\n if (onStylesheetLoad) {\n var serializedLinkNode = serializeNodeWithId(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n2, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n2, options) {\n var _ref = options || {}, tmp = _ref.mirror, mirror2 = tmp === void 0 ? new Mirror() : tmp, _ref_blockClass = _ref.blockClass, blockClass = _ref_blockClass === void 0 ? \"rr-block\" : _ref_blockClass, _ref_blockSelector = _ref.blockSelector, blockSelector = _ref_blockSelector === void 0 ? null : _ref_blockSelector, _ref_maskTextClass = _ref.maskTextClass, maskTextClass = _ref_maskTextClass === void 0 ? \"rr-mask\" : _ref_maskTextClass, _ref_maskTextSelector = _ref.maskTextSelector, maskTextSelector = _ref_maskTextSelector === void 0 ? null : _ref_maskTextSelector, _ref_inlineStylesheet = _ref.inlineStylesheet, inlineStylesheet = _ref_inlineStylesheet === void 0 ? true : _ref_inlineStylesheet, _ref_inlineImages = _ref.inlineImages, inlineImages = _ref_inlineImages === void 0 ? false : _ref_inlineImages, _ref_recordCanvas = _ref.recordCanvas, recordCanvas = _ref_recordCanvas === void 0 ? false : _ref_recordCanvas, _ref_maskAllInputs = _ref.maskAllInputs, maskAllInputs = _ref_maskAllInputs === void 0 ? false : _ref_maskAllInputs, maskTextFn = _ref.maskTextFn, maskInputFn = _ref.maskInputFn, _ref_slimDOM = _ref.slimDOM, slimDOM = _ref_slimDOM === void 0 ? false : _ref_slimDOM, dataURLOptions = _ref.dataURLOptions, preserveWhiteSpace = _ref.preserveWhiteSpace, onSerialize = _ref.onSerialize, onIframeLoad = _ref.onIframeLoad, iframeLoadTimeout = _ref.iframeLoadTimeout, onStylesheetLoad = _ref.onStylesheetLoad, stylesheetLoadTimeout = _ref.stylesheetLoadTimeout, _ref_keepIframeSrcFn = _ref.keepIframeSrcFn, keepIframeSrcFn = _ref_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _ref_keepIframeSrcFn;\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n var slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n } : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$1 = {\n exports: {}\n};\nvar x$1 = String;\nvar create$1 = function create$1() {\n return {\n isColorSupported: false,\n reset: x$1,\n bold: x$1,\n dim: x$1,\n italic: x$1,\n underline: x$1,\n inverse: x$1,\n hidden: x$1,\n strikethrough: x$1,\n black: x$1,\n red: x$1,\n green: x$1,\n yellow: x$1,\n blue: x$1,\n magenta: x$1,\n cyan: x$1,\n white: x$1,\n gray: x$1,\n bgBlack: x$1,\n bgRed: x$1,\n bgGreen: x$1,\n bgYellow: x$1,\n bgBlue: x$1,\n bgMagenta: x$1,\n bgCyan: x$1,\n bgWhite: x$1\n };\n};\npicocolors_browser$1.exports = create$1();\npicocolors_browser$1.exports.createColors = create$1;\nvar picocolors_browserExports$1 = picocolors_browser$1.exports;\nvar __viteBrowserExternal$2 = {};\nvar __viteBrowserExternal$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$2\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$1 = /* @__PURE__ */ getAugmentedNamespace$1(__viteBrowserExternal$1$1);\nvar pico$1 = picocolors_browserExports$1;\nvar terminalHighlight$1$1 = require$$2$1;\nvar CssSyntaxError$3$1 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$1.isColorSupported;\n if (terminalHighlight$1$1) {\n if (color) css = terminalHighlight$1$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$1_createColors = pico$1.createColors(true), bold = _pico$1_createColors.bold, gray = _pico$1_createColors.gray, red = _pico$1_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$1 = CssSyntaxError$3$1;\nCssSyntaxError$3$1.default = CssSyntaxError$3$1;\nvar symbols$1 = {};\nsymbols$1.isClean = Symbol(\"isClean\");\nsymbols$1.my = Symbol(\"my\");\nvar DEFAULT_RAW$1 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$1(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$1 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$1[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$1(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$1[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier$1 = Stringifier$2$1;\nStringifier$2$1.default = Stringifier$2$1;\nvar Stringifier$1$1 = stringifier$1;\nfunction stringify$4$1(node2, builder) {\n var str = new Stringifier$1$1(builder);\n str.stringify(node2);\n}\nvar stringify_1$1 = stringify$4$1;\nstringify$4$1.default = stringify$4$1;\nvar isClean$2$1 = symbols$1.isClean, my$2$1 = symbols$1.my;\nvar CssSyntaxError$2$1 = cssSyntaxError$1;\nvar Stringifier2$1 = stringifier$1;\nvar stringify$3$1 = stringify_1$1;\nfunction cloneNode$1(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$1(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$1(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$1 = /*#__PURE__*/ function() {\n function Node2(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$1] = false;\n this[my$2$1] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node2.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$1(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$1(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$1]) {\n this[isClean$2$1] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$1] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2$1();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$1;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node2, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node2;\n}();\nvar node$1 = Node$4$1;\nNode$4$1.default = Node$4$1;\nvar Node$3$1 = node$1;\nvar Declaration$4$1 = /*#__PURE__*/ function(Node$3$1) {\n _inherits(Declaration, Node$3$1);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$1.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3$1);\nvar declaration$1 = Declaration$4$1;\nDeclaration$4$1.default = Declaration$4$1;\nvar urlAlphabet$1 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$1[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$1 = {\n nanoid: nanoid$1$1\n};\nvar SourceMapConsumer$2$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$2$1 = require$$2$1.SourceMapGenerator;\nvar existsSync$1 = require$$2$1.existsSync, readFileSync$1 = require$$2$1.readFileSync;\nvar dirname$1$1 = require$$2$1.dirname, join$1 = require$$2$1.join;\nfunction fromBase64$1(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$1 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$1(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$1(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$1(path);\n if (existsSync$1(path)) {\n this.mapFile = path;\n return readFileSync$1(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$1)) {\n return SourceMapGenerator$2$1.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$1)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$1(dirname$1$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap$1 = PreviousMap$2$1;\nPreviousMap$2$1.default = PreviousMap$2$1;\nvar SourceMapConsumer$1$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$1$1 = require$$2$1.SourceMapGenerator;\nvar fileURLToPath$1 = require$$2$1.fileURLToPath, pathToFileURL$1$1 = require$$2$1.pathToFileURL;\nvar isAbsolute$1 = require$$2$1.isAbsolute, resolve$1$1 = require$$2$1.resolve;\nvar nanoid$2 = nonSecure$1.nanoid;\nvar terminalHighlight$2 = require$$2$1;\nvar CssSyntaxError$1$1 = cssSyntaxError$1;\nvar PreviousMap$1$1 = previousMap$1;\nvar fromOffsetCache$1 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$1 = Boolean(SourceMapConsumer$1$1 && SourceMapGenerator$1$1);\nvar pathAvailable$1$1 = Boolean(resolve$1$1 && isAbsolute$1);\nvar Input$4$1 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$1(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$1(opts.from);\n }\n }\n if (pathAvailable$1$1 && sourceMapAvailable$1$1) {\n var map = new PreviousMap$1$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$1) {\n result2.input.url = pathToFileURL$1$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$1]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$1] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$1];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$1(from.source)) {\n fromUrl = pathToFileURL$1$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$1) {\n result2.file = fileURLToPath$1(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input$1 = Input$4$1;\nInput$4$1.default = Input$4$1;\nif (terminalHighlight$2 && terminalHighlight$2.registerInput) {\n terminalHighlight$2.registerInput(Input$4$1);\n}\nvar SourceMapConsumer$3 = require$$2$1.SourceMapConsumer, SourceMapGenerator$3 = require$$2$1.SourceMapGenerator;\nvar dirname$2 = require$$2$1.dirname, relative$1 = require$$2$1.relative, resolve$2 = require$$2$1.resolve, sep$1 = require$$2$1.sep;\nvar pathToFileURL$2 = require$$2$1.pathToFileURL;\nvar Input$3$1 = input$1;\nvar sourceMapAvailable$2 = Boolean(SourceMapConsumer$3 && SourceMapGenerator$3);\nvar pathAvailable$2 = Boolean(dirname$2 && resolve$2 && relative$1 && sep$1);\nvar MapGenerator$2$1 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$2(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$3(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$2 && sourceMapAvailable$2 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$3.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$2(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$2(resolve$2(from, this.mapOpts.annotation));\n }\n var path = relative$1(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$1(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$2) {\n var fileURL = pathToFileURL$2(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$1 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator$1 = MapGenerator$2$1;\nvar Node$2$1 = node$1;\nvar Comment$4$1 = /*#__PURE__*/ function(Node$2$1) {\n _inherits(Comment, Node$2$1);\n function Comment(defaults) {\n var _this;\n _this = Node$2$1.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2$1);\nvar comment$1 = Comment$4$1;\nComment$4$1.default = Comment$4$1;\nvar isClean$1$1 = symbols$1.isClean, my$1$1 = symbols$1.my;\nvar Declaration$3$1 = declaration$1;\nvar Comment$3$1 = comment$1;\nvar Node$1$1 = node$1;\nvar parse$4$1, Rule$4$1, AtRule$4$1, Root$6$1;\nfunction cleanSource$1(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$1(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$1(node2) {\n node2[isClean$1$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$1(i2);\n }\n }\n}\nvar Container$7$1 = /*#__PURE__*/ function(Node$1$1) {\n _inherits(Container, Node$1$1);\n function Container() {\n return Node$1$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$1(parse$4$1(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$1(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$1(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$1(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$1(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$1]) Container.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$1]) markDirtyUp$1(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1$1);\nContainer$7$1.registerParse = function(dependant) {\n parse$4$1 = dependant;\n};\nContainer$7$1.registerRule = function(dependant) {\n Rule$4$1 = dependant;\n};\nContainer$7$1.registerAtRule = function(dependant) {\n AtRule$4$1 = dependant;\n};\nContainer$7$1.registerRoot = function(dependant) {\n Root$6$1 = dependant;\n};\nvar container$1 = Container$7$1;\nContainer$7$1.default = Container$7$1;\nContainer$7$1.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$1.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$1.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$1.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$1.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$1.prototype);\n }\n node2[my$1$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$1.rebuild(child);\n });\n }\n};\nvar Container$6$1 = container$1;\nvar LazyResult$4$1, Processor$3$1;\nvar Document$3$1 = /*#__PURE__*/ function(Container$6$1) {\n _inherits(Document2, Container$6$1);\n function Document2(defaults) {\n var _this;\n _this = Container$6$1.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document2.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$1(new Processor$3$1(), this, opts);\n return lazy.stringify();\n };\n return Document2;\n}(Container$6$1);\nDocument$3$1.registerLazyResult = function(dependant) {\n LazyResult$4$1 = dependant;\n};\nDocument$3$1.registerProcessor = function(dependant) {\n Processor$3$1 = dependant;\n};\nvar document$1$1 = Document$3$1;\nDocument$3$1.default = Document$3$1;\nvar printed$1 = {};\nvar warnOnce$2$1 = function warnOnce(message) {\n if (printed$1[message]) return;\n printed$1[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$1 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning$1 = Warning$2$1;\nWarning$2$1.default = Warning$2$1;\nvar Warning$1$1 = warning$1;\nvar Result$3$1 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result$1 = Result$3$1;\nResult$3$1.default = Result$3$1;\nvar SINGLE_QUOTE$1 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$1 = '\"'.charCodeAt(0);\nvar BACKSLASH$1 = \"\\\\\".charCodeAt(0);\nvar SLASH$1 = \"/\".charCodeAt(0);\nvar NEWLINE$1 = \"\\n\".charCodeAt(0);\nvar SPACE$1 = \" \".charCodeAt(0);\nvar FEED$1 = \"\\f\".charCodeAt(0);\nvar TAB$1 = \"\t\".charCodeAt(0);\nvar CR$1 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$1 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$1 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$1 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$1 = \")\".charCodeAt(0);\nvar OPEN_CURLY$1 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$1 = \"}\".charCodeAt(0);\nvar SEMICOLON$1 = \";\".charCodeAt(0);\nvar ASTERISK$1 = \"*\".charCodeAt(0);\nvar COLON$1 = \":\".charCodeAt(0);\nvar AT$1 = \"@\".charCodeAt(0);\nvar RE_AT_END$1 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$1 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$1 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$1 = /[\\da-f]/i;\nvar tokenize$1 = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$1:\n case SPACE$1:\n case TAB$1:\n case CR$1:\n case FEED$1:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$1 || code === NEWLINE$1 || code === TAB$1 || code === CR$1 || code === FEED$1);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$1:\n case CLOSE_SQUARE$1:\n case OPEN_CURLY$1:\n case CLOSE_CURLY$1:\n case COLON$1:\n case SEMICOLON$1:\n case CLOSE_PARENTHESES$1:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$1:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$1 && n2 !== DOUBLE_QUOTE$1 && n2 !== SPACE$1 && n2 !== NEWLINE$1 && n2 !== TAB$1 && n2 !== FEED$1 && n2 !== CR$1) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$1.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$1:\n case DOUBLE_QUOTE$1:\n {\n quote = code === SINGLE_QUOTE$1 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$1:\n {\n RE_AT_END$1.lastIndex = pos + 1;\n RE_AT_END$1.test(css);\n if (RE_AT_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$1.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$1:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$1){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$1 && code !== SPACE$1 && code !== NEWLINE$1 && code !== TAB$1 && code !== CR$1 && code !== FEED$1) {\n next += 1;\n if (RE_HEX_ESCAPE$1.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$1.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$1) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$1 && css.charCodeAt(pos + 1) === ASTERISK$1) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$1.lastIndex = pos + 1;\n RE_WORD_END$1.test(css);\n if (RE_WORD_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$1.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$1 = container$1;\nvar AtRule$3$1 = /*#__PURE__*/ function(Container$5$1) {\n _inherits(AtRule, Container$5$1);\n function AtRule(defaults) {\n var _this;\n _this = Container$5$1.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_append = Container$5$1.prototype.append).call.apply(_Container$5$1_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_prepend = Container$5$1.prototype.prepend).call.apply(_Container$5$1_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5$1);\nvar atRule$1 = AtRule$3$1;\nAtRule$3$1.default = AtRule$3$1;\nContainer$5$1.registerAtRule(AtRule$3$1);\nvar Container$4$1 = container$1;\nvar LazyResult$3$1, Processor$2$1;\nvar Root$5$1 = /*#__PURE__*/ function(Container$4$1) {\n _inherits(Root, Container$4$1);\n function Root(defaults) {\n var _this;\n _this = Container$4$1.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$1.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$1.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$1(new Processor$2$1(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4$1);\nRoot$5$1.registerLazyResult = function(dependant) {\n LazyResult$3$1 = dependant;\n};\nRoot$5$1.registerProcessor = function(dependant) {\n Processor$2$1 = dependant;\n};\nvar root$1 = Root$5$1;\nRoot$5$1.default = Root$5$1;\nContainer$4$1.registerRoot(Root$5$1);\nvar list$2$1 = {\n comma: function comma(string) {\n return list$2$1.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$1.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$1 = list$2$1;\nlist$2$1.default = list$2$1;\nvar Container$3$1 = container$1;\nvar list$1$1 = list_1$1;\nvar Rule$3$1 = /*#__PURE__*/ function(Container$3$1) {\n _inherits(Rule, Container$3$1);\n function Rule(defaults) {\n var _this;\n _this = Container$3$1.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3$1);\nvar rule$1 = Rule$3$1;\nRule$3$1.default = Rule$3$1;\nContainer$3$1.registerRule(Rule$3$1);\nvar Declaration$2$1 = declaration$1;\nvar tokenizer2$1 = tokenize$1;\nvar Comment$2$1 = comment$1;\nvar AtRule$2$1 = atRule$1;\nvar Root$4$1 = root$1;\nvar Rule$2$1 = rule$1;\nvar SAFE_COMMENT_NEIGHBOR$1 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$1(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4$1();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$1();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$1();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2$1(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$1();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$1(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$1();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$1[prev] && !SAFE_COMMENT_NEIGHBOR$1[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$1();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser$1 = Parser$1$1;\nvar Container$2$1 = container$1;\nvar Parser2$1 = parser$1;\nvar Input$2$1 = input$1;\nfunction parse$3$1(css, opts) {\n var input2 = new Input$2$1(css, opts);\n var parser2 = new Parser2$1(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$1 = parse$3$1;\nparse$3$1.default = parse$3$1;\nContainer$2$1.registerParse(parse$3$1);\nvar isClean$3 = symbols$1.isClean, my$3 = symbols$1.my;\nvar MapGenerator$1$1 = mapGenerator$1;\nvar stringify$2$1 = stringify_1$1;\nvar Container$1$1 = container$1;\nvar Document$2$1 = document$1$1;\nvar warnOnce$1$1 = warnOnce$2$1;\nvar Result$2$1 = result$1;\nvar parse$2$1 = parse_1$1;\nvar Root$3$1 = root$1;\nvar TYPE_TO_CLASS_NAME$1 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$1 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$1 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$1 = 0;\nfunction isPromise$1(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$1(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$1[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$1,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$1,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$1(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$1,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$1,\n \"RootExit\"\n ];\n } else {\n events = getEvents$1(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$1(node2) {\n node2[isClean$3] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$1(i2);\n });\n return node2;\n}\nvar postcss$2$1 = {};\nvar LazyResult$2$1 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$1(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2$1)) {\n root2 = cleanMarks$1(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$1;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$3]) {\n Container$1$1.rebuild(root2);\n }\n }\n this.result = new Result$2$1(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$1, {\n postcss: postcss$2$1,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$1[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$1[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$1(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$3]) return [\n 3,\n 14\n ];\n root2[isClean$3] = true;\n stack = [\n toStack$1(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$1(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$1(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$1;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$3]){\n root2[isClean$3] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$3]) {\n child[isClean$3] = true;\n stack.push(toStack$1(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$1) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$3] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$3] = true;\n var events = getEvents$1(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$1) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$3]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2$1.registerPostcss = function(dependant) {\n postcss$2$1 = dependant;\n};\nvar lazyResult$1 = LazyResult$2$1;\nLazyResult$2$1.default = LazyResult$2$1;\nRoot$3$1.registerLazyResult(LazyResult$2$1);\nDocument$2$1.registerLazyResult(LazyResult$2$1);\nvar MapGenerator2$1 = mapGenerator$1;\nvar stringify$1$1 = stringify_1$1;\nvar warnOnce2$1 = warnOnce$2$1;\nvar parse$1$1 = parse_1$1;\nvar Result$1$1 = result$1;\nvar NoWorkResult$1$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$1;\n this.result = new Result$1$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2$1(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult$1 = NoWorkResult$1$1;\nNoWorkResult$1$1.default = NoWorkResult$1$1;\nvar NoWorkResult2$1 = noWorkResult$1;\nvar LazyResult$1$1 = lazyResult$1;\nvar Document$1$1 = document$1$1;\nvar Root$2$1 = root$1;\nvar Processor$1$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2$1(this, css, opts);\n } else {\n return new LazyResult$1$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor$1 = Processor$1$1;\nProcessor$1$1.default = Processor$1$1;\nRoot$2$1.registerProcessor(Processor$1$1);\nDocument$1$1.registerProcessor(Processor$1$1);\nvar Declaration$1$1 = declaration$1;\nvar PreviousMap2$1 = previousMap$1;\nvar Comment$1$1 = comment$1;\nvar AtRule$1$1 = atRule$1;\nvar Input$1$1 = input$1;\nvar Root$1$1 = root$1;\nvar Rule$1$1 = rule$1;\nfunction fromJSON$1$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$1(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2$1.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$1(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$1 = fromJSON$1$1;\nfromJSON$1$1.default = fromJSON$1$1;\nvar CssSyntaxError2$1 = cssSyntaxError$1;\nvar Declaration2$1 = declaration$1;\nvar LazyResult2$1 = lazyResult$1;\nvar Container2$1 = container$1;\nvar Processor2$1 = processor$1;\nvar stringify$5$1 = stringify_1$1;\nvar fromJSON$2 = fromJSON_1$1;\nvar Document22 = document$1$1;\nvar Warning2$1 = warning$1;\nvar Comment2$1 = comment$1;\nvar AtRule2$1 = atRule$1;\nvar Result2$1 = result$1;\nvar Input2$1 = input$1;\nvar parse$5 = parse_1$1;\nvar list$3 = list_1$1;\nvar Rule2$1 = rule$1;\nvar Root2$1 = root$1;\nvar Node2$1 = node$1;\nfunction postcss$3() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2$1(plugins);\n}\npostcss$3.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2$1().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$3([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$3.stringify = stringify$5$1;\npostcss$3.parse = parse$5;\npostcss$3.fromJSON = fromJSON$2;\npostcss$3.list = list$3;\npostcss$3.comment = function(defaults) {\n return new Comment2$1(defaults);\n};\npostcss$3.atRule = function(defaults) {\n return new AtRule2$1(defaults);\n};\npostcss$3.decl = function(defaults) {\n return new Declaration2$1(defaults);\n};\npostcss$3.rule = function(defaults) {\n return new Rule2$1(defaults);\n};\npostcss$3.root = function(defaults) {\n return new Root2$1(defaults);\n};\npostcss$3.document = function(defaults) {\n return new Document22(defaults);\n};\npostcss$3.CssSyntaxError = CssSyntaxError2$1;\npostcss$3.Declaration = Declaration2$1;\npostcss$3.Container = Container2$1;\npostcss$3.Processor = Processor2$1;\npostcss$3.Document = Document22;\npostcss$3.Comment = Comment2$1;\npostcss$3.Warning = Warning2$1;\npostcss$3.AtRule = AtRule2$1;\npostcss$3.Result = Result2$1;\npostcss$3.Input = Input2$1;\npostcss$3.Rule = Rule2$1;\npostcss$3.Root = Root2$1;\npostcss$3.Node = Node2$1;\nLazyResult2$1.registerPostcss(postcss$3);\nvar postcss_1$1 = postcss$3;\npostcss$3.default = postcss$3;\nvar postcss$1$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(postcss_1$1);\npostcss$1$1.stringify;\npostcss$1$1.fromJSON;\npostcss$1$1.plugin;\npostcss$1$1.parse;\npostcss$1$1.list;\npostcss$1$1.document;\npostcss$1$1.comment;\npostcss$1$1.atRule;\npostcss$1$1.rule;\npostcss$1$1.decl;\npostcss$1$1.root;\npostcss$1$1.CssSyntaxError;\npostcss$1$1.Declaration;\npostcss$1$1.Container;\npostcss$1$1.Processor;\npostcss$1$1.Document;\npostcss$1$1.Comment;\npostcss$1$1.Warning;\npostcss$1$1.AtRule;\npostcss$1$1.Result;\npostcss$1$1.Input;\npostcss$1$1.Rule;\npostcss$1$1.Root;\npostcss$1$1.Node;\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = function(obj, key, value) {\n return key in obj ? __defProp2(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField2 = function(obj, key, value) {\n return __defNormalProp2(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction getDefaultExportFromCjs$2(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$2(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$2 = {\n exports: {}\n};\nvar x$2 = String;\nvar create$2 = function create$2() {\n return {\n isColorSupported: false,\n reset: x$2,\n bold: x$2,\n dim: x$2,\n italic: x$2,\n underline: x$2,\n inverse: x$2,\n hidden: x$2,\n strikethrough: x$2,\n black: x$2,\n red: x$2,\n green: x$2,\n yellow: x$2,\n blue: x$2,\n magenta: x$2,\n cyan: x$2,\n white: x$2,\n gray: x$2,\n bgBlack: x$2,\n bgRed: x$2,\n bgGreen: x$2,\n bgYellow: x$2,\n bgBlue: x$2,\n bgMagenta: x$2,\n bgCyan: x$2,\n bgWhite: x$2\n };\n};\npicocolors_browser$2.exports = create$2();\npicocolors_browser$2.exports.createColors = create$2;\nvar picocolors_browserExports$2 = picocolors_browser$2.exports;\nvar __viteBrowserExternal$3 = {};\nvar __viteBrowserExternal$1$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$3\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$2 = /* @__PURE__ */ getAugmentedNamespace$2(__viteBrowserExternal$1$2);\nvar pico$2 = picocolors_browserExports$2;\nvar terminalHighlight$1$2 = require$$2$2;\nvar CssSyntaxError$3$2 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError2, Error1);\n function CssSyntaxError2(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError2);\n }\n return _this;\n }\n var _proto = CssSyntaxError2.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$2.isColorSupported;\n if (terminalHighlight$1$2) {\n if (color) css = terminalHighlight$1$2(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$2_createColors = pico$2.createColors(true), bold = _pico$2_createColors.bold, gray = _pico$2_createColors.gray, red = _pico$2_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError2;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$2 = CssSyntaxError$3$2;\nCssSyntaxError$3$2.default = CssSyntaxError$3$2;\nvar symbols$2 = {};\nsymbols$2.isClean = Symbol(\"isClean\");\nsymbols$2.my = Symbol(\"my\");\nvar DEFAULT_RAW$2 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$2(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$2 = /*#__PURE__*/ function() {\n function Stringifier2(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier2.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$2[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$2(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$2[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier2;\n}();\nvar stringifier$2 = Stringifier$2$2;\nStringifier$2$2.default = Stringifier$2$2;\nvar Stringifier$1$2 = stringifier$2;\nfunction stringify$4$2(node2, builder) {\n var str = new Stringifier$1$2(builder);\n str.stringify(node2);\n}\nvar stringify_1$2 = stringify$4$2;\nstringify$4$2.default = stringify$4$2;\nvar isClean$2$2 = symbols$2.isClean, my$2$2 = symbols$2.my;\nvar CssSyntaxError$2$2 = cssSyntaxError$2;\nvar Stringifier22 = stringifier$2;\nvar stringify$3$2 = stringify_1$2;\nfunction cloneNode$2(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$2(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$2(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$2 = /*#__PURE__*/ function() {\n function Node3(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$2] = false;\n this[my$2$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node3.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$2(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$2]) {\n this[isClean$2$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier22();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$2;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node3, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node3;\n}();\nvar node$2 = Node$4$2;\nNode$4$2.default = Node$4$2;\nvar Node$3$2 = node$2;\nvar Declaration$4$2 = /*#__PURE__*/ function(Node$3$2) {\n _inherits(Declaration2, Node$3$2);\n function Declaration2(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$2.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration2, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration2;\n}(Node$3$2);\nvar declaration$2 = Declaration$4$2;\nDeclaration$4$2.default = Declaration$4$2;\nvar urlAlphabet$2 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$2 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$2[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$2 = {\n nanoid: nanoid$1$2\n};\nvar SourceMapConsumer$2$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$2$2 = require$$2$2.SourceMapGenerator;\nvar existsSync$2 = require$$2$2.existsSync, readFileSync$2 = require$$2$2.readFileSync;\nvar dirname$1$2 = require$$2$2.dirname, join$2 = require$$2$2.join;\nfunction fromBase64$2(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$2 = /*#__PURE__*/ function() {\n function PreviousMap2(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$2(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap2.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$2(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$2(path);\n if (existsSync$2(path)) {\n this.mapFile = path;\n return readFileSync$2(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$2)) {\n return SourceMapGenerator$2$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$2(dirname$1$2(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap2;\n}();\nvar previousMap$2 = PreviousMap$2$2;\nPreviousMap$2$2.default = PreviousMap$2$2;\nvar SourceMapConsumer$1$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$1$2 = require$$2$2.SourceMapGenerator;\nvar fileURLToPath$2 = require$$2$2.fileURLToPath, pathToFileURL$1$2 = require$$2$2.pathToFileURL;\nvar isAbsolute$2 = require$$2$2.isAbsolute, resolve$1$2 = require$$2$2.resolve;\nvar nanoid$3 = nonSecure$2.nanoid;\nvar terminalHighlight$3 = require$$2$2;\nvar CssSyntaxError$1$2 = cssSyntaxError$2;\nvar PreviousMap$1$2 = previousMap$2;\nvar fromOffsetCache$2 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$2 = Boolean(SourceMapConsumer$1$2 && SourceMapGenerator$1$2);\nvar pathAvailable$1$2 = Boolean(resolve$1$2 && isAbsolute$2);\nvar Input$4$2 = /*#__PURE__*/ function() {\n function Input2(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$2 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$2(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$2(opts.from);\n }\n }\n if (pathAvailable$1$2 && sourceMapAvailable$1$2) {\n var map = new PreviousMap$1$2(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input2.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$2(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$2(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$2) {\n result2.input.url = pathToFileURL$1$2(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$2]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$2] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$2];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$2(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$2(from.source)) {\n fromUrl = pathToFileURL$1$2(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$2(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$2) {\n result2.file = fileURLToPath$2(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input2, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input2;\n}();\nvar input$2 = Input$4$2;\nInput$4$2.default = Input$4$2;\nif (terminalHighlight$3 && terminalHighlight$3.registerInput) {\n terminalHighlight$3.registerInput(Input$4$2);\n}\nvar SourceMapConsumer$4 = require$$2$2.SourceMapConsumer, SourceMapGenerator$4 = require$$2$2.SourceMapGenerator;\nvar dirname$3 = require$$2$2.dirname, relative$2 = require$$2$2.relative, resolve$3 = require$$2$2.resolve, sep$2 = require$$2$2.sep;\nvar pathToFileURL$3 = require$$2$2.pathToFileURL;\nvar Input$3$2 = input$2;\nvar sourceMapAvailable$3 = Boolean(SourceMapConsumer$4 && SourceMapGenerator$4);\nvar pathAvailable$3 = Boolean(dirname$3 && resolve$3 && relative$2 && sep$2);\nvar MapGenerator$2$2 = /*#__PURE__*/ function() {\n function MapGenerator2(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator2.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$3(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$4(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$3 && sourceMapAvailable$3 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$4.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$3(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$3(resolve$3(from, this.mapOpts.annotation));\n }\n var path = relative$2(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$2(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$3) {\n var fileURL = pathToFileURL$3(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$2 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator2;\n}();\nvar mapGenerator$2 = MapGenerator$2$2;\nvar Node$2$2 = node$2;\nvar Comment$4$2 = /*#__PURE__*/ function(Node$2$2) {\n _inherits(Comment2, Node$2$2);\n function Comment2(defaults) {\n var _this;\n _this = Node$2$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment2;\n}(Node$2$2);\nvar comment$2 = Comment$4$2;\nComment$4$2.default = Comment$4$2;\nvar isClean$1$2 = symbols$2.isClean, my$1$2 = symbols$2.my;\nvar Declaration$3$2 = declaration$2;\nvar Comment$3$2 = comment$2;\nvar Node$1$2 = node$2;\nvar parse$4$2, Rule$4$2, AtRule$4$2, Root$6$2;\nfunction cleanSource$2(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$2(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$2(node2) {\n node2[isClean$1$2] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$2(i2);\n }\n }\n}\nvar Container$7$2 = /*#__PURE__*/ function(Node$1$2) {\n _inherits(Container2, Node$1$2);\n function Container2() {\n return Node$1$2.apply(this, arguments) || this;\n }\n var _proto = Container2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$2.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$2(parse$4$2(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$2(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$2(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$2(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$2(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$2]) Container2.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$2]) markDirtyUp$2(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container2, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container2;\n}(Node$1$2);\nContainer$7$2.registerParse = function(dependant) {\n parse$4$2 = dependant;\n};\nContainer$7$2.registerRule = function(dependant) {\n Rule$4$2 = dependant;\n};\nContainer$7$2.registerAtRule = function(dependant) {\n AtRule$4$2 = dependant;\n};\nContainer$7$2.registerRoot = function(dependant) {\n Root$6$2 = dependant;\n};\nvar container$2 = Container$7$2;\nContainer$7$2.default = Container$7$2;\nContainer$7$2.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$2.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$2.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$2.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$2.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$2.prototype);\n }\n node2[my$1$2] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$2.rebuild(child);\n });\n }\n};\nvar Container$6$2 = container$2;\nvar LazyResult$4$2, Processor$3$2;\nvar Document$3$2 = /*#__PURE__*/ function(Container$6$2) {\n _inherits(Document23, Container$6$2);\n function Document23(defaults) {\n var _this;\n _this = Container$6$2.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document23.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$2(new Processor$3$2(), this, opts);\n return lazy.stringify();\n };\n return Document23;\n}(Container$6$2);\nDocument$3$2.registerLazyResult = function(dependant) {\n LazyResult$4$2 = dependant;\n};\nDocument$3$2.registerProcessor = function(dependant) {\n Processor$3$2 = dependant;\n};\nvar document$1$2 = Document$3$2;\nDocument$3$2.default = Document$3$2;\nvar printed$2 = {};\nvar warnOnce$2$2 = function warnOnce2(message) {\n if (printed$2[message]) return;\n printed$2[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$2 = /*#__PURE__*/ function() {\n function Warning2(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning2.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning2;\n}();\nvar warning$2 = Warning$2$2;\nWarning$2$2.default = Warning$2$2;\nvar Warning$1$2 = warning$2;\nvar Result$3$2 = /*#__PURE__*/ function() {\n function Result2(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result2.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$2(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result2, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result2;\n}();\nvar result$2 = Result$3$2;\nResult$3$2.default = Result$3$2;\nvar SINGLE_QUOTE$2 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$2 = '\"'.charCodeAt(0);\nvar BACKSLASH$2 = \"\\\\\".charCodeAt(0);\nvar SLASH$2 = \"/\".charCodeAt(0);\nvar NEWLINE$2 = \"\\n\".charCodeAt(0);\nvar SPACE$2 = \" \".charCodeAt(0);\nvar FEED$2 = \"\\f\".charCodeAt(0);\nvar TAB$2 = \"\t\".charCodeAt(0);\nvar CR$2 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$2 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$2 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$2 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$2 = \")\".charCodeAt(0);\nvar OPEN_CURLY$2 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$2 = \"}\".charCodeAt(0);\nvar SEMICOLON$2 = \";\".charCodeAt(0);\nvar ASTERISK$2 = \"*\".charCodeAt(0);\nvar COLON$2 = \":\".charCodeAt(0);\nvar AT$2 = \"@\".charCodeAt(0);\nvar RE_AT_END$2 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$2 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$2 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$2 = /[\\da-f]/i;\nvar tokenize$2 = function tokenizer2(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$2:\n case SPACE$2:\n case TAB$2:\n case CR$2:\n case FEED$2:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$2 || code === NEWLINE$2 || code === TAB$2 || code === CR$2 || code === FEED$2);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$2:\n case CLOSE_SQUARE$2:\n case OPEN_CURLY$2:\n case CLOSE_CURLY$2:\n case COLON$2:\n case SEMICOLON$2:\n case CLOSE_PARENTHESES$2:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$2:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$2 && n2 !== DOUBLE_QUOTE$2 && n2 !== SPACE$2 && n2 !== NEWLINE$2 && n2 !== TAB$2 && n2 !== FEED$2 && n2 !== CR$2) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$2.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$2:\n case DOUBLE_QUOTE$2:\n {\n quote = code === SINGLE_QUOTE$2 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$2:\n {\n RE_AT_END$2.lastIndex = pos + 1;\n RE_AT_END$2.test(css);\n if (RE_AT_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$2.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$2:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$2){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$2 && code !== SPACE$2 && code !== NEWLINE$2 && code !== TAB$2 && code !== CR$2 && code !== FEED$2) {\n next += 1;\n if (RE_HEX_ESCAPE$2.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$2.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$2) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$2 && css.charCodeAt(pos + 1) === ASTERISK$2) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$2.lastIndex = pos + 1;\n RE_WORD_END$2.test(css);\n if (RE_WORD_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$2.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$2 = container$2;\nvar AtRule$3$2 = /*#__PURE__*/ function(Container$5$2) {\n _inherits(AtRule2, Container$5$2);\n function AtRule2(defaults) {\n var _this;\n _this = Container$5$2.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_append = Container$5$2.prototype.append).call.apply(_Container$5$2_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_prepend = Container$5$2.prototype.prepend).call.apply(_Container$5$2_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule2;\n}(Container$5$2);\nvar atRule$2 = AtRule$3$2;\nAtRule$3$2.default = AtRule$3$2;\nContainer$5$2.registerAtRule(AtRule$3$2);\nvar Container$4$2 = container$2;\nvar LazyResult$3$2, Processor$2$2;\nvar Root$5$2 = /*#__PURE__*/ function(Container$4$2) {\n _inherits(Root2, Container$4$2);\n function Root2(defaults) {\n var _this;\n _this = Container$4$2.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root2.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$2.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$2.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$2(new Processor$2$2(), this, opts);\n return lazy.stringify();\n };\n return Root2;\n}(Container$4$2);\nRoot$5$2.registerLazyResult = function(dependant) {\n LazyResult$3$2 = dependant;\n};\nRoot$5$2.registerProcessor = function(dependant) {\n Processor$2$2 = dependant;\n};\nvar root$2 = Root$5$2;\nRoot$5$2.default = Root$5$2;\nContainer$4$2.registerRoot(Root$5$2);\nvar list$2$2 = {\n comma: function comma(string) {\n return list$2$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$2 = list$2$2;\nlist$2$2.default = list$2$2;\nvar Container$3$2 = container$2;\nvar list$1$2 = list_1$2;\nvar Rule$3$2 = /*#__PURE__*/ function(Container$3$2) {\n _inherits(Rule2, Container$3$2);\n function Rule2(defaults) {\n var _this;\n _this = Container$3$2.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule2, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$2.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule2;\n}(Container$3$2);\nvar rule$2 = Rule$3$2;\nRule$3$2.default = Rule$3$2;\nContainer$3$2.registerRule(Rule$3$2);\nvar Declaration$2$2 = declaration$2;\nvar tokenizer22 = tokenize$2;\nvar Comment$2$2 = comment$2;\nvar AtRule$2$2 = atRule$2;\nvar Root$4$2 = root$2;\nvar Rule$2$2 = rule$2;\nvar SAFE_COMMENT_NEIGHBOR$2 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$2(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$2 = /*#__PURE__*/ function() {\n function Parser2(input2) {\n this.input = input2;\n this.root = new Root$4$2();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser2.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer22(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$2(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$2[prev] && !SAFE_COMMENT_NEIGHBOR$2[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser2;\n}();\nvar parser$2 = Parser$1$2;\nvar Container$2$2 = container$2;\nvar Parser22 = parser$2;\nvar Input$2$2 = input$2;\nfunction parse$3$2(css, opts) {\n var input2 = new Input$2$2(css, opts);\n var parser2 = new Parser22(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$2 = parse$3$2;\nparse$3$2.default = parse$3$2;\nContainer$2$2.registerParse(parse$3$2);\nvar isClean$4 = symbols$2.isClean, my$4 = symbols$2.my;\nvar MapGenerator$1$2 = mapGenerator$2;\nvar stringify$2$2 = stringify_1$2;\nvar Container$1$2 = container$2;\nvar Document$2$2 = document$1$2;\nvar warnOnce$1$2 = warnOnce$2$2;\nvar Result$2$2 = result$2;\nvar parse$2$2 = parse_1$2;\nvar Root$3$2 = root$2;\nvar TYPE_TO_CLASS_NAME$2 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$2 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$2 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$2 = 0;\nfunction isPromise$2(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$2(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$2[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$2,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$2,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$2(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$2,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$2,\n \"RootExit\"\n ];\n } else {\n events = getEvents$2(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$2(node2) {\n node2[isClean$4] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$2(i2);\n });\n return node2;\n}\nvar postcss$2$2 = {};\nvar LazyResult$2$2 = /*#__PURE__*/ function() {\n function LazyResult2(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$2(css);\n } else if (_instanceof(css, LazyResult2) || _instanceof(css, Result$2$2)) {\n root2 = cleanMarks$2(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$4]) {\n Container$1$2.rebuild(root2);\n }\n }\n this.result = new Result$2$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$2, {\n postcss: postcss$2$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$2[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$2[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$2(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$4]) return [\n 3,\n 14\n ];\n root2[isClean$4] = true;\n stack = [\n toStack$2(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$2(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$2(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$2(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$4]){\n root2[isClean$4] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$4]) {\n child[isClean$4] = true;\n stack.push(toStack$2(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$2) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$4] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$4] = true;\n var events = getEvents$2(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$2) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$4]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult2;\n}();\nLazyResult$2$2.registerPostcss = function(dependant) {\n postcss$2$2 = dependant;\n};\nvar lazyResult$2 = LazyResult$2$2;\nLazyResult$2$2.default = LazyResult$2$2;\nRoot$3$2.registerLazyResult(LazyResult$2$2);\nDocument$2$2.registerLazyResult(LazyResult$2$2);\nvar MapGenerator22 = mapGenerator$2;\nvar stringify$1$2 = stringify_1$2;\nvar warnOnce22 = warnOnce$2$2;\nvar parse$1$2 = parse_1$2;\nvar Result$1$2 = result$2;\nvar NoWorkResult$1$2 = /*#__PURE__*/ function() {\n function NoWorkResult2(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$2;\n this.result = new Result$1$2(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator22(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce22(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$2;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult2;\n}();\nvar noWorkResult$2 = NoWorkResult$1$2;\nNoWorkResult$1$2.default = NoWorkResult$1$2;\nvar NoWorkResult22 = noWorkResult$2;\nvar LazyResult$1$2 = lazyResult$2;\nvar Document$1$2 = document$1$2;\nvar Root$2$2 = root$2;\nvar Processor$1$2 = /*#__PURE__*/ function() {\n function Processor2(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor2.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult22(this, css, opts);\n } else {\n return new LazyResult$1$2(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor2;\n}();\nvar processor$2 = Processor$1$2;\nProcessor$1$2.default = Processor$1$2;\nRoot$2$2.registerProcessor(Processor$1$2);\nDocument$1$2.registerProcessor(Processor$1$2);\nvar Declaration$1$2 = declaration$2;\nvar PreviousMap22 = previousMap$2;\nvar Comment$1$2 = comment$2;\nvar AtRule$1$2 = atRule$2;\nvar Input$1$2 = input$2;\nvar Root$1$2 = root$2;\nvar Rule$1$2 = rule$2;\nfunction fromJSON$1$2(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$2(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$2.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap22.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$2(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$2(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$2(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$2(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$2(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$2(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$2 = fromJSON$1$2;\nfromJSON$1$2.default = fromJSON$1$2;\nvar CssSyntaxError22 = cssSyntaxError$2;\nvar Declaration22 = declaration$2;\nvar LazyResult22 = lazyResult$2;\nvar Container22 = container$2;\nvar Processor22 = processor$2;\nvar stringify$6 = stringify_1$2;\nvar fromJSON$3 = fromJSON_1$2;\nvar Document222 = document$1$2;\nvar Warning22 = warning$2;\nvar Comment22 = comment$2;\nvar AtRule22 = atRule$2;\nvar Result22 = result$2;\nvar Input22 = input$2;\nvar parse$6 = parse_1$2;\nvar list$4 = list_1$2;\nvar Rule22 = rule$2;\nvar Root22 = root$2;\nvar Node22 = node$2;\nfunction postcss$4() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor22(plugins);\n}\npostcss$4.plugin = function plugin2(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor22().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$4([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$4.stringify = stringify$6;\npostcss$4.parse = parse$6;\npostcss$4.fromJSON = fromJSON$3;\npostcss$4.list = list$4;\npostcss$4.comment = function(defaults) {\n return new Comment22(defaults);\n};\npostcss$4.atRule = function(defaults) {\n return new AtRule22(defaults);\n};\npostcss$4.decl = function(defaults) {\n return new Declaration22(defaults);\n};\npostcss$4.rule = function(defaults) {\n return new Rule22(defaults);\n};\npostcss$4.root = function(defaults) {\n return new Root22(defaults);\n};\npostcss$4.document = function(defaults) {\n return new Document222(defaults);\n};\npostcss$4.CssSyntaxError = CssSyntaxError22;\npostcss$4.Declaration = Declaration22;\npostcss$4.Container = Container22;\npostcss$4.Processor = Processor22;\npostcss$4.Document = Document222;\npostcss$4.Comment = Comment22;\npostcss$4.Warning = Warning22;\npostcss$4.AtRule = AtRule22;\npostcss$4.Result = Result22;\npostcss$4.Input = Input22;\npostcss$4.Rule = Rule22;\npostcss$4.Root = Root22;\npostcss$4.Node = Node22;\nLazyResult22.registerPostcss(postcss$4);\nvar postcss_1$2 = postcss$4;\npostcss$4.default = postcss$4;\nvar postcss$1$2 = /* @__PURE__ */ getDefaultExportFromCjs$2(postcss_1$2);\npostcss$1$2.stringify;\npostcss$1$2.fromJSON;\npostcss$1$2.plugin;\npostcss$1$2.parse;\npostcss$1$2.list;\npostcss$1$2.document;\npostcss$1$2.comment;\npostcss$1$2.atRule;\npostcss$1$2.rule;\npostcss$1$2.decl;\npostcss$1$2.root;\npostcss$1$2.CssSyntaxError;\npostcss$1$2.Declaration;\npostcss$1$2.Container;\npostcss$1$2.Processor;\npostcss$1$2.Document;\npostcss$1$2.Comment;\npostcss$1$2.Warning;\npostcss$1$2.AtRule;\npostcss$1$2.Result;\npostcss$1$2.Input;\npostcss$1$2.Rule;\npostcss$1$2.Root;\npostcss$1$2.Node;\nvar BaseRRNode = /*#__PURE__*/ function() {\n function BaseRRNode() {\n for(var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++){\n _args[_key] = arguments[_key];\n }\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n var _proto = BaseRRNode.prototype;\n _proto.contains = function contains(node2) {\n if (!_instanceof(node2, BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while(node2.parentNode){\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.appendChild = function appendChild(_newChild) {\n throw new Error(\"RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.insertBefore = function insertBefore(_newChild, _refChild) {\n throw new Error(\"RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.removeChild = function removeChild(_node) {\n throw new Error(\"RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n _proto.toString = function toString() {\n return \"RRNode\";\n };\n _create_class(BaseRRNode, [\n {\n key: \"childNodes\",\n get: function get() {\n var childNodes2 = [];\n var childIterator = this.firstChild;\n while(childIterator){\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n }\n ]);\n return BaseRRNode;\n}();\nvar testableAccessors$2 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$2 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$2 = {};\nvar isAngularZonePresent$2 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$2(key) {\n if (untaintedBasePrototype$2[key]) return untaintedBasePrototype$2[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$2 ? testableAccessors$2[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$2 ? testableMethods$2[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$2()) {\n untaintedBasePrototype$2[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$2[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$2 = {};\nfunction getUntaintedAccessor$2(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$2[cacheKey]) return untaintedAccessorCache$2[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$2[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$2 = {};\nfunction getUntaintedMethod$2(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$2[cacheKey]) return untaintedMethodCache$2[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$2[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"textContent\");\n}\nfunction contains$2(n2, other) {\n return getUntaintedMethod$2(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$2(n2) {\n return getUntaintedMethod$2(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$2(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$2(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$2(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$2(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$2(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$2() {\n return getUntaintedPrototype$2(\"MutationObserver\").constructor;\n}\nfunction patch$2(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$2 = {\n childNodes: childNodes$2,\n parentNode: parentNode$2,\n parentElement: parentElement$2,\n textContent: textContent$2,\n contains: contains$2,\n getRootNode: getRootNode$2,\n host: host$2,\n styleSheets: styleSheets$2,\n shadowRoot: shadowRoot$2,\n querySelector: querySelector$2,\n querySelectorAll: querySelectorAll$2,\n mutationObserver: mutationObserverCtor$2,\n patch: patch$2\n};\nfunction on(type, fn, target) {\n if (target === void 0) target = document;\n var options = {\n capture: true,\n passive: true\n };\n target.addEventListener(type, fn, options);\n return function() {\n return target.removeEventListener(type, fn, options);\n };\n}\nvar DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nvar _mirror = {\n map: {},\n getId: function getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode: function getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap: function removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has: function has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset: function reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get: function get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options) {\n if (options === void 0) options = {};\n var timeout = null;\n var previous = 0;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n var context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(function() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win) {\n if (win === void 0) win = window;\n var original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked ? d : {\n set: function set(value) {\n var _this = this;\n setTimeout(function() {\n d.set.call(_this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n });\n return function() {\n return hookSetter(target, key, original || {}, true);\n };\n}\nvar nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = function() {\n return /* @__PURE__ */ new Date().getTime();\n };\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n var doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index$2.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index$2.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n var el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index$2.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n var el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex$1(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {}\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n var id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n var parent = index$2.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win) {\n if (win === void 0) win = window;\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2));\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (_instanceof(n2, BaseRRNode) && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index$2.shadowRoot(n2));\n}\nvar StyleSheetMirror = /*#__PURE__*/ function() {\n function StyleSheetMirror() {\n __publicField$1(this, \"id\", 1);\n __publicField$1(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n var _proto = StyleSheetMirror.prototype;\n _proto.getId = function getId(stylesheet) {\n var _this_styleIDMap_get;\n return (_this_styleIDMap_get = this.styleIDMap.get(stylesheet)) != null ? _this_styleIDMap_get : -1;\n };\n _proto.has = function has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n };\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */ _proto.add = function add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n var newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n };\n _proto.getStyle = function getStyle(id) {\n return this.idStyleMap.get(id) || null;\n };\n _proto.reset = function reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n };\n _proto.generateId = function generateId() {\n return this.id++;\n };\n _proto.remove = function remove(stylesheet) {\n var id = this.styleIDMap.get(stylesheet);\n if (id !== void 0) {\n this.styleIDMap.delete(stylesheet);\n this.idStyleMap.delete(id);\n return true;\n }\n return false;\n };\n return StyleSheetMirror;\n}();\nfunction getShadowHost(n2) {\n var _a2;\n var shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index$2.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index$2.host(index$2.getRootNode(n2))) shadowHost = index$2.host(index$2.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n var rootShadowHost = n2;\n var shadowHost;\n while(shadowHost = getShadowHost(rootShadowHost))rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n var shadowHost = getRootShadowHost(n2);\n return index$2.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n return index$2.contains(doc, n2) || shadowHostInDom(n2);\n}\nvar EventType = /* @__PURE__ */ function(EventType2) {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n}(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ function(IncrementalSource2) {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n}(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ function(MouseInteractions2) {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n}(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ function(PointerTypes2) {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n}(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ function(CanvasContext2) {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n}(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ function(MediaInteractions2) {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n}(MediaInteractions || {});\nvar NodeType = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nvar DoubleLinkedList = /*#__PURE__*/ function() {\n function DoubleLinkedList() {\n __publicField$1(this, \"length\", 0);\n __publicField$1(this, \"head\", null);\n __publicField$1(this, \"tail\", null);\n }\n var _proto = DoubleLinkedList.prototype;\n _proto.get = function get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n var current = this.head;\n for(var index2 = 0; index2 < position; index2++){\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n };\n _proto.addNode = function addNode(n2) {\n var node2 = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node2;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n var current = n2.previousSibling.__ln.next;\n node2.next = current;\n node2.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node2;\n if (current) {\n current.previous = node2;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n var current1 = n2.nextSibling.__ln.previous;\n node2.previous = current1;\n node2.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node2;\n if (current1) {\n current1.next = node2;\n }\n } else {\n if (this.head) {\n this.head.previous = node2;\n }\n node2.next = this.head;\n this.head = node2;\n }\n if (node2.next === null) {\n this.tail = node2;\n }\n this.length++;\n };\n _proto.removeNode = function removeNode(n2) {\n var current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n };\n return DoubleLinkedList;\n}();\nvar moveKey = function(id, parentId) {\n return id + \"@\" + parentId;\n};\nvar MutationBuffer = /*#__PURE__*/ function() {\n function MutationBuffer() {\n var _this = this;\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"texts\", []);\n __publicField$1(this, \"attributes\", []);\n __publicField$1(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"removes\", []);\n __publicField$1(this, \"mapRemoves\", []);\n __publicField$1(this, \"movedMap\", {});\n /**\n * the browser MutationObserver emits multiple mutations after\n * a delay for performance reasons, making tracing added nodes hard\n * in our `processMutations` callback function.\n * For example, if we append an element el_1 into body, and then append\n * another element el_2 into el_1, these two mutations may be passed to the\n * callback function together when the two operations were done.\n * Generally we need to trace child nodes of newly added nodes, but in this\n * case if we count el_2 as el_1's child node in the first mutation record,\n * then we will count el_2 again in the second mutation record which was\n * duplicated.\n * To avoid of duplicate counting added nodes, we use a Set to store\n * added nodes and its child nodes during iterate mutation records. Then\n * collect added nodes from the Set which have no duplicate copy. But\n * this also causes newly added nodes will not be serialized with id ASAP,\n * which means all the id related calculation should be lazy too.\n */ __publicField$1(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"removesSubTreeCache\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"blockClass\");\n __publicField$1(this, \"blockSelector\");\n __publicField$1(this, \"maskTextClass\");\n __publicField$1(this, \"maskTextSelector\");\n __publicField$1(this, \"inlineStylesheet\");\n __publicField$1(this, \"maskInputOptions\");\n __publicField$1(this, \"maskTextFn\");\n __publicField$1(this, \"maskInputFn\");\n __publicField$1(this, \"keepIframeSrcFn\");\n __publicField$1(this, \"recordCanvas\");\n __publicField$1(this, \"inlineImages\");\n __publicField$1(this, \"slimDOMOptions\");\n __publicField$1(this, \"dataURLOptions\");\n __publicField$1(this, \"doc\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"iframeManager\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"shadowDomManager\");\n __publicField$1(this, \"canvasManager\");\n __publicField$1(this, \"processedNodeManager\");\n __publicField$1(this, \"unattachedDoc\");\n __publicField$1(this, \"processMutations\", function(mutations) {\n mutations.forEach(_this.processMutation);\n _this.emit();\n });\n __publicField$1(this, \"emit\", function() {\n if (_this.frozen || _this.locked) {\n return;\n }\n var adds = [];\n var addedIds = /* @__PURE__ */ new Set();\n var addList = new DoubleLinkedList();\n var getNextId = function(n2) {\n var ns = n2;\n var nextId = IGNORED_NODE;\n while(nextId === IGNORED_NODE){\n ns = ns && ns.nextSibling;\n nextId = ns && _this.mirror.getId(ns);\n }\n return nextId;\n };\n var pushAdd = function(n2) {\n var parent = index$2.parentNode(n2);\n if (!parent || !inDom(n2)) {\n return;\n }\n var cssCaptured = false;\n if (n2.nodeType === Node.TEXT_NODE) {\n var parentTag = parent.tagName;\n if (parentTag === \"TEXTAREA\") {\n return;\n } else if (parentTag === \"STYLE\" && _this.addedSet.has(parent)) {\n cssCaptured = true;\n }\n }\n var parentId = isShadowRoot(parent) ? _this.mirror.getId(getShadowHost(n2)) : _this.mirror.getId(parent);\n var nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n var sn = serializeNodeWithId(n2, {\n doc: _this.doc,\n mirror: _this.mirror,\n blockClass: _this.blockClass,\n blockSelector: _this.blockSelector,\n maskTextClass: _this.maskTextClass,\n maskTextSelector: _this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: _this.inlineStylesheet,\n maskInputOptions: _this.maskInputOptions,\n maskTextFn: _this.maskTextFn,\n maskInputFn: _this.maskInputFn,\n slimDOMOptions: _this.slimDOMOptions,\n dataURLOptions: _this.dataURLOptions,\n recordCanvas: _this.recordCanvas,\n inlineImages: _this.inlineImages,\n onSerialize: function(currentN) {\n if (isSerializedIframe(currentN, _this.mirror)) {\n _this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, _this.mirror)) {\n _this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n2)) {\n _this.shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), _this.doc);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n _this.iframeManager.attachIframe(iframe, childSn);\n _this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(link, childSn) {\n _this.stylesheetManager.attachLinkElement(link, childSn);\n },\n cssCaptured: cssCaptured\n });\n if (sn) {\n adds.push({\n parentId: parentId,\n nextId: nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while(_this.mapRemoves.length){\n var removedNode = _this.mapRemoves.shift();\n _this.cleanupRemovedNode(removedNode);\n _this.mirror.removeNodeFromMap(removedNode);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(_this.movedSet), _step; !(_step = _iterator()).done;){\n var n2 = _step.value;\n if (isParentRemoved(_this.removesSubTreeCache, n2, _this.mirror) && !_this.movedSet.has(index$2.parentNode(n2))) {\n continue;\n }\n pushAdd(n2);\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(_this.addedSet), _step1; !(_step1 = _iterator1()).done;){\n var n21 = _step1.value;\n if (!isAncestorInSet(_this.droppedSet, n21) && !isParentRemoved(_this.removesSubTreeCache, n21, _this.mirror)) {\n pushAdd(n21);\n } else if (isAncestorInSet(_this.movedSet, n21)) {\n pushAdd(n21);\n } else {\n _this.droppedSet.add(n21);\n }\n }\n var candidate = null;\n while(addList.length){\n var node2 = null;\n if (candidate) {\n var parentId = _this.mirror.getId(index$2.parentNode(candidate.value));\n var nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node2 = candidate;\n }\n }\n if (!node2) {\n var tailNode = addList.tail;\n while(tailNode){\n var _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n var parentId1 = _this.mirror.getId(index$2.parentNode(_node.value));\n var nextId1 = getNextId(_node.value);\n if (nextId1 === -1) continue;\n else if (parentId1 !== -1) {\n node2 = _node;\n break;\n } else {\n var unhandledNode = _node.value;\n var parent = index$2.parentNode(unhandledNode);\n if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n var shadowHost = index$2.host(parent);\n var parentId2 = _this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node2 = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node2) {\n while(addList.head){\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node2.previous;\n addList.removeNode(node2.value);\n pushAdd(node2.value);\n }\n var payload = {\n texts: _this.texts.map(function(text) {\n var n2 = text.node;\n var parent = index$2.parentNode(n2);\n if (parent && parent.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(parent);\n }\n return {\n id: _this.mirror.getId(n2),\n value: text.value\n };\n }).filter(function(text) {\n return !addedIds.has(text.id);\n }).filter(function(text) {\n return _this.mirror.has(text.id);\n }),\n attributes: _this.attributes.map(function(attribute) {\n var attributes = attribute.attributes;\n if (typeof attributes.style === \"string\") {\n var diffAsStr = JSON.stringify(attribute.styleDiff);\n var unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: _this.mirror.getId(attribute.node),\n attributes: attributes\n };\n }).filter(function(attribute) {\n return !addedIds.has(attribute.id);\n }).filter(function(attribute) {\n return _this.mirror.has(attribute.id);\n }),\n removes: _this.removes,\n adds: adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n _this.texts = [];\n _this.attributes = [];\n _this.attributeMap = /* @__PURE__ */ new WeakMap();\n _this.removes = [];\n _this.addedSet = /* @__PURE__ */ new Set();\n _this.movedSet = /* @__PURE__ */ new Set();\n _this.droppedSet = /* @__PURE__ */ new Set();\n _this.removesSubTreeCache = /* @__PURE__ */ new Set();\n _this.movedMap = {};\n _this.mutationCb(payload);\n });\n __publicField$1(this, \"genTextAreaValueMutation\", function(textarea) {\n var item = _this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(textarea, item);\n }\n var value = Array.from(index$2.childNodes(textarea), function(cn) {\n return index$2.textContent(cn) || \"\";\n }).join(\"\");\n item.attributes.value = maskInputValue({\n element: textarea,\n maskInputOptions: _this.maskInputOptions,\n tagName: textarea.tagName,\n type: getInputType(textarea),\n value: value,\n maskInputFn: _this.maskInputFn\n });\n });\n __publicField$1(this, \"processMutation\", function(m) {\n if (isIgnored(m.target, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n switch(m.type){\n case \"characterData\":\n {\n var value = index$2.textContent(m.target);\n if (!isBlocked(m.target, _this.blockClass, _this.blockSelector, false) && value !== m.oldValue) {\n _this.texts.push({\n value: needMaskingText(m.target, _this.maskTextClass, _this.maskTextSelector, true) && value ? _this.maskTextFn ? _this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\":\n {\n var target = m.target;\n var attributeName = m.attributeName;\n var value1 = m.target.getAttribute(attributeName);\n if (attributeName === \"value\" || attributeName === \"placeholder\") {\n var type = getInputType(target);\n value1 = maskInputValue({\n element: target,\n maskInputOptions: _this.maskInputOptions,\n tagName: target.tagName,\n type: type,\n value: value1,\n maskInputFn: _this.maskInputFn\n });\n }\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || value1 === m.oldValue) {\n return;\n }\n var item = _this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !_this.keepIframeSrcFn(value1)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(_this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value1);\n if (attributeName === \"style\") {\n if (!_this.unattachedDoc) {\n try {\n _this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n _this.unattachedDoc = _this.doc;\n }\n }\n var old = _this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(target.style)), _step; !(_step = _iterator()).done;){\n var pname = _step.value;\n var newValue = target.style.getPropertyValue(pname);\n var newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [\n newValue,\n newPriority\n ];\n }\n } else {\n item._unchangedStyles[pname] = [\n newValue,\n newPriority\n ];\n }\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(old.style)), _step1; !(_step1 = _iterator1()).done;){\n var pname1 = _step1.value;\n if (target.style.getPropertyValue(pname1) === \"\") {\n item.styleDiff[pname1] = false;\n }\n }\n } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n if (target.matches(\"dialog:modal\")) {\n item.attributes[\"rr_open_mode\"] = \"modal\";\n } else {\n item.attributes[\"rr_open_mode\"] = \"non-modal\";\n }\n }\n }\n break;\n }\n case \"childList\":\n {\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, true)) return;\n if (m.target.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach(function(n2) {\n return _this.genAdds(n2, m.target);\n });\n m.removedNodes.forEach(function(n2) {\n var nodeId = _this.mirror.getId(n2);\n var parentId = isShadowRoot(m.target) ? _this.mirror.getId(index$2.host(m.target)) : _this.mirror.getId(m.target);\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || isIgnored(n2, _this.mirror, _this.slimDOMOptions) || !isSerialized(n2, _this.mirror)) {\n return;\n }\n if (_this.addedSet.has(n2)) {\n deepDelete(_this.addedSet, n2);\n _this.droppedSet.add(n2);\n } else if (_this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, _this.mirror)) ;\n else if (_this.movedSet.has(n2) && _this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(_this.movedSet, n2);\n } else {\n _this.removes.push({\n parentId: parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n processRemoves(n2, _this.removesSubTreeCache);\n }\n _this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n /**\n * Make sure you check if `n`'s parent is blocked before calling this function\n * */ __publicField$1(this, \"genAdds\", function(n2, target) {\n if (_this.processedNodeManager.inOtherBuffer(n2, _this)) return;\n if (_this.addedSet.has(n2) || _this.movedSet.has(n2)) return;\n if (_this.mirror.hasNode(n2)) {\n if (isIgnored(n2, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n _this.movedSet.add(n2);\n var targetId = null;\n if (target && _this.mirror.hasNode(target)) {\n targetId = _this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n _this.movedMap[moveKey(_this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n _this.addedSet.add(n2);\n _this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, _this.blockClass, _this.blockSelector, false)) {\n index$2.childNodes(n2).forEach(function(childN) {\n return _this.genAdds(childN);\n });\n if (hasShadowRoot(n2)) {\n index$2.childNodes(index$2.shadowRoot(n2)).forEach(function(childN) {\n _this.processedNodeManager.add(childN, _this);\n _this.genAdds(childN, n2);\n });\n }\n }\n });\n __publicField$1(this, \"cleanupRemovedNode\", function(node2) {\n if (node2.nodeName === \"IFRAME\") {\n try {\n _this.iframeManager.removeIframe(node2);\n } catch (e2) {}\n } else {\n try {\n _this.stylesheetManager.cleanupStylesheetsForRemovedNode(node2);\n } catch (e2) {}\n }\n node2.childNodes.forEach(function(child) {\n _this.cleanupRemovedNode(child);\n });\n });\n }\n var _proto = MutationBuffer.prototype;\n _proto.init = function init(options) {\n var _this = this;\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach(function(key) {\n _this[key] = options[key];\n });\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n };\n _proto.isFrozen = function isFrozen() {\n return this.frozen;\n };\n _proto.lock = function lock() {\n this.locked = true;\n this.canvasManager.lock();\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n };\n _proto.reset = function reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n };\n _proto.getDoc = function getDoc() {\n return this.doc;\n };\n return MutationBuffer;\n}();\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n index$2.childNodes(n2).forEach(function(childN) {\n return deepDelete(addsSet, childN);\n });\n}\nfunction processRemoves(n2, cache) {\n var queue = [\n n2\n ];\n while(queue.length){\n var next = queue.pop();\n if (cache.has(next)) continue;\n cache.add(next);\n index$2.childNodes(next).forEach(function(n22) {\n return queue.push(n22);\n });\n }\n return;\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.size === 0) return false;\n return _isParentRemoved(removes, n2);\n}\nfunction _isParentRemoved(removes, n2, _mirror2) {\n var node2 = index$2.parentNode(n2);\n if (!node2) return false;\n return removes.has(node2);\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0) return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n var parent = index$2.parentNode(n2);\n if (!parent) {\n return false;\n }\n if (set.has(parent)) {\n return true;\n }\n return _isAncestorInSet(set, parent);\n}\nvar errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nvar callbackWrapper = function(cb) {\n if (!errorHandler) {\n return cb;\n }\n var rrwebWrapped = function() {\n for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){\n rest[_key] = arguments[_key];\n }\n try {\n return cb.apply(void 0, [].concat(rest));\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nvar mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n var path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch (e) {}\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n var mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n var observer = new (mutationObserverCtor$2())(callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer)));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction removeMutationBufferForDoc(doc) {\n for(var i2 = mutationBuffers.length - 1; i2 >= 0; i2--){\n var buffer = mutationBuffers[i2];\n if (buffer.getDoc() === doc) {\n mutationBuffers.splice(i2, 1);\n }\n }\n}\nfunction initMoveObserver(param) {\n var mousemoveCb = param.mousemoveCb, sampling = param.sampling, doc = param.doc, mirror2 = param.mirror;\n if (sampling.mousemove === false) {\n return function() {};\n }\n var threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n var callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n var positions = [];\n var timeBaseline;\n var wrappedCb = throttle(callbackWrapper(function(source) {\n var totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map(function(p) {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n var _ref = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt, clientX = _ref.clientX, clientY = _ref.clientY;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(typeof DragEvent !== \"undefined\" && _instanceof(evt, DragEvent) ? IncrementalSource.Drag : _instanceof(evt, MouseEvent) ? IncrementalSource.MouseMove : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false\n }));\n var handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initMouseInteractionObserver(param) {\n var mouseInteractionCb = param.mouseInteractionCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n if (sampling.mouseInteraction === false) {\n return function() {};\n }\n var disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n var handlers = [];\n var currentPointerType = null;\n var getHandler = function(eventKey) {\n return function(event) {\n var target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var pointerType = null;\n var thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch(event.pointerType){\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen) ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n var e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n var id = mirror2.getId(target);\n var clientX = e2.clientX, clientY = e2.clientY;\n callbackWrapper(mouseInteractionCb)(_extends({\n type: MouseInteractions[thisEventKey],\n id: id,\n x: clientX,\n y: clientY\n }, pointerType !== null && {\n pointerType: pointerType\n }));\n };\n };\n Object.keys(MouseInteractions).filter(function(key) {\n return Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false;\n }).forEach(function(eventKey) {\n var eventName = toLowerCase(eventKey);\n var handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch(MouseInteractions[eventKey]){\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\"mouse\", \"pointer\");\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initScrollObserver(param) {\n var scrollCb = param.scrollCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n var scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id: id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id: id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }), sampling.scroll || 100));\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver(param, param1) {\n var viewportResizeCb = param.viewportResizeCb;\n var win = param1.win;\n var lastH = -1;\n var lastW = -1;\n var updateDimension = callbackWrapper(throttle(callbackWrapper(function() {\n var height = getWindowHeight();\n var width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on(\"resize\", updateDimension, win);\n}\nvar INPUT_TAGS = [\n \"INPUT\",\n \"TEXTAREA\",\n \"SELECT\"\n];\nvar lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver(param) {\n var inputCb = param.inputCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, ignoreClass = param.ignoreClass, ignoreSelector = param.ignoreSelector, maskInputOptions = param.maskInputOptions, maskInputFn = param.maskInputFn, sampling = param.sampling, userTriggeredOnInput = param.userTriggeredOnInput;\n function eventHandler(event) {\n var target = getEventTarget(event);\n var userTriggered = event.isTrusted;\n var tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = index$2.parentElement(target);\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n var text = target.value;\n var isChecked = false;\n var type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions: maskInputOptions,\n tagName: tagName,\n type: type,\n value: text,\n maskInputFn: maskInputFn\n });\n }\n cbWithDedup(target, userTriggeredOnInput ? {\n text: text,\n isChecked: isChecked,\n userTriggered: userTriggered\n } : {\n text: text,\n isChecked: isChecked\n });\n var name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]').forEach(function(el) {\n if (el !== target) {\n var text2 = el.value;\n cbWithDedup(el, userTriggeredOnInput ? {\n text: text2,\n isChecked: !isChecked,\n userTriggered: false\n } : {\n text: text2,\n isChecked: !isChecked\n });\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n var lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n var id = mirror2.getId(target);\n callbackWrapper(inputCb)(_extends({}, v2, {\n id: id\n }));\n }\n }\n var events = sampling.input === \"last\" ? [\n \"change\"\n ] : [\n \"input\",\n \"change\"\n ];\n var handlers = events.map(function(eventName) {\n return on(eventName, callbackWrapper(eventHandler), doc);\n });\n var currentWindow = doc.defaultView;\n if (!currentWindow) {\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n }\n var propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, \"value\");\n var hookProperties = [\n [\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLInputElement.prototype,\n \"checked\"\n ],\n [\n currentWindow.HTMLSelectElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLTextAreaElement.prototype,\n \"value\"\n ],\n // Some UI library use selectedIndex to set select value\n [\n currentWindow.HTMLSelectElement.prototype,\n \"selectedIndex\"\n ],\n [\n currentWindow.HTMLOptionElement.prototype,\n \"selected\"\n ]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n var _handlers;\n (_handlers = handlers).push.apply(_handlers, [].concat(hookProperties.map(function(p) {\n return hookSetter(p[0], p[1], {\n set: function set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n });\n }\n }, false, currentWindow);\n })));\n }\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction getNestedCSSRulePositions(rule2) {\n var positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && _instanceof(childRule.parentRule, CSSGroupingRule) || hasNestedCSSRule(\"CSSMediaRule\") && _instanceof(childRule.parentRule, CSSMediaRule) || hasNestedCSSRule(\"CSSSupportsRule\") && _instanceof(childRule.parentRule, CSSSupportsRule) || hasNestedCSSRule(\"CSSConditionRule\") && _instanceof(childRule.parentRule, CSSConditionRule)) {\n var rules2 = Array.from(childRule.parentRule.cssRules);\n var index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n } else if (childRule.parentStyleSheet) {\n var rules21 = Array.from(childRule.parentStyleSheet.cssRules);\n var index21 = rules21.indexOf(childRule);\n pos.unshift(index21);\n }\n return pos;\n }\n return recurse(rule2, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n var id, styleId;\n if (!sheet) return {};\n if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n else styleId = styleMirror.getId(sheet);\n return {\n styleId: styleId,\n id: id\n };\n}\nfunction initStyleSheetObserver(param, param1) {\n var styleSheetRuleCb = param.styleSheetRuleCb, mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return function() {};\n }\n var insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2) {\n if (index2 === void 0) index2 = this.cssRules.length;\n var rule2 = selector + \" { \" + styleBlock + \" }\";\n return win.CSSStyleSheet.prototype.insertRule.apply(this, [\n rule2,\n index2\n ]);\n };\n var deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.removeRule = function(index2) {\n return win.CSSStyleSheet.prototype.deleteRule.apply(this, [\n index2\n ]);\n };\n var replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n var unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2 || 0\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n });\n return callbackWrapper(function() {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver(param, host2) {\n var mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var _a2, _b, _c;\n var hostId = null;\n if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n else hostId = mirror2.getId(index$2.host(host2));\n var patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n var originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(patchTarget == null ? void 0 : patchTarget.prototype, \"adoptedStyleSheets\") : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor) return function() {};\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: function get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set: function set(sheets) {\n var _a3;\n var result2 = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {}\n }\n return result2;\n }\n });\n return callbackWrapper(function() {\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver(param, param1) {\n var styleDeclarationCb = param.styleDeclarationCb, mirror2 = param.mirror, ignoreCSSAttributes = param.ignoreCSSAttributes, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n var setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0], value = argumentsList[1], priority = argumentsList[2];\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [\n property,\n value,\n priority\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n set: {\n property: property,\n value: value,\n priority: priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n var removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0];\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [\n property\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n remove: {\n property: property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n return callbackWrapper(function() {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver(param) {\n var mediaInteractionCb = param.mediaInteractionCb, blockClass = param.blockClass, blockSelector = param.blockSelector, mirror2 = param.mirror, sampling = param.sampling, doc = param.doc;\n var handler = callbackWrapper(function(type) {\n return throttle(callbackWrapper(function(event) {\n var target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var currentTime = target.currentTime, volume = target.volume, muted = target.muted, playbackRate = target.playbackRate, loop = target.loop;\n mediaInteractionCb({\n type: type,\n id: mirror2.getId(target),\n currentTime: currentTime,\n volume: volume,\n muted: muted,\n playbackRate: playbackRate,\n loop: loop\n });\n }), sampling.media || 500);\n });\n var handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initFontObserver(param) {\n var fontCb = param.fontCb, doc = param.doc;\n var win = doc.defaultView;\n if (!win) {\n return function() {};\n }\n var handlers = [];\n var fontMap = /* @__PURE__ */ new WeakMap();\n var originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n var fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family: family,\n buffer: typeof source !== \"string\",\n descriptors: descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n var restoreHandler = patch$2(doc.fonts, \"add\", function(original) {\n return function(fontFace) {\n setTimeout(callbackWrapper(function() {\n var p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [\n fontFace\n ]);\n };\n });\n handlers.push(function() {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initSelectionObserver(param) {\n var doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, selectionCb = param.selectionCb;\n var collapsed = true;\n var updateSelection = callbackWrapper(function() {\n var selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n collapsed = selection.isCollapsed || false;\n var ranges = [];\n var count = selection.rangeCount || 0;\n for(var i2 = 0; i2 < count; i2++){\n var range = selection.getRangeAt(i2);\n var startContainer = range.startContainer, startOffset = range.startOffset, endContainer = range.endContainer, endOffset = range.endOffset;\n var blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked) continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset: startOffset,\n end: mirror2.getId(endContainer),\n endOffset: endOffset\n });\n }\n selectionCb({\n ranges: ranges\n });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver(param) {\n var doc = param.doc, customElementCb = param.customElementCb;\n var win = doc.defaultView;\n if (!win || !win.customElements) return function() {};\n var restoreHandler = patch$2(win.customElements, \"define\", function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name: name\n }\n });\n } catch (e2) {\n console.warn(\"Custom element callback failed for \" + name);\n }\n return original.apply(this, [\n name,\n constructor,\n options\n ]);\n };\n });\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n var mutationCb = o2.mutationCb, mousemoveCb = o2.mousemoveCb, mouseInteractionCb = o2.mouseInteractionCb, scrollCb = o2.scrollCb, viewportResizeCb = o2.viewportResizeCb, inputCb = o2.inputCb, mediaInteractionCb = o2.mediaInteractionCb, styleSheetRuleCb = o2.styleSheetRuleCb, styleDeclarationCb = o2.styleDeclarationCb, canvasMutationCb = o2.canvasMutationCb, fontCb = o2.fontCb, selectionCb = o2.selectionCb, customElementCb = o2.customElementCb;\n o2.mutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mutation) {\n var _hooks;\n (_hooks = hooks).mutation.apply(_hooks, [].concat(p));\n }\n mutationCb.apply(void 0, [].concat(p));\n };\n o2.mousemoveCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mousemove) {\n var _hooks;\n (_hooks = hooks).mousemove.apply(_hooks, [].concat(p));\n }\n mousemoveCb.apply(void 0, [].concat(p));\n };\n o2.mouseInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mouseInteraction) {\n var _hooks;\n (_hooks = hooks).mouseInteraction.apply(_hooks, [].concat(p));\n }\n mouseInteractionCb.apply(void 0, [].concat(p));\n };\n o2.scrollCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.scroll) {\n var _hooks;\n (_hooks = hooks).scroll.apply(_hooks, [].concat(p));\n }\n scrollCb.apply(void 0, [].concat(p));\n };\n o2.viewportResizeCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.viewportResize) {\n var _hooks;\n (_hooks = hooks).viewportResize.apply(_hooks, [].concat(p));\n }\n viewportResizeCb.apply(void 0, [].concat(p));\n };\n o2.inputCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.input) {\n var _hooks;\n (_hooks = hooks).input.apply(_hooks, [].concat(p));\n }\n inputCb.apply(void 0, [].concat(p));\n };\n o2.mediaInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mediaInteaction) {\n var _hooks;\n (_hooks = hooks).mediaInteaction.apply(_hooks, [].concat(p));\n }\n mediaInteractionCb.apply(void 0, [].concat(p));\n };\n o2.styleSheetRuleCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleSheetRule) {\n var _hooks;\n (_hooks = hooks).styleSheetRule.apply(_hooks, [].concat(p));\n }\n styleSheetRuleCb.apply(void 0, [].concat(p));\n };\n o2.styleDeclarationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleDeclaration) {\n var _hooks;\n (_hooks = hooks).styleDeclaration.apply(_hooks, [].concat(p));\n }\n styleDeclarationCb.apply(void 0, [].concat(p));\n };\n o2.canvasMutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.canvasMutation) {\n var _hooks;\n (_hooks = hooks).canvasMutation.apply(_hooks, [].concat(p));\n }\n canvasMutationCb.apply(void 0, [].concat(p));\n };\n o2.fontCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.font) {\n var _hooks;\n (_hooks = hooks).font.apply(_hooks, [].concat(p));\n }\n fontCb.apply(void 0, [].concat(p));\n };\n o2.selectionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.selection) {\n var _hooks;\n (_hooks = hooks).selection.apply(_hooks, [].concat(p));\n }\n selectionCb.apply(void 0, [].concat(p));\n };\n o2.customElementCb = function() {\n for(var _len = arguments.length, c2 = new Array(_len), _key = 0; _key < _len; _key++){\n c2[_key] = arguments[_key];\n }\n if (hooks.customElement) {\n var _hooks;\n (_hooks = hooks).customElement.apply(_hooks, [].concat(c2));\n }\n customElementCb.apply(void 0, [].concat(c2));\n };\n}\nfunction initObservers(o2, hooks) {\n if (hooks === void 0) hooks = {};\n var currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return function() {};\n }\n mergeHooks(o2, hooks);\n var mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n var mousemoveHandler = initMoveObserver(o2);\n var mouseInteractionHandler = initMouseInteractionObserver(o2);\n var scrollHandler = initScrollObserver(o2);\n var viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n var inputHandler = initInputObserver(o2);\n var mediaInteractionHandler = initMediaInteractionObserver(o2);\n var styleSheetObserver = function() {};\n var adoptedStyleSheetObserver = function() {};\n var styleDeclarationObserver = function() {};\n var fontObserver = function() {};\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, {\n win: currentWindow\n });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n var selectionObserver = initSelectionObserver(o2);\n var customElementObserver = initCustomElementObserver(o2);\n var pluginHandlers = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(o2.plugins), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n pluginHandlers.push(plugin3.observer(plugin3.callback, currentWindow, plugin3.options));\n }\n return callbackWrapper(function() {\n mutationBuffers.forEach(function(b) {\n return b.reset();\n });\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype);\n}\nvar CrossOriginIframeMirror = /*#__PURE__*/ function() {\n function CrossOriginIframeMirror(generateIdFn) {\n __publicField$1(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n var _proto = CrossOriginIframeMirror.prototype;\n _proto.getId = function getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n var idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n var id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n };\n _proto.getIds = function getIds(iframe, remoteId) {\n var _this = this;\n var idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(function(id) {\n return _this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap);\n });\n };\n _proto.getRemoteId = function getRemoteId(iframe, id, map) {\n var remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\") return id;\n var remoteId = remoteIdToIdMap.get(id);\n if (!remoteId) return -1;\n return remoteId;\n };\n _proto.getRemoteIds = function getRemoteIds(iframe, ids) {\n var _this = this;\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map(function(id) {\n return _this.getRemoteId(iframe, id, remoteIdToIdMap);\n });\n };\n _proto.reset = function reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n };\n _proto.getIdToRemoteIdMap = function getIdToRemoteIdMap(iframe) {\n var idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n };\n _proto.getRemoteIdToIdMap = function getRemoteIdToIdMap(iframe) {\n var remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n };\n return CrossOriginIframeMirror;\n}();\nvar IframeManager = /*#__PURE__*/ function() {\n function IframeManager(options) {\n __publicField$1(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField$1(this, \"crossOriginIframeStyleMirror\");\n __publicField$1(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeContentDocumentMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeObserverCleanupMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"wrappedEmit\");\n __publicField$1(this, \"loadListener\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n var _proto = IframeManager.prototype;\n _proto.addIframe = function addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow) this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n };\n _proto.getIframeContentDocument = function getIframeContentDocument(iframeEl) {\n return this.iframeContentDocumentMap.get(iframeEl);\n };\n _proto.setObserverCleanup = function setObserverCleanup(iframeEl, cleanup) {\n this.iframeObserverCleanupMap.set(iframeEl, cleanup);\n };\n _proto.getObserverCleanup = function getObserverCleanup(iframeEl) {\n return this.iframeObserverCleanupMap.get(iframeEl);\n };\n _proto.removeIframe = function removeIframe(iframeEl) {\n var storedDoc = this.iframeContentDocumentMap.get(iframeEl);\n if (storedDoc) {\n this.stylesheetManager.cleanupStylesheetsForRemovedNode(storedDoc);\n this.mirror.removeNodeFromMap(storedDoc, true);\n }\n this.iframes.delete(iframeEl);\n this.iframeContentDocumentMap.delete(iframeEl);\n var observerCleanup = this.iframeObserverCleanupMap.get(iframeEl);\n if (observerCleanup) {\n try {\n observerCleanup();\n } catch (e2) {}\n this.iframeObserverCleanupMap.delete(iframeEl);\n }\n };\n _proto.addLoadListener = function addLoadListener(cb) {\n this.loadListener = cb;\n };\n _proto.attachIframe = function attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (iframeEl.contentDocument) {\n this.iframeContentDocumentMap.set(iframeEl, iframeEl.contentDocument);\n }\n if (this.recordCrossOriginIframes) (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\"message\", this.handleMessage.bind(this));\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0) this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n };\n _proto.handleMessage = function handleMessage(message) {\n var crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin) return;\n var iframeSourceWindow = message.source;\n if (!iframeSourceWindow) return;\n var iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl) return;\n var transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent) this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n };\n _proto.transformCrossOriginEvent = function transformCrossOriginEvent(iframeEl, e2) {\n var _this = this;\n var _a2;\n switch(e2.type){\n case EventType.FullSnapshot:\n {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n var rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded:\n {\n return false;\n }\n case EventType.Plugin:\n {\n return e2;\n }\n case EventType.Custom:\n {\n this.replaceIds(e2.data.payload, iframeEl, [\n \"id\",\n \"parentId\",\n \"previousId\",\n \"nextId\"\n ]);\n return e2;\n }\n case EventType.IncrementalSnapshot:\n {\n switch(e2.data.source){\n case IncrementalSource.Mutation:\n {\n e2.data.adds.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n _this.replaceIdOnNode(n2.node, iframeEl);\n var rootId = _this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && _this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"id\"\n ]);\n });\n e2.data.attributes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n e2.data.texts.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove:\n {\n e2.data.positions.forEach(function(p) {\n _this.replaceIds(p, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize:\n {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleId\"\n ]);\n return e2;\n }\n case IncrementalSource.Font:\n {\n return e2;\n }\n case IncrementalSource.Selection:\n {\n e2.data.ranges.forEach(function(range) {\n _this.replaceIds(range, iframeEl, [\n \"start\",\n \"end\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleIds\"\n ]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach(function(style) {\n _this.replaceStyleIds(style, iframeEl, [\n \"styleId\"\n ]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n };\n _proto.replace = function replace(iframeMirror, obj, iframeEl, keys) {\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n };\n _proto.replaceIds = function replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n };\n _proto.replaceStyleIds = function replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n };\n _proto.replaceIdOnNode = function replaceIdOnNode(node2, iframeEl) {\n var _this = this;\n this.replaceIds(node2, iframeEl, [\n \"id\",\n \"rootId\"\n ]);\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.replaceIdOnNode(child, iframeEl);\n });\n }\n };\n _proto.patchRootIdOnNode = function patchRootIdOnNode(node2, rootId) {\n var _this = this;\n if (node2.type !== NodeType.Document && !node2.rootId) node2.rootId = rootId;\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.patchRootIdOnNode(child, rootId);\n });\n }\n };\n return IframeManager;\n}();\nvar ShadowDomManager = /*#__PURE__*/ function() {\n function ShadowDomManager(options) {\n __publicField$1(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"scrollCb\");\n __publicField$1(this, \"bypassOptions\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n var _proto = ShadowDomManager.prototype;\n _proto.init = function init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n };\n _proto.addShadowRoot = function addShadowRoot(shadowRoot2, doc) {\n var _this = this;\n if (!isNativeShadowDom(shadowRoot2)) return;\n if (this.shadowDoms.has(shadowRoot2)) return;\n this.shadowDoms.add(shadowRoot2);\n var observer = initMutationObserver(_extends({}, this.bypassOptions, {\n doc: doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n }), shadowRoot2);\n this.restoreHandlers.push(function() {\n return observer.disconnect();\n });\n this.restoreHandlers.push(initScrollObserver(_extends({}, this.bypassOptions, {\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot2,\n mirror: this.mirror\n })));\n setTimeout(function() {\n if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0) _this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot2.adoptedStyleSheets, _this.mirror.getId(index$2.host(shadowRoot2)));\n _this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: _this.mirror,\n stylesheetManager: _this.bypassOptions.stylesheetManager\n }, shadowRoot2));\n }, 0);\n };\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */ _proto.observeAttachShadow = function observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n };\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */ _proto.patchAttachShadow = function patchAttachShadow(element, doc) {\n var manager = this;\n this.restoreHandlers.push(patch$2(element.prototype, \"attachShadow\", function(original) {\n return function(option) {\n var sRoot = original.call(this, option);\n var shadowRootEl = index$2.shadowRoot(this);\n if (shadowRootEl && inDom(this)) manager.addShadowRoot(shadowRootEl, doc);\n return sRoot;\n };\n }));\n };\n _proto.reset = function reset() {\n this.restoreHandlers.forEach(function(handler) {\n try {\n handler();\n } catch (e2) {}\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n };\n return ShadowDomManager;\n}();\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor(var i$1 = 0; i$1 < chars.length; i$1++){\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function encode(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for(i2 = 0; i2 < len; i2 += 3){\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nvar canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n var contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nvar saveWebGLVar = function(value, win, ctx) {\n if (!value || !(isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\")) return;\n var name = value.constructor.name;\n var list2 = variableListFor$1(ctx, name);\n var index2 = list2.indexOf(value);\n if (index2 === -1) {\n index2 = list2.length;\n list2.push(value);\n }\n return index2;\n};\nfunction serializeArg(value, win, ctx) {\n if (_instanceof(value, Array)) {\n return value.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n } else if (value === null) {\n return value;\n } else if (_instanceof(value, Float32Array) || _instanceof(value, Float64Array) || _instanceof(value, Int32Array) || _instanceof(value, Uint32Array) || _instanceof(value, Uint8Array) || _instanceof(value, Uint16Array) || _instanceof(value, Int16Array) || _instanceof(value, Int8Array) || _instanceof(value, Uint8ClampedArray)) {\n var name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n Object.values(value)\n ]\n };\n } else if (// SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n _instanceof(value, ArrayBuffer)) {\n var name1 = value.constructor.name;\n var base64 = encode(value);\n return {\n rr_type: name1,\n base64: base64\n };\n } else if (_instanceof(value, DataView)) {\n var name2 = value.constructor.name;\n return {\n rr_type: name2,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (_instanceof(value, HTMLImageElement)) {\n var name3 = value.constructor.name;\n var src = value.src;\n return {\n rr_type: name3,\n src: src\n };\n } else if (_instanceof(value, HTMLCanvasElement)) {\n var name4 = \"HTMLImageElement\";\n var src1 = value.toDataURL();\n return {\n rr_type: name4,\n src: src1\n };\n } else if (_instanceof(value, ImageData)) {\n var name5 = value.constructor.name;\n return {\n rr_type: name5,\n args: [\n serializeArg(value.data, win, ctx),\n value.width,\n value.height\n ]\n };\n } else if (isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\") {\n var name6 = value.constructor.name;\n var index2 = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name6,\n index: index2\n };\n }\n return value;\n}\nvar serializeArgs = function(args, win, ctx) {\n return args.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n};\nvar isInstanceOfWebGLObject = function(value, win) {\n var webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n var supportedWebGLConstructorNames = webGLConstructorNames.filter(function(name) {\n return typeof win[name] === \"function\";\n });\n return Boolean(supportedWebGLConstructorNames.find(function(name) {\n return _instanceof(value, win[name]);\n }));\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n var _loop = function() {\n var prop = _step.value;\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(win.CanvasRenderingContext2D.prototype, prop, function(original) {\n return function() {\n var _this = this;\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n setTimeout(function() {\n var recordArgs = serializeArgs(args, win, _this);\n cb(_this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props2D), _step; !(_step = _iterator()).done;)_loop();\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n var handlers = [];\n try {\n var restoreHandler = patch$2(win.HTMLCanvasElement.prototype, \"getContext\", function(original) {\n return function(contextType) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n var ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this)) this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\n \"webgl\",\n \"webgl2\"\n ].includes(ctxName)) {\n if (args[0] && _type_of(args[0]) === \"object\") {\n var contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [].concat([\n contextType\n ], args));\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n var _loop = function() {\n var prop = _step.value;\n if (//prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)) {\n return \"continue\";\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(prototype, prop, function(original) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var result2 = original.apply(this, args);\n saveWebGLVar(result2, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n var recordArgs = serializeArgs(args, win, this);\n var mutation = {\n type: type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result2;\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: type,\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props = Object.getOwnPropertyNames(prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props), _step; !(_step = _iterator()).done;)_loop();\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n var _handlers;\n var handlers = [];\n (_handlers = handlers).push.apply(_handlers, [].concat(patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, win)));\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n var _handlers1;\n (_handlers1 = handlers).push.apply(_handlers1, [].concat(patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, win)));\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nvar encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nvar decodeBase64 = function(base64) {\n return Uint8Array.from(atob(base64), function(c2) {\n return c2.charCodeAt(0);\n });\n};\nvar blob = typeof window !== \"undefined\" && window.Blob && new Blob([\n decodeBase64(encodedJs)\n], {\n type: \"text/javascript;charset=utf-8\"\n});\nfunction WorkerWrapper(options) {\n var objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL) throw \"\";\n var worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", function() {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\"data:text/javascript;base64,\" + encodedJs, {\n name: options == null ? void 0 : options.name\n });\n } finally{\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nvar CanvasManager = /*#__PURE__*/ function() {\n function CanvasManager(options) {\n var _this = this;\n __publicField$1(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"rafStamps\", {\n latestId: 0,\n invokeId: null\n });\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"resetObservers\");\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"processMutation\", function(target, mutation) {\n var newFrame = _this.rafStamps.invokeId && _this.rafStamps.latestId !== _this.rafStamps.invokeId;\n if (newFrame || !_this.rafStamps.invokeId) _this.rafStamps.invokeId = _this.rafStamps.latestId;\n if (!_this.pendingCanvasMutations.has(target)) {\n _this.pendingCanvasMutations.set(target, []);\n }\n _this.pendingCanvasMutations.get(target).push(mutation);\n });\n var _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? \"all\" : _options_sampling, win = options.win, blockClass = options.blockClass, blockSelector = options.blockSelector, recordCanvas = options.recordCanvas, dataURLOptions = options.dataURLOptions;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\") this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\") this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions: dataURLOptions\n });\n }\n var _proto = CanvasManager.prototype;\n _proto.reset = function reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n };\n _proto.lock = function lock() {\n this.locked = true;\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n };\n _proto.initCanvasFPSObserver = function initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n var _this = this;\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, true);\n var snapshotInProgressMap = /* @__PURE__ */ new Map();\n var worker = new WorkerWrapper();\n worker.onmessage = function(e2) {\n var id = e2.data.id;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data)) return;\n var _e2_data = e2.data, base64 = _e2_data.base64, type = _e2_data.type, width = _e2_data.width, height = _e2_data.height;\n _this.mutationCb({\n id: id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [\n 0,\n 0,\n width,\n height\n ]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [\n {\n rr_type: \"ArrayBuffer\",\n base64: base64\n }\n ],\n type: type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n var timeBetweenSnapshots = 1e3 / fps;\n var lastSnapshotTime = 0;\n var rafId;\n var getCanvas = function() {\n var matchedCanvas = [];\n win.document.querySelectorAll(\"canvas\").forEach(function(canvas) {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n return matchedCanvas;\n };\n var takeCanvasSnapshots = function(timestamp) {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n var _this1 = _this;\n getCanvas().forEach(/*#__PURE__*/ _async_to_generator(function(canvas) {\n var _a2, id, context, bitmap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n id = _this1.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id)) return [\n 2\n ];\n if (canvas.width === 0 || canvas.height === 0) return [\n 2\n ];\n snapshotInProgressMap.set(id, true);\n if ([\n \"webgl\",\n \"webgl2\"\n ].includes(canvas.__context)) {\n context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n return [\n 4,\n createImageBitmap(canvas)\n ];\n case 1:\n bitmap = _state.sent();\n worker.postMessage({\n id: id,\n bitmap: bitmap,\n width: canvas.width,\n height: canvas.height,\n dataURLOptions: options.dataURLOptions\n }, [\n bitmap\n ]);\n return [\n 2\n ];\n }\n });\n }));\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = function() {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n };\n _proto.initCanvasMutationObserver = function initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, false);\n var canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n var canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n this.resetObservers = function() {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n };\n _proto.startPendingCanvasMutationFlusher = function startPendingCanvasMutationFlusher() {\n var _this = this;\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.startRAFTimestamping = function startRAFTimestamping() {\n var _this = this;\n var setLatestRAFTimestamp = function(timestamp) {\n _this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n _proto.flushPendingCanvasMutations = function flushPendingCanvasMutations() {\n var _this = this;\n this.pendingCanvasMutations.forEach(function(_values, canvas) {\n var id = _this.mirror.getId(canvas);\n _this.flushPendingCanvasMutationFor(canvas, id);\n });\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.flushPendingCanvasMutationFor = function flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n var valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1) return;\n var values = valuesWithType.map(function(value) {\n value.type; var rest = _object_without_properties_loose(value, [\n \"type\"\n ]);\n return rest;\n });\n var type = valuesWithType[0].type;\n this.mutationCb({\n id: id,\n type: type,\n commands: values\n });\n this.pendingCanvasMutations.delete(canvas);\n };\n return CanvasManager;\n}();\nvar StylesheetManager = /*#__PURE__*/ function() {\n function StylesheetManager(options) {\n __publicField$1(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"adoptedStyleSheetCb\");\n __publicField$1(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n var _proto = StylesheetManager.prototype;\n _proto.attachLinkElement = function attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes) this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n };\n _proto.trackLinkElement = function trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl)) return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n };\n _proto.adoptStyleSheets = function adoptStyleSheets(sheets, hostId) {\n var _this, _loop = function() {\n var sheet = _step.value;\n var styleId = void 0;\n if (!_this.styleMirror.has(sheet)) {\n styleId = _this.styleMirror.add(sheet);\n styles.push({\n styleId: styleId,\n rules: Array.from(sheet.rules || CSSRule, function(r2, index2) {\n return {\n rule: stringifyRule(r2, sheet.href),\n index: index2\n };\n })\n });\n } else styleId = _this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n };\n if (sheets.length === 0) return;\n var adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n var styles = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(sheets), _step; !(_step = _iterator()).done;)_this = this, _loop();\n if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n };\n _proto.reset = function reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n };\n /**\n * Cleans up stylesheets associated with a removed node.\n *\n * @param removedNode - The node that was removed from the DOM.\n */ _proto.cleanupStylesheetsForRemovedNode = function cleanupStylesheetsForRemovedNode(removedNode) {\n var _this = this;\n try {\n if (removedNode.nodeType === Node.DOCUMENT_NODE) {\n var doc = removedNode;\n if (doc.adoptedStyleSheets) {\n for(var _iterator = _create_for_of_iterator_helper_loose(doc.adoptedStyleSheets), _step; !(_step = _iterator()).done;){\n var sheet = _step.value;\n this.styleMirror.remove(sheet);\n }\n }\n }\n if (removedNode.nodeName === \"STYLE\") {\n var styleEl = removedNode;\n if (styleEl.sheet) {\n this.styleMirror.remove(styleEl.sheet);\n }\n }\n if (removedNode.nodeName === \"LINK\" && removedNode.rel === \"stylesheet\") {\n var linkEl = removedNode;\n if (linkEl.sheet) {\n this.styleMirror.remove(linkEl.sheet);\n }\n }\n if (removedNode.childNodes) {\n removedNode.childNodes.forEach(function(child) {\n _this.cleanupStylesheetsForRemovedNode(child);\n });\n }\n } catch (e2) {}\n };\n // TODO: take snapshot on stylesheet reload by applying event listener\n _proto.trackStylesheetInLinkElement = function trackStylesheetInLinkElement(_linkEl) {};\n return StylesheetManager;\n}();\nvar ProcessedNodeManager = /*#__PURE__*/ function() {\n function ProcessedNodeManager() {\n __publicField$1(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"active\", false);\n }\n var _proto = ProcessedNodeManager.prototype;\n _proto.inOtherBuffer = function inOtherBuffer(node2, thisBuffer) {\n var buffers = this.nodeMap.get(node2);\n return buffers && Array.from(buffers).some(function(buffer) {\n return buffer !== thisBuffer;\n });\n };\n _proto.add = function add(node2, buffer) {\n var _this = this;\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(function() {\n _this.nodeMap = /* @__PURE__ */ new WeakMap();\n _this.active = false;\n });\n }\n this.nodeMap.set(node2, (this.nodeMap.get(node2) || /* @__PURE__ */ new Set()).add(buffer));\n };\n _proto.destroy = function destroy() {};\n return ProcessedNodeManager;\n}();\nfunction toOrigin(url) {\n try {\n var origin = new URL(url).origin;\n return origin !== \"null\" ? origin : null;\n } catch (e) {\n return null;\n }\n}\nfunction buildAllowedOriginSet(origins) {\n if (!Array.isArray(origins) || origins.length === 0) {\n throw new Error(\"[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.\");\n }\n var set = /* @__PURE__ */ new Set();\n for(var i2 = 0; i2 < origins.length; i2++){\n var entry = origins[i2];\n if (typeof entry !== \"string\") {\n throw new Error(\"[rrweb] allowedIframeOrigins[\" + i2 + \"] must be a string, got \" + (typeof entry === \"undefined\" ? \"undefined\" : _type_of(entry)) + \".\");\n }\n var origin = toOrigin(entry);\n if (origin) {\n set.add(origin);\n }\n }\n return Object.freeze(set);\n}\nvar wrappedEmit;\nvar takeFullSnapshot$1;\nvar canvasManager;\nvar recording = false;\ntry {\n if (Array.from([\n 1\n ], function(x2) {\n return x2 * 2;\n })[0] !== 2) {\n var cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nvar mirror = createMirror$2();\nfunction record(options) {\n if (options === void 0) options = {};\n var emit = options.emit, checkoutEveryNms = options.checkoutEveryNms, checkoutEveryNth = options.checkoutEveryNth, _options_blockClass = options.blockClass, blockClass = _options_blockClass === void 0 ? \"rr-block\" : _options_blockClass, _options_blockSelector = options.blockSelector, blockSelector = _options_blockSelector === void 0 ? null : _options_blockSelector, _options_ignoreClass = options.ignoreClass, ignoreClass = _options_ignoreClass === void 0 ? \"rr-ignore\" : _options_ignoreClass, _options_ignoreSelector = options.ignoreSelector, ignoreSelector = _options_ignoreSelector === void 0 ? null : _options_ignoreSelector, _options_maskTextClass = options.maskTextClass, maskTextClass = _options_maskTextClass === void 0 ? \"rr-mask\" : _options_maskTextClass, _options_maskTextSelector = options.maskTextSelector, maskTextSelector = _options_maskTextSelector === void 0 ? null : _options_maskTextSelector, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, maskAllInputs = options.maskAllInputs, _maskInputOptions = options.maskInputOptions, _slimDOMOptions = options.slimDOMOptions, maskInputFn = options.maskInputFn, maskTextFn = options.maskTextFn, hooks = options.hooks, packFn = options.packFn, _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? {} : _options_sampling, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, mousemoveWait = options.mousemoveWait, _options_recordDOM = options.recordDOM, recordDOM = _options_recordDOM === void 0 ? true : _options_recordDOM, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, _options_recordCrossOriginIframes = options.recordCrossOriginIframes, recordCrossOriginIframes = _options_recordCrossOriginIframes === void 0 ? false : _options_recordCrossOriginIframes, allowedIframeOrigins = options.allowedIframeOrigins, _options_recordAfter = options.recordAfter, recordAfter = _options_recordAfter === void 0 ? options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\" : _options_recordAfter, _options_userTriggeredOnInput = options.userTriggeredOnInput, userTriggeredOnInput = _options_userTriggeredOnInput === void 0 ? false : _options_userTriggeredOnInput, _options_collectFonts = options.collectFonts, collectFonts = _options_collectFonts === void 0 ? false : _options_collectFonts, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, plugins = options.plugins, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_ignoreCSSAttributes = options.ignoreCSSAttributes, ignoreCSSAttributes = _options_ignoreCSSAttributes === void 0 ? /* @__PURE__ */ new Set([]) : _options_ignoreCSSAttributes, errorHandler2 = options.errorHandler;\n registerErrorHandler(errorHandler2);\n var validatedOrigins;\n if (recordCrossOriginIframes && allowedIframeOrigins && allowedIframeOrigins.length > 0) {\n validatedOrigins = buildAllowedOriginSet(allowedIframeOrigins);\n if (validatedOrigins.size === 0) {\n validatedOrigins = void 0;\n }\n }\n var inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n var passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return function() {};\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : {\n password: true\n };\n var slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n var lastFullSnapshotEvent;\n var incrementalSnapshotCount = 0;\n var eventProcessor = function(e2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.eventProcessor) {\n e2 = plugin3.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = function(r2, isCheckout) {\n var _a2;\n var e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach(function(buf) {\n return buf.unfreeze();\n });\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n var message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout: isCheckout\n };\n if (validatedOrigins) {\n for(var _iterator = _create_for_of_iterator_helper_loose(validatedOrigins), _step; !(_step = _iterator()).done;){\n var targetOrigin = _step.value;\n window.parent.postMessage(message, targetOrigin);\n }\n } else {\n window.parent.postMessage(message, \"*\");\n }\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n var exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n var exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot$1(true);\n }\n }\n };\n var wrappedMutationEmit = function(m) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Mutation\n }, m)\n });\n };\n var wrappedScrollEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Scroll\n }, p)\n });\n };\n var wrappedCanvasMutationEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CanvasMutation\n }, p)\n });\n };\n var wrappedAdoptedStyleSheetEmit = function(a2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.AdoptedStyleSheet\n }, a2)\n });\n };\n var stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n var iframeManager = new IframeManager({\n mirror: mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes: recordCrossOriginIframes,\n wrappedEmit: wrappedEmit\n });\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.getMirror) plugin3.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n var processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas: recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass: blockClass,\n blockSelector: blockSelector,\n mirror: mirror,\n sampling: sampling.canvas,\n dataURLOptions: dataURLOptions\n });\n var shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n dataURLOptions: dataURLOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n sampling: sampling,\n slimDOMOptions: slimDOMOptions,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n canvasManager: canvasManager,\n keepIframeSrcFn: keepIframeSrcFn,\n processedNodeManager: processedNodeManager\n },\n mirror: mirror\n });\n takeFullSnapshot$1 = function(isCheckout) {\n if (isCheckout === void 0) isCheckout = false;\n if (!recordDOM) {\n return;\n }\n wrappedEmit({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n }, isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach(function(buf) {\n return buf.lock();\n });\n var node2 = snapshot(document, {\n mirror: mirror,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOM: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n onSerialize: function(n2) {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), document);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(linkEl, childSn) {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (!node2) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit({\n type: EventType.FullSnapshot,\n data: {\n node: node2,\n initialOffset: getWindowScroll(window)\n }\n }, isCheckout);\n mutationBuffers.forEach(function(buf) {\n return buf.unlock();\n });\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n try {\n var handlers = [];\n var observe = function(doc) {\n var _a2;\n return callbackWrapper(initObservers)({\n mutationCb: wrappedMutationEmit,\n mousemoveCb: function(positions, source) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: source,\n positions: positions\n }\n });\n },\n mouseInteractionCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MouseInteraction\n }, d)\n });\n },\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.ViewportResize\n }, d)\n });\n },\n inputCb: function(v2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Input\n }, v2)\n });\n },\n mediaInteractionCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MediaInteraction\n }, p)\n });\n },\n styleSheetRuleCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleSheetRule\n }, r2)\n });\n },\n styleDeclarationCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleDeclaration\n }, r2)\n });\n },\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Font\n }, p)\n });\n },\n selectionCb: function(p) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Selection\n }, p)\n });\n },\n customElementCb: function(c2) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CustomElement\n }, c2)\n });\n },\n blockClass: blockClass,\n ignoreClass: ignoreClass,\n ignoreSelector: ignoreSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n maskInputOptions: maskInputOptions,\n inlineStylesheet: inlineStylesheet,\n sampling: sampling,\n recordDOM: recordDOM,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n userTriggeredOnInput: userTriggeredOnInput,\n collectFonts: collectFonts,\n doc: doc,\n maskInputFn: maskInputFn,\n maskTextFn: maskTextFn,\n keepIframeSrcFn: keepIframeSrcFn,\n blockSelector: blockSelector,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n mirror: mirror,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n shadowDomManager: shadowDomManager,\n processedNodeManager: processedNodeManager,\n canvasManager: canvasManager,\n ignoreCSSAttributes: ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter(function(p) {\n return p.observer;\n })) == null ? void 0 : _a2.map(function(p) {\n return {\n observer: p.observer,\n options: p.options,\n callback: function(payload) {\n return wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload: payload\n }\n });\n }\n };\n })) || []\n }, hooks);\n };\n iframeManager.addLoadListener(function(iframeEl) {\n try {\n var iframeDoc = iframeEl.contentDocument;\n var iframeHandler = observe(iframeDoc);\n handlers.push(iframeHandler);\n var existingCleanup = iframeManager.getObserverCleanup(iframeEl);\n iframeManager.setObserverCleanup(iframeEl, function() {\n if (existingCleanup) {\n try {\n existingCleanup();\n } catch (e2) {}\n }\n try {\n iframeHandler();\n var idx = handlers.indexOf(iframeHandler);\n if (idx !== -1) handlers.splice(idx, 1);\n removeMutationBufferForDoc(iframeDoc);\n } catch (e2) {}\n });\n } catch (error) {\n console.warn(error);\n }\n });\n var init = function() {\n takeFullSnapshot$1();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(on(\"DOMContentLoaded\", function() {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\") init();\n }));\n handlers.push(on(\"load\", function() {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\") init();\n }, window));\n }\n return function() {\n handlers.forEach(function(handler) {\n try {\n handler();\n } catch (error) {\n var msg = String(error).toLowerCase();\n if (!msg.includes(\"cross-origin\")) {\n console.warn(error);\n }\n }\n });\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = function(tag, payload) {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag: tag,\n payload: payload\n }\n });\n};\nrecord.freezePage = function() {\n mutationBuffers.forEach(function(buf) {\n return buf.freeze();\n });\n};\nrecord.takeFullSnapshot = function(isCheckout) {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot$1(isCheckout);\n};\nrecord.mirror = mirror;\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nrecord.addCustomEvent;\nrecord.freezePage;\nrecord.takeFullSnapshot;\nvar testableAccessors = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype = {};\nvar isAngularZonePresent = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key]) return untaintedBasePrototype[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a, _b;\n return Boolean((_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods ? testableMethods[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a;\n return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache[cacheKey]) return untaintedAccessorCache[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache[cacheKey]) return untaintedMethodCache[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n if (!n || !(\"host\" in n)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n return n.styleSheets;\n}\nfunction shadowRoot(n) {\n if (!n || !(\"shadowRoot\" in n)) return null;\n return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nfunction patch$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index = {\n childNodes: childNodes,\n parentNode: parentNode,\n parentElement: parentElement,\n textContent: textContent,\n contains: contains,\n getRootNode: getRootNode,\n host: host,\n styleSheets: styleSheets,\n shadowRoot: shadowRoot,\n querySelector: querySelector,\n querySelectorAll: querySelectorAll,\n mutationObserver: mutationObserverCtor,\n patch: patch$1\n};\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n}\nfunction getDefaultExportFromCjs(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace(n) {\n if (n.__esModule) return n;\n var f = n.default;\n if (typeof f == \"function\") {\n var a = function a2() {\n if (_instanceof(this, a2)) {\n return Reflect.construct(f, arguments, this.constructor);\n }\n return f.apply(this, arguments);\n };\n a.prototype = f.prototype;\n } else a = {};\n Object.defineProperty(a, \"__esModule\", {\n value: true\n });\n Object.keys(n).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n, k);\n Object.defineProperty(a, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n[k];\n }\n });\n });\n return a;\n}\nvar picocolors_browser = {\n exports: {}\n};\nvar x = String;\nvar create = function create() {\n return {\n isColorSupported: false,\n reset: x,\n bold: x,\n dim: x,\n italic: x,\n underline: x,\n inverse: x,\n hidden: x,\n strikethrough: x,\n black: x,\n red: x,\n green: x,\n yellow: x,\n blue: x,\n magenta: x,\n cyan: x,\n white: x,\n gray: x,\n bgBlack: x,\n bgRed: x,\n bgGreen: x,\n bgYellow: x,\n bgBlue: x,\n bgMagenta: x,\n bgCyan: x,\n bgWhite: x\n };\n};\npicocolors_browser.exports = create();\npicocolors_browser.exports.createColors = create;\nvar picocolors_browserExports = picocolors_browser.exports;\nvar __viteBrowserExternal = {};\nvar __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);\nvar pico = picocolors_browserExports;\nvar terminalHighlight$1 = require$$2;\nvar CssSyntaxError$3 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin2) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin2) {\n _this.plugin = plugin2;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico.isColorSupported;\n if (terminalHighlight$1) {\n if (color) css = terminalHighlight$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico_createColors = pico.createColors(true), bold = _pico_createColors.bold, gray = _pico_createColors.gray, red = _pico_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError = CssSyntaxError$3;\nCssSyntaxError$3.default = CssSyntaxError$3;\nvar symbols = {};\nsymbols.isClean = Symbol(\"isClean\");\nsymbols.my = Symbol(\"my\");\nvar DEFAULT_RAW = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i = 0; i < node2.nodes.length; i++){\n var child = node2.nodes[i];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i) {\n value = i.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== \"undefined\") {\n value = i.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i) {\n if (i.type !== \"decl\") {\n value = i.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && (i.parent !== root2 || root2.first !== i)) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.between !== \"undefined\") {\n value = i.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i) {\n var p = i.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i.raws.before !== \"undefined\") {\n var parts = i.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length && i.last.type === \"decl\") {\n value = i.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier = Stringifier$2;\nStringifier$2.default = Stringifier$2;\nvar Stringifier$1 = stringifier;\nfunction stringify$4(node2, builder) {\n var str = new Stringifier$1(builder);\n str.stringify(node2);\n}\nvar stringify_1 = stringify$4;\nstringify$4.default = stringify$4;\nvar isClean$2 = symbols.isClean, my$2 = symbols.my;\nvar CssSyntaxError$2 = cssSyntaxError;\nvar Stringifier2 = stringifier;\nvar stringify$3 = stringify_1;\nfunction cloneNode(obj, parent) {\n var cloned = new obj.constructor();\n for(var i in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n continue;\n }\n if (i === \"proxyCache\") continue;\n var value = obj[i];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i === \"parent\" && type === \"object\") {\n if (parent) cloned[i] = parent;\n } else if (i === \"source\") {\n cloned[i] = value;\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(function(j) {\n return cloneNode(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode(value);\n cloned[i] = value;\n }\n }\n return cloned;\n}\nvar Node$4 = /*#__PURE__*/ function() {\n function Node1(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2] = false;\n this[my$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node1.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s.input.from + \":\" + s.start.line + \":\" + s.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2]) {\n this[isClean$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i = 0; i < index2; i++){\n if (string[i] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i) {\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.toJSON) {\n return i.toJSON(null, inputs);\n } else {\n return i;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i) {\n result2 += i;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i in opts)data[i] = opts[i];\n return result2.warn(text, data);\n };\n _create_class(Node1, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node1;\n}();\nvar node = Node$4;\nNode$4.default = Node$4;\nvar Node$3 = node;\nvar Declaration$4 = /*#__PURE__*/ function(Node$3) {\n _inherits(Declaration, Node$3);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3);\nvar declaration = Declaration$4;\nDeclaration$4.default = Declaration$4;\nvar urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i = size;\n while(i--){\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure = {\n nanoid: nanoid$1\n};\nvar SourceMapConsumer$2 = require$$2.SourceMapConsumer, SourceMapGenerator$2 = require$$2.SourceMapGenerator;\nvar existsSync = require$$2.existsSync, readFileSync = require$$2.readFileSync;\nvar dirname$1 = require$$2.dirname, join = require$$2.join;\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1(path);\n if (existsSync(path)) {\n this.mapFile = path;\n return readFileSync(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2)) {\n return SourceMapGenerator$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join(dirname$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap = PreviousMap$2;\nPreviousMap$2.default = PreviousMap$2;\nvar SourceMapConsumer$1 = require$$2.SourceMapConsumer, SourceMapGenerator$1 = require$$2.SourceMapGenerator;\nvar fileURLToPath = require$$2.fileURLToPath, pathToFileURL$1 = require$$2.pathToFileURL;\nvar isAbsolute = require$$2.isAbsolute, resolve$1 = require$$2.resolve;\nvar nanoid = nonSecure.nanoid;\nvar terminalHighlight = require$$2;\nvar CssSyntaxError$1 = cssSyntaxError;\nvar PreviousMap$1 = previousMap;\nvar fromOffsetCache = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1 = Boolean(SourceMapConsumer$1 && SourceMapGenerator$1);\nvar pathAvailable$1 = Boolean(resolve$1 && isAbsolute);\nvar Input$4 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1(opts.from);\n }\n }\n if (pathAvailable$1 && sourceMapAvailable$1) {\n var map = new PreviousMap$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1) {\n result2.input.url = pathToFileURL$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i = 0, l = lines.length; i < l; i++){\n lineToIndex[i] = prevIndex;\n prevIndex += lines[i].length + 1;\n }\n this[fromOffsetCache] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath) {\n result2.file = fileURLToPath(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input = Input$4;\nInput$4.default = Input$4;\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input$4);\n}\nvar SourceMapConsumer = require$$2.SourceMapConsumer, SourceMapGenerator = require$$2.SourceMapGenerator;\nvar dirname = require$$2.dirname, relative = require$$2.relative, resolve = require$$2.resolve, sep = require$$2.sep;\nvar pathToFileURL = require$$2.pathToFileURL;\nvar Input$3 = input;\nvar sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\nvar pathAvailable = Boolean(dirname && resolve && relative && sep);\nvar MapGenerator$2 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i = this.root.nodes.length - 1; i >= 0; i--){\n node2 = this.root.nodes[i];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i) {\n result2 += i;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname(resolve(from, this.mapOpts.annotation));\n }\n var path = relative(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL) {\n var fileURL = pathToFileURL(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator = MapGenerator$2;\nvar Node$2 = node;\nvar Comment$4 = /*#__PURE__*/ function(Node$2) {\n _inherits(Comment, Node$2);\n function Comment(defaults) {\n var _this;\n _this = Node$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2);\nvar comment = Comment$4;\nComment$4.default = Comment$4;\nvar isClean$1 = symbols.isClean, my$1 = symbols.my;\nvar Declaration$3 = declaration;\nvar Comment$3 = comment;\nvar Node$1 = node;\nvar parse$4, Rule$4, AtRule$4, Root$6;\nfunction cleanSource(nodes) {\n return nodes.map(function(i) {\n if (i.nodes) i.nodes = cleanSource(i.nodes);\n delete i.source;\n return i;\n });\n}\nfunction markDirtyUp(node2) {\n node2[isClean$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n markDirtyUp(i);\n }\n }\n}\nvar Container$7 = /*#__PURE__*/ function(Node$1) {\n _inherits(Container, Node$1);\n function Container() {\n return Node$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i) {\n if (typeof i === \"function\") {\n return function(child, index2) {\n return i(child.toProxy(), index2);\n };\n } else {\n return i;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i) {\n return i.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource(parse$4(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.parent) i.parent.removeChild(i, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i1 = _step1.value;\n if (i1.parent) i1.parent.removeChild(i1, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i) {\n if (!i[my$1]) Container.rebuild(i);\n i = i.proxyOf;\n if (i.parent) i.parent.removeChild(i);\n if (i[isClean$1]) markDirtyUp(i);\n if (typeof i.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i.parent = _this.proxyOf;\n return i;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i) {\n var result2;\n try {\n result2 = callback(child, i);\n } catch (e) {\n throw child.addToError(e);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i) {\n if (child.type === \"atrule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i) {\n if (child.type === \"comment\") {\n return callback(child, i);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i) {\n if (child.type === \"decl\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i) {\n if (child.type === \"rule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1);\nContainer$7.registerParse = function(dependant) {\n parse$4 = dependant;\n};\nContainer$7.registerRule = function(dependant) {\n Rule$4 = dependant;\n};\nContainer$7.registerAtRule = function(dependant) {\n AtRule$4 = dependant;\n};\nContainer$7.registerRoot = function(dependant) {\n Root$6 = dependant;\n};\nvar container = Container$7;\nContainer$7.default = Container$7;\nContainer$7.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6.prototype);\n }\n node2[my$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7.rebuild(child);\n });\n }\n};\nvar Container$6 = container;\nvar LazyResult$4, Processor$3;\nvar Document$3 = /*#__PURE__*/ function(Container$6) {\n _inherits(Document, Container$6);\n function Document(defaults) {\n var _this;\n _this = Container$6.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4(new Processor$3(), this, opts);\n return lazy.stringify();\n };\n return Document;\n}(Container$6);\nDocument$3.registerLazyResult = function(dependant) {\n LazyResult$4 = dependant;\n};\nDocument$3.registerProcessor = function(dependant) {\n Processor$3 = dependant;\n};\nvar document$1 = Document$3;\nDocument$3.default = Document$3;\nvar printed = {};\nvar warnOnce$2 = function warnOnce(message) {\n if (printed[message]) return;\n printed[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning = Warning$2;\nWarning$2.default = Warning$2;\nvar Warning$1 = warning;\nvar Result$3 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i) {\n return i.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result = Result$3;\nResult$3.default = Result$3;\nvar SINGLE_QUOTE = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE = '\"'.charCodeAt(0);\nvar BACKSLASH = \"\\\\\".charCodeAt(0);\nvar SLASH = \"/\".charCodeAt(0);\nvar NEWLINE = \"\\n\".charCodeAt(0);\nvar SPACE = \" \".charCodeAt(0);\nvar FEED = \"\\f\".charCodeAt(0);\nvar TAB = \"\t\".charCodeAt(0);\nvar CR = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES = \")\".charCodeAt(0);\nvar OPEN_CURLY = \"{\".charCodeAt(0);\nvar CLOSE_CURLY = \"}\".charCodeAt(0);\nvar SEMICOLON = \";\".charCodeAt(0);\nvar ASTERISK = \"*\".charCodeAt(0);\nvar COLON = \":\".charCodeAt(0);\nvar AT = \"@\".charCodeAt(0);\nvar RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE = /[\\da-f]/i;\nvar tokenize = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE:\n {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT:\n {\n RE_AT_END.lastIndex = pos + 1;\n RE_AT_END.test(css);\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n next += 1;\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END.lastIndex = pos + 1;\n RE_WORD_END.test(css);\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5 = container;\nvar AtRule$3 = /*#__PURE__*/ function(Container$5) {\n _inherits(AtRule, Container$5);\n function AtRule(defaults) {\n var _this;\n _this = Container$5.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_append = Container$5.prototype.append).call.apply(_Container$5_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_prepend = Container$5.prototype.prepend).call.apply(_Container$5_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5);\nvar atRule = AtRule$3;\nAtRule$3.default = AtRule$3;\nContainer$5.registerAtRule(AtRule$3);\nvar Container$4 = container;\nvar LazyResult$3, Processor$2;\nvar Root$5 = /*#__PURE__*/ function(Container$4) {\n _inherits(Root, Container$4);\n function Root(defaults) {\n var _this;\n _this = Container$4.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3(new Processor$2(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4);\nRoot$5.registerLazyResult = function(dependant) {\n LazyResult$3 = dependant;\n};\nRoot$5.registerProcessor = function(dependant) {\n Processor$2 = dependant;\n};\nvar root = Root$5;\nRoot$5.default = Root$5;\nContainer$4.registerRoot(Root$5);\nvar list$2 = {\n comma: function comma(string) {\n return list$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1 = list$2;\nlist$2.default = list$2;\nvar Container$3 = container;\nvar list$1 = list_1;\nvar Rule$3 = /*#__PURE__*/ function(Container$3) {\n _inherits(Rule, Container$3);\n function Rule(defaults) {\n var _this;\n _this = Container$3.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3);\nvar rule = Rule$3;\nRule$3.default = Rule$3;\nContainer$3.registerRule(Rule$3);\nvar Declaration$2 = declaration;\nvar tokenizer2 = tokenize;\nvar Comment$2 = comment;\nvar AtRule$2 = atRule;\nvar Root$4 = root;\nvar Rule$2 = rule;\nvar SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition(tokens) {\n for(var i = tokens.length - 1; i >= 0; i--){\n var token = tokens[i];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i = tokens.length - 1; i >= 0; i--){\n token = tokens[i];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i) {\n return i[0] !== \"space\" && i[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i) {\n return i[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i = 0; i < length; i += 1){\n token = tokens[i];\n type = token[0];\n if (type === \"space\" && i === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i - 1] ? tokens[i - 1][0] : \"empty\";\n next = tokens[i + 1] ? tokens[i + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i) {\n return all + i[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i = from; i < tokens.length; i++){\n result2 += tokens[i][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser = Parser$1;\nvar Container$2 = container;\nvar Parser2 = parser;\nvar Input$2 = input;\nfunction parse$3(css, opts) {\n var input2 = new Input$2(css, opts);\n var parser2 = new Parser2(input2);\n try {\n parser2.parse();\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e;\n }\n return parser2.root;\n}\nvar parse_1 = parse$3;\nparse$3.default = parse$3;\nContainer$2.registerParse(parse$3);\nvar isClean = symbols.isClean, my = symbols.my;\nvar MapGenerator$1 = mapGenerator;\nvar stringify$2 = stringify_1;\nvar Container$1 = container;\nvar Document$2 = document$1;\nvar warnOnce$1 = warnOnce$2;\nvar Result$2 = result;\nvar parse$2 = parse_1;\nvar Root$3 = root;\nvar TYPE_TO_CLASS_NAME = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN = 0;\nfunction isPromise(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN,\n \"RootExit\"\n ];\n } else {\n events = getEvents(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks(node2) {\n node2[isClean] = false;\n if (node2.nodes) node2.nodes.forEach(function(i) {\n return cleanMarks(i);\n });\n return node2;\n}\nvar postcss$2 = {};\nvar LazyResult$2 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2)) {\n root2 = cleanMarks(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my]) {\n Container$1.rebuild(root2);\n }\n }\n this.result = new Result$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2, {\n postcss: postcss$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin2) {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.prepare) {\n return _extends({}, plugin2, plugin2.prepare(_this.result));\n } else {\n return plugin2;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin2 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin2.postcssPlugin;\n error.setMessage();\n } else if (plugin2.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin2.postcssPlugin;\n var pluginVer = plugin2.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin2, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin2,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\") {\n for(var event in plugin2){\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin2.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS[event]) {\n if (_type_of(plugin2[event]) === \"object\") {\n for(var filter in plugin2[event]){\n if (filter === \"*\") {\n add(plugin2, event, plugin2[event][filter]);\n } else {\n add(plugin2, event + \"-\" + filter.toLowerCase(), plugin2[event][filter]);\n }\n }\n } else if (typeof plugin2[event] === \"function\") {\n add(plugin2, event, plugin2[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i, plugin2, promise, error, root2, stack, promise1, e, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i = 0;\n _state.label = 1;\n case 1:\n if (!(i < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin2 = _this.plugins[i];\n promise = _this.runOnRoot(plugin2);\n if (!isPromise(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean]) return [\n 3,\n 14\n ];\n root2[isClean] = true;\n stack = [\n toStack(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin2, visitor, roots, e;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin2;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e = _state.sent();\n throw _this.handleError(e);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin2) {\n var _this = this;\n this.result.lastPlugin = plugin2;\n try {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin2.Once(root2, _this.helpers);\n });\n if (isPromise(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin2.Once(this.result.root, this.helpers);\n } else if (typeof plugin2 === \"function\") {\n return plugin2(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n var promise = this.runOnRoot(plugin2);\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean]){\n root2[isClean] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin2;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e) {\n throw this.handleError(e, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin2 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin2;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e) {\n throw this.handleError(e, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean]) {\n child[isClean] = true;\n stack.push(toStack(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean] = true;\n var events = getEvents(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2.registerPostcss = function(dependant) {\n postcss$2 = dependant;\n};\nvar lazyResult = LazyResult$2;\nLazyResult$2.default = LazyResult$2;\nRoot$3.registerLazyResult(LazyResult$2);\nDocument$2.registerLazyResult(LazyResult$2);\nvar MapGenerator2 = mapGenerator;\nvar stringify$1 = stringify_1;\nvar warnOnce2 = warnOnce$2;\nvar parse$1 = parse_1;\nvar Result$1 = result;\nvar NoWorkResult$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1;\n this.result = new Result$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult = NoWorkResult$1;\nNoWorkResult$1.default = NoWorkResult$1;\nvar NoWorkResult2 = noWorkResult;\nvar LazyResult$1 = lazyResult;\nvar Document$1 = document$1;\nvar Root$2 = root;\nvar Processor$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.postcss === true) {\n i = i();\n } else if (i.postcss) {\n i = i.postcss;\n }\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.postcssPlugin) {\n normalized.push(i);\n } else if (typeof i === \"function\") {\n normalized.push(i);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2(this, css, opts);\n } else {\n return new LazyResult$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin2) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin2\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor = Processor$1;\nProcessor$1.default = Processor$1;\nRoot$2.registerProcessor(Processor$1);\nDocument$1.registerProcessor(Processor$1);\nvar Declaration$1 = declaration;\nvar PreviousMap2 = previousMap;\nvar Comment$1 = comment;\nvar AtRule$1 = atRule;\nvar Input$1 = input;\nvar Root$1 = root;\nvar Rule$1 = rule;\nfunction fromJSON$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n) {\n return fromJSON$1(n);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n) {\n return fromJSON$1(n, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1 = fromJSON$1;\nfromJSON$1.default = fromJSON$1;\nvar CssSyntaxError2 = cssSyntaxError;\nvar Declaration2 = declaration;\nvar LazyResult2 = lazyResult;\nvar Container2 = container;\nvar Processor2 = processor;\nvar stringify$5 = stringify_1;\nvar fromJSON = fromJSON_1;\nvar Document2 = document$1;\nvar Warning2 = warning;\nvar Comment2 = comment;\nvar AtRule2 = atRule;\nvar Result2 = result;\nvar Input2 = input;\nvar parse = parse_1;\nvar list = list_1;\nvar Rule2 = rule;\nvar Root2 = root;\nvar Node2 = node;\nfunction postcss() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2(plugins);\n}\npostcss.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss.stringify = stringify$5;\npostcss.parse = parse;\npostcss.fromJSON = fromJSON;\npostcss.list = list;\npostcss.comment = function(defaults) {\n return new Comment2(defaults);\n};\npostcss.atRule = function(defaults) {\n return new AtRule2(defaults);\n};\npostcss.decl = function(defaults) {\n return new Declaration2(defaults);\n};\npostcss.rule = function(defaults) {\n return new Rule2(defaults);\n};\npostcss.root = function(defaults) {\n return new Root2(defaults);\n};\npostcss.document = function(defaults) {\n return new Document2(defaults);\n};\npostcss.CssSyntaxError = CssSyntaxError2;\npostcss.Declaration = Declaration2;\npostcss.Container = Container2;\npostcss.Processor = Processor2;\npostcss.Document = Document2;\npostcss.Comment = Comment2;\npostcss.Warning = Warning2;\npostcss.AtRule = AtRule2;\npostcss.Result = Result2;\npostcss.Input = Input2;\npostcss.Rule = Rule2;\npostcss.Root = Root2;\npostcss.Node = Node2;\nLazyResult2.registerPostcss(postcss);\nvar postcss_1 = postcss;\npostcss.default = postcss;\nvar postcss$1 = /* @__PURE__ */ getDefaultExportFromCjs(postcss_1);\npostcss$1.stringify;\npostcss$1.fromJSON;\npostcss$1.plugin;\npostcss$1.parse;\npostcss$1.list;\npostcss$1.document;\npostcss$1.comment;\npostcss$1.atRule;\npostcss$1.rule;\npostcss$1.decl;\npostcss$1.root;\npostcss$1.CssSyntaxError;\npostcss$1.Declaration;\npostcss$1.Container;\npostcss$1.Processor;\npostcss$1.Document;\npostcss$1.Comment;\npostcss$1.Warning;\npostcss$1.AtRule;\npostcss$1.Result;\npostcss$1.Input;\npostcss$1.Rule;\npostcss$1.Root;\npostcss$1.Node;\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = function(obj, key, value) {\n return key in obj ? __defProp(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField = function(obj, key, value) {\n return __defNormalProp(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar StackFrame = /*#__PURE__*/ function() {\n function StackFrame(obj) {\n __publicField(this, \"fileName\");\n __publicField(this, \"functionName\");\n __publicField(this, \"lineNumber\");\n __publicField(this, \"columnNumber\");\n this.fileName = obj.fileName || \"\";\n this.functionName = obj.functionName || \"\";\n this.lineNumber = obj.lineNumber;\n this.columnNumber = obj.columnNumber;\n }\n var _proto = StackFrame.prototype;\n _proto.toString = function toString() {\n var lineNumber = this.lineNumber || \"\";\n var columnNumber = this.columnNumber || \"\";\n if (this.functionName) return this.functionName + \" (\" + this.fileName + \":\" + lineNumber + \":\" + columnNumber + \")\";\n return this.fileName + \":\" + lineNumber + \":\" + columnNumber;\n };\n return StackFrame;\n}();\nvar FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\nvar CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nvar SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nvar ErrorStackParser = {\n /**\n * Given an Error object, extract the most information from it.\n */ parse: function parse(error) {\n if (!error) {\n return [];\n }\n if (// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error.stacktrace !== \"undefined\" || // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error[\"opera#sourceloc\"] !== \"undefined\") {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n console.warn(\"[console-record-plugin]: Failed to parse error object:\", error);\n return [];\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function extractLocation(urlLike) {\n if (urlLike.indexOf(\":\") === -1) {\n return [\n urlLike\n ];\n }\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, \"\"));\n if (!parts) throw new Error(\"Cannot parse given url: \" + urlLike);\n return [\n parts[1],\n parts[2] || void 0,\n parts[3] || void 0\n ];\n },\n parseV8OrIE: function parseV8OrIE(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\"(eval \") > -1) {\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g, \"\");\n }\n var sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\");\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(\" \") || void 0;\n var fileName = [\n \"eval\",\n \"\"\n ].indexOf(locationParts[0]) > -1 ? void 0 : locationParts[0];\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n },\n parseFFOrSafari: function parseFFOrSafari(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\" > eval\") > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, \":$1\");\n }\n if (line.indexOf(\"@\") === -1 && line.indexOf(\":\") === -1) {\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : void 0;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, \"\"));\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }\n }, this);\n },\n parseOpera: function parseOpera(e) {\n if (!e.stacktrace || e.message.indexOf(\"\\n\") > -1 && e.message.split(\"\\n\").length > e.stacktrace.split(\"\\n\").length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split(\"\\n\");\n var result = [];\n for(var i = 2, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n parseOpera10: function parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split(\"\\n\");\n var result = [];\n for(var i = 0, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n functionName: match[3] || void 0,\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function parseOpera11(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function(line) {\n var tokens = line.split(\"@\");\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = tokens.shift() || \"\";\n var functionName = functionCall.replace(//, \"$2\").replace(/\\([^)]*\\)/g, \"\") || void 0;\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n }\n};\nfunction pathToSelector(node) {\n if (!node || !node.outerHTML) {\n return \"\";\n }\n var path = \"\";\n while(node.parentElement){\n var name = node.localName;\n if (!name) {\n break;\n }\n name = name.toLowerCase();\n var parent = node.parentElement;\n var domSiblings = [];\n if (parent.children && parent.children.length > 0) {\n for(var i = 0; i < parent.children.length; i++){\n var sibling = parent.children[i];\n if (sibling.localName && sibling.localName.toLowerCase) {\n if (sibling.localName.toLowerCase() === name) {\n domSiblings.push(sibling);\n }\n }\n }\n }\n if (domSiblings.length > 1) {\n name += \":eq(\" + domSiblings.indexOf(node) + \")\";\n }\n path = name + (path ? \">\" + path : \"\");\n node = parent;\n }\n return path;\n}\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isObjTooDeep(obj, limit) {\n if (limit === 0) {\n return true;\n }\n var keys = Object.keys(obj);\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (isObject(obj[key]) && isObjTooDeep(obj[key], limit - 1)) {\n return true;\n }\n }\n return false;\n}\nfunction stringify(obj, stringifyOptions) {\n var options = {\n numOfKeysLimit: 50,\n depthOfLimit: 4\n };\n Object.assign(options, stringifyOptions);\n var stack = [];\n var keys = [];\n return JSON.stringify(obj, function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) {\n if (stack[0] === value) {\n value = \"[Circular ~]\";\n } else {\n value = \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n }\n }\n } else {\n stack.push(value);\n }\n if (value === null) return value;\n if (value === void 0) return \"undefined\";\n if (shouldIgnore(value)) {\n return toString(value);\n }\n if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"bigint\") {\n return value.toString() + \"n\";\n }\n if (_instanceof(value, Event)) {\n var eventResult = {};\n for(var eventKey in value){\n var eventValue = value[eventKey];\n if (Array.isArray(eventValue)) {\n eventResult[eventKey] = pathToSelector(eventValue.length ? eventValue[0] : null);\n } else {\n eventResult[eventKey] = eventValue;\n }\n }\n return eventResult;\n } else if (_instanceof(value, Node)) {\n if (_instanceof(value, HTMLElement)) {\n return value ? value.outerHTML : \"\";\n }\n return value.nodeName;\n } else if (_instanceof(value, Error)) {\n return value.stack ? value.stack + \"\\nEnd of stack for Error object\" : value.name + \": \" + value.message;\n }\n return value;\n });\n function shouldIgnore(_obj) {\n if (isObject(_obj) && Object.keys(_obj).length > options.numOfKeysLimit) {\n return true;\n }\n if (typeof _obj === \"function\") {\n return true;\n }\n if (isObject(_obj) && isObjTooDeep(_obj, options.depthOfLimit)) {\n return true;\n }\n return false;\n }\n function toString(_obj) {\n var str = _obj.toString();\n if (options.stringLengthLimit && str.length > options.stringLengthLimit) {\n str = \"\" + str.slice(0, options.stringLengthLimit) + \"...\";\n }\n return str;\n }\n}\nvar defaultLogOptions = {\n level: [\n \"assert\",\n \"clear\",\n \"count\",\n \"countReset\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"info\",\n \"log\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"trace\",\n \"warn\"\n ],\n lengthThreshold: 1e3,\n logger: \"console\"\n};\nfunction initLogObserver(cb, win, options) {\n var logOptions = options ? Object.assign({}, defaultLogOptions, options) : defaultLogOptions;\n var loggerType = logOptions.logger;\n if (!loggerType) {\n return function() {};\n }\n var logger;\n if (typeof loggerType === \"string\") {\n logger = win[loggerType];\n } else {\n logger = loggerType;\n }\n var logCount = 0;\n var inStack = false;\n var cancelHandlers = [];\n if (logOptions.level.includes(\"error\")) {\n var errorHandler = function(event) {\n var message = event.message, error = event.error;\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n var payload = [\n stringify(message, logOptions.stringifyOptions)\n ];\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"error\", errorHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"error\", errorHandler);\n });\n var unhandledrejectionHandler = function(event) {\n var error;\n var payload;\n if (_instanceof(event.reason, Error)) {\n error = event.reason;\n payload = [\n stringify(\"Uncaught (in promise) \" + error.name + \": \" + error.message, logOptions.stringifyOptions)\n ];\n } else {\n error = new Error();\n payload = [\n stringify(\"Uncaught (in promise)\", logOptions.stringifyOptions),\n stringify(event.reason, logOptions.stringifyOptions)\n ];\n }\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n });\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(logOptions.level), _step; !(_step = _iterator()).done;){\n var levelType = _step.value;\n cancelHandlers.push(replace(logger, levelType));\n }\n return function() {\n cancelHandlers.forEach(function(h) {\n return h();\n });\n };\n function replace(_logger, level) {\n var _this = this;\n if (!_logger[level]) {\n return function() {};\n }\n return patch(_logger, level, function(original) {\n var _this1 = _this;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n original.apply(_this1, args);\n if (level === \"assert\" && !!args[0]) {\n return;\n }\n if (inStack) {\n return;\n }\n inStack = true;\n try {\n var trace = ErrorStackParser.parse(new Error()).map(function(stackFrame) {\n return stackFrame.toString();\n }).splice(1);\n var argsForPayload = level === \"assert\" ? args.slice(1) : args;\n var payload = argsForPayload.map(function(s) {\n return stringify(s, logOptions.stringifyOptions);\n });\n logCount++;\n if (logCount < logOptions.lengthThreshold) {\n cb({\n level: level,\n trace: trace,\n payload: payload\n });\n } else if (logCount === logOptions.lengthThreshold) {\n cb({\n level: \"warn\",\n trace: [],\n payload: [\n stringify(\"The number of log records reached the threshold.\")\n ]\n });\n }\n } catch (error) {\n original.apply(void 0, [].concat([\n \"rrweb logger error:\",\n error\n ], args));\n } finally{\n inStack = false;\n }\n };\n });\n }\n}\nvar PLUGIN_NAME = \"rrweb/console@1\";\nvar getRecordConsolePlugin = function(options) {\n return {\n name: PLUGIN_NAME,\n observer: initLogObserver,\n options: options\n };\n};\n\nexport { EventType, IncrementalSource, classMatchesRegex, getRecordConsolePlugin, record };\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","import { Promise } from '../promise-polyfill';\nimport { window } from '../window';\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar IDBStorageWrapper = function (dbName, storeName, versionData, options) {\n this.dbName = dbName;\n this.storeName = storeName;\n this.version = versionData.version;\n this.storeNamesInDb = versionData.storeNames;\n // false to only open a database the device already has, for cleanup that mustn't create one\n this.createIfMissing = !options || options.createIfMissing !== false;\n /**\n * @type {Promise|null}\n */\n this.dbPromise = null;\n};\n\nIDBStorageWrapper.prototype._openDb = function () {\n var dbName = this.dbName;\n var version = this.version;\n var storeNamesInDb = this.storeNamesInDb;\n var createIfMissing = this.createIfMissing;\n var open = function () {\n return new Promise(function (resolve, reject) {\n var openRequest = window.indexedDB.open(dbName, version);\n openRequest['onerror'] = function () {\n reject(openRequest.error);\n };\n\n openRequest['onsuccess'] = function () {\n resolve(openRequest.result);\n };\n\n openRequest['onupgradeneeded'] = function (ev) {\n if (!createIfMissing && ev['oldVersion'] === 0) {\n // aborting fails the open; the new database stays at version 0, which\n // databases() doesn't list\n openRequest['transaction']['abort']();\n return;\n }\n var db = ev.target.result;\n\n storeNamesInDb.forEach(function (storeName) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n });\n };\n });\n };\n\n // where the browser lists its databases, a missing one isn't even opened\n if (createIfMissing || !window.indexedDB['databases']) {\n return open();\n }\n return window.indexedDB['databases']().then(function (databases) {\n for (var i = 0; i < databases.length; i++) {\n if (databases[i]['name'] === dbName) {\n return open();\n }\n }\n return Promise.reject(dbName + ' does not exist');\n });\n};\n\nIDBStorageWrapper.prototype.init = function () {\n if (!window.indexedDB) {\n return Promise.reject('indexedDB is not supported in this browser');\n }\n\n if (!this.dbPromise) {\n this.dbPromise = this._openDb();\n }\n\n return this.dbPromise\n .then(function (dbOrError) {\n if (dbOrError instanceof window['IDBDatabase']) {\n return Promise.resolve();\n } else {\n return Promise.reject(dbOrError);\n }\n });\n};\n\nIDBStorageWrapper.prototype.isInitialized = function () {\n return !!this.dbPromise;\n};\n\n/**\n * @param {IDBTransactionMode} mode\n * @param {function(IDBObjectStore): void} storeCb\n */\nIDBStorageWrapper.prototype.makeTransaction = function (mode, storeCb) {\n var storeName = this.storeName;\n var doTransaction = function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction(storeName, mode);\n transaction.oncomplete = function () {\n resolve(transaction);\n };\n transaction.onabort = transaction.onerror = function () {\n reject(transaction.error);\n };\n\n storeCb(transaction.objectStore(storeName));\n });\n };\n\n return this.dbPromise\n .then(doTransaction)\n .catch(function (err) {\n if (err && err['name'] === 'InvalidStateError') {\n // try reopening the DB if the connection is closed\n this.dbPromise = this._openDb();\n return this.dbPromise.then(doTransaction);\n } else {\n return Promise.reject(err);\n }\n }.bind(this));\n};\n\nIDBStorageWrapper.prototype.setItem = function (key, value) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.put(value, key);\n });\n};\n\nIDBStorageWrapper.prototype.getItem = function (key) {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.get(key);\n }).then(function () {\n return req.result;\n });\n};\n\nIDBStorageWrapper.prototype.removeItem = function (key) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.delete(key);\n });\n};\n\nIDBStorageWrapper.prototype.getAll = function () {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.getAll();\n }).then(function () {\n return req.result;\n });\n};\n\nexport {\n IDBStorageWrapper\n};\n","var MIXPANEL_BROWSER_DB_NAME = 'mixpanelBrowserDb';\nvar RECORDING_EVENTS_STORE_NAME = 'mixpanelRecordingEvents';\nvar RECORDING_REGISTRY_STORE_NAME = 'mixpanelRecordingRegistry';\n\n// Keeping these two properties closeby, as adding additional stores to a DB in IndexedDB requires a version increment\nvar RECORDER_VERSION_DATA = {\n version: 1,\n storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME]\n};\n\nexport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n};\n","import { Promise } from './promise-polyfill';\nimport { console_with_prefix, localStorageSupported, getLocalStorage, _ } from './utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n * console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function(key, options) {\n options = options || {};\n\n this.storageKey = key;\n this.storage = options.storage || getLocalStorage();\n this.pollIntervalMS = options.pollIntervalMS || 100;\n this.timeoutMS = options.timeoutMS || 2000;\n\n // dependency-inject promise implementation for testing purposes\n this.promiseImpl = options.promiseImpl || Promise;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function(lockedCB, pid) {\n var Promise = this.promiseImpl;\n return new Promise(_.bind(function (resolve, reject) {\n var i = pid || (new Date().getTime() + '|' + Math.random());\n var startTime = new Date().getTime();\n var key = this.storageKey;\n var pollIntervalMS = this.pollIntervalMS;\n var timeoutMS = this.timeoutMS;\n var storage = this.storage;\n\n var keyX = key + ':X';\n var keyY = key + ':Y';\n var keyZ = key + ':Z';\n\n var delay = function(cb) {\n if (new Date().getTime() - startTime > timeoutMS) {\n logger.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n storage.removeItem(keyZ);\n storage.removeItem(keyY);\n loop();\n return;\n }\n setTimeout(function() {\n try {\n cb();\n } catch(err) {\n reject(err);\n }\n }, pollIntervalMS * (Math.random() + 0.1));\n };\n\n var waitFor = function(predicate, cb) {\n if (predicate()) {\n cb();\n } else {\n delay(function() {\n waitFor(predicate, cb);\n });\n }\n };\n\n var getSetY = function() {\n var valY = storage.getItem(keyY);\n if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases)\n return false;\n } else {\n storage.setItem(keyY, i);\n if (storage.getItem(keyY) === i) {\n return true;\n } else {\n if (!localStorageSupported(storage, true)) {\n reject(new Error('localStorage support dropped while acquiring lock'));\n }\n return false;\n }\n }\n };\n\n var loop = function() {\n storage.setItem(keyX, i);\n\n waitFor(getSetY, function() {\n if (storage.getItem(keyX) === i) {\n criticalSection();\n return;\n }\n\n delay(function() {\n if (storage.getItem(keyY) !== i) {\n loop();\n return;\n }\n waitFor(function() {\n return !storage.getItem(keyZ);\n }, criticalSection);\n });\n });\n };\n\n var criticalSection = function() {\n storage.setItem(keyZ, '1');\n var removeLock = function () {\n storage.removeItem(keyZ);\n if (storage.getItem(keyY) === i) {\n storage.removeItem(keyY);\n }\n if (storage.getItem(keyX) === i) {\n storage.removeItem(keyX);\n }\n };\n\n lockedCB()\n .then(function (ret) {\n removeLock();\n resolve(ret);\n })\n .catch(function (err) {\n removeLock();\n reject(err);\n });\n };\n\n try {\n if (localStorageSupported(storage, true)) {\n loop();\n } else {\n throw new Error('localStorage support check failed');\n }\n } catch(err) {\n reject(err);\n }\n }, this));\n};\n\nexport { SharedLock };\n","import { Promise } from '../promise-polyfill';\nimport { _, JSONParse, JSONStringify, getLocalStorage } from '../utils'; // eslint-disable-line camelcase\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar LocalStorageWrapper = function (storageOverride) {\n this.storage = storageOverride || getLocalStorage();\n};\n\nLocalStorageWrapper.prototype.init = function () {\n if (!this.storage) {\n return Promise.reject(new Error('localStorage is not available'));\n }\n return Promise.resolve();\n};\n\nLocalStorageWrapper.prototype.isInitialized = function () {\n return true;\n};\n\nLocalStorageWrapper.prototype.setItem = function (key, value) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.setItem(key, JSONStringify(value));\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nLocalStorageWrapper.prototype.getItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n var item;\n try {\n item = JSONParse(this.storage.getItem(key));\n } catch (e) {\n reject(e);\n }\n resolve(item);\n }, this));\n};\n\nLocalStorageWrapper.prototype.removeItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.removeItem(key);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nexport { LocalStorageWrapper };\n","import { SharedLock } from './shared-lock';\nimport { batchedThrottle, cheap_guid, console_with_prefix, localStorageSupported, _ } from './utils'; // eslint-disable-line camelcase\nimport { LocalStorageWrapper } from './storage/local-storage';\nimport { Promise } from './promise-polyfill';\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function (storageKey, options) {\n options = options || {};\n this.storageKey = storageKey;\n this.usePersistence = options.usePersistence;\n if (this.usePersistence) {\n this.queueStorage = options.queueStorage || new LocalStorageWrapper();\n this.lock = new SharedLock(storageKey, {\n storage: options.sharedLockStorage,\n timeoutMS: options.sharedLockTimeoutMS,\n });\n }\n this.reportError = options.errorReporter || _.bind(logger.error, logger);\n this.consentGate = options.consentGate;\n\n this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n this.memQueue = [];\n this.initialized = false;\n\n if (options.enqueueThrottleMs) {\n this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs);\n } else {\n this.enqueuePersisted = _.bind(function (queueEntry) {\n return this._enqueuePersisted([queueEntry]);\n }, this);\n }\n};\n\nRequestQueue.prototype.ensureInit = function () {\n if (this.initialized || !this.usePersistence) {\n return Promise.resolve();\n }\n\n return this.queueStorage\n .init()\n .then(_.bind(function () {\n this.initialized = true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error initializing queue persistence. Disabling persistence', err);\n this.initialized = true;\n this.usePersistence = false;\n }, this));\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function (item, flushInterval) {\n var queueEntry = {\n 'id': cheap_guid(),\n 'flushAfter': new Date().getTime() + flushInterval * 2,\n 'payload': item\n };\n\n if (!this._persists()) {\n this.memQueue.push(queueEntry);\n return Promise.resolve(true);\n } else {\n return this.enqueuePersisted(queueEntry);\n }\n};\n\n/**\n * Whether the queue is kept in storage now: with persistence, and while consent allows storing.\n * The lock writes storage keys too, so nothing that takes it runs without this.\n * @returns {boolean}\n */\nRequestQueue.prototype._persists = function () {\n return this.usePersistence && this.consentGate.allowsStoring();\n};\n\nRequestQueue.prototype._enqueuePersisted = function (queueEntries) {\n // a throttled enqueue can run after consent stops storage; its items are dropped\n if (!this._persists()) {\n return Promise.resolve(false);\n }\n var enqueueItem = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n return this.saveToStorage(storedQueue.concat(queueEntries));\n }, this))\n .then(_.bind(function (succeeded) {\n // only add to in-memory queue when storage succeeds\n if (succeeded) {\n this.memQueue = this.memQueue.concat(queueEntries);\n }\n\n return succeeded;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error enqueueing items', err, queueEntries);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(enqueueItem, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function (batchSize) {\n var batch = this.memQueue.slice(0, batchSize);\n if (this.usePersistence && batch.length < batchSize) {\n // don't need lock just to read events; localStorage is thread-safe\n // and the worst that could happen is a duplicate send of some\n // orphaned events, which will be deduplicated on the server side\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n if (storedQueue.length) {\n // item IDs already in batch; don't duplicate out of storage\n var idsInBatch = {}; // poor man's Set\n _.each(batch, function (item) {\n idsInBatch[item['id']] = true;\n });\n\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n item.orphaned = true;\n batch.push(item);\n if (batch.length >= batchSize) {\n break;\n }\n }\n }\n }\n\n return batch;\n }, this));\n } else {\n return Promise.resolve(batch);\n }\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function (items, idSet) {\n var filteredItems = [];\n _.each(items, function (item) {\n if (item['id'] && !idSet[item['id']]) {\n filteredItems.push(item);\n }\n });\n return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function (ids) {\n var idSet = {}; // poor man's Set\n _.each(ids, function (id) {\n idSet[id] = true;\n });\n\n this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n if (!this._persists()) {\n return Promise.resolve(true);\n } else {\n var removeFromStorage = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n // an extra check: did storage report success but somehow\n // the items are still there?\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (item['id'] && !!idSet[item['id']]) {\n throw new Error('Item not removed from storage');\n }\n }\n return true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error removing items', err, ids);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(removeFromStorage, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n if (!localStorageSupported(this.lock.storage, true)) {\n // Looks like localStorage writes have stopped working sometime after\n // initialization (probably full), and so nobody can acquire locks\n // anymore. Consider it temporarily safe to remove items without the\n // lock, since nobody's writing successfully anyway.\n return removeFromStorage()\n .then(_.bind(function (success) {\n if (!success) {\n // OK, we couldn't even write out the smaller queue. Try clearing it\n // entirely.\n return this.queueStorage.removeItem(this.storageKey).then(function () {\n return success;\n });\n }\n return success;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n return false;\n }, this));\n } else {\n return false;\n }\n }, this));\n }\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function (existingItems, itemsToUpdate) {\n var newItems = [];\n _.each(existingItems, function (item) {\n var id = item['id'];\n if (id in itemsToUpdate) {\n var newPayload = itemsToUpdate[id];\n if (newPayload !== null) {\n item['payload'] = newPayload;\n newItems.push(item);\n }\n } else {\n // no update\n newItems.push(item);\n }\n });\n return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function (itemsToUpdate) {\n this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n if (!this._persists()) {\n return Promise.resolve(true);\n } else {\n return this.lock\n .withLock(_.bind(function lockAcquired() {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n return this.saveToStorage(storedQueue);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error updating items', itemsToUpdate, err);\n return false;\n }, this));\n }, this), this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.getItem(this.storageKey);\n }, this))\n .then(_.bind(function (storageEntry) {\n if (storageEntry) {\n if (!_.isArray(storageEntry)) {\n this.reportError('Invalid storage entry:', storageEntry);\n storageEntry = null;\n }\n }\n return storageEntry || [];\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error retrieving queue', err);\n return [];\n }, this));\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function (queue) {\n return this.ensureInit()\n .then(_.bind(function () {\n // a save that started before consent stopped storage writes nothing\n if (!this._persists()) {\n return false;\n }\n return this.queueStorage.setItem(this.storageKey, queue).then(function () {\n return true;\n });\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error saving queue', err);\n return false;\n }, this));\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function () {\n this.memQueue = [];\n\n if (this.usePersistence) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.removeItem(this.storageKey);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n }, this));\n } else {\n return Promise.resolve();\n }\n};\n\nexport { RequestQueue };\n","import { Config } from './config';\nimport { Promise } from './promise-polyfill';\nimport { RequestQueue } from './request-queue';\nimport { console_with_prefix, isOnline, _ } from './utils'; // eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function(storageKey, options) {\n this.errorReporter = options.errorReporter;\n this.queue = new RequestQueue(storageKey, {\n errorReporter: _.bind(this.reportError, this),\n queueStorage: options.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n sharedLockTimeoutMS: options.sharedLockTimeoutMS,\n usePersistence: options.usePersistence,\n enqueueThrottleMs: options.enqueueThrottleMs,\n consentGate: options.consentGate\n });\n\n this.libConfig = options.libConfig;\n this.sendRequest = options.sendRequestFunc;\n this.beforeSendHook = options.beforeSendHook;\n this.stopAllBatching = options.stopAllBatchingFunc;\n\n // seed variable batch size + flush interval with configured values\n this.batchSize = this.libConfig['batch_size'];\n this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n\n this.stopped = !this.libConfig['batch_autostart'];\n this.consecutiveRemovalFailures = 0;\n\n // extra client-side dedupe\n this.itemIdsSentSuccessfully = {};\n\n // Make the flush occur at the interval specified by flushIntervalMs, default behavior will attempt consecutive flushes\n // as long as the queue is not empty. This is useful for high-frequency events like Session Replay where we might end up\n // in a request loop and get ratelimited by the server.\n this.flushOnlyOnInterval = options.flushOnlyOnInterval || false;\n\n this._flushPromise = null;\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function(item) {\n return this.queue.enqueue(item, this.flushInterval);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function() {\n this.stopped = false;\n this.consecutiveRemovalFailures = 0;\n return this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function() {\n this.stopped = true;\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n this.timeoutID = null;\n }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function() {\n return this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function() {\n this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function() {\n this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function(flushMS) {\n this.flushInterval = flushMS;\n if (!this.stopped) { // don't schedule anymore if batching has been stopped\n this.timeoutID = setTimeout(_.bind(function() {\n if (!this.stopped) {\n this._flushPromise = this.flush();\n }\n }, this), this.flushInterval);\n }\n};\n\n/**\n * Send a request using the sendRequest callback, but promisified.\n * TODO: sendRequest should be promisified in the first place.\n */\nRequestBatcher.prototype.sendRequestPromise = function(data, options) {\n return new Promise(_.bind(function(resolve) {\n this.sendRequest(data, options, resolve);\n }, this));\n};\n\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function(options) {\n if (this.requestInProgress) {\n logger.log('Flush: Request already in progress');\n return Promise.resolve();\n }\n\n this.requestInProgress = true;\n\n options = options || {};\n var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n var startTime = new Date().getTime();\n var currentBatchSize = this.batchSize;\n\n return this.queue.fillBatch(currentBatchSize)\n .then(_.bind(function(batch) {\n\n // if there's more items in the queue than the batch size, attempt\n // to flush again after the current batch is done.\n var attemptSecondaryFlush = batch.length === currentBatchSize;\n var dataForRequest = [];\n var transformedItems = {};\n _.each(batch, function(item) {\n var payload = item['payload'];\n if (this.beforeSendHook && !item.orphaned) {\n payload = this.beforeSendHook(payload);\n }\n if (payload) {\n // mp_sent_by_lib_version prop captures which lib version actually\n // sends each event (regardless of which version originally queued\n // it for sending)\n if (payload['event'] && payload['properties']) {\n payload['properties'] = _.extend(\n {},\n payload['properties'],\n {'mp_sent_by_lib_version': Config.LIB_VERSION}\n );\n }\n var addPayload = true;\n var itemId = item['id'];\n if (itemId) {\n if ((this.itemIdsSentSuccessfully[itemId] || 0) > 5) {\n this.reportError('[dupe] item ID sent too many times, not sending', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n addPayload = false;\n }\n } else {\n this.reportError('[dupe] found item with no ID', {item: item});\n }\n\n if (addPayload) {\n dataForRequest.push(payload);\n }\n }\n transformedItems[item['id']] = payload;\n }, this);\n\n if (dataForRequest.length < 1) {\n this.requestInProgress = false;\n this.resetFlush();\n return Promise.resolve(); // nothing to do\n }\n\n var removeItemsFromQueue = _.bind(function () {\n return this.queue\n .removeItemsByID(\n _.map(batch, function (item) {\n return item['id'];\n })\n )\n .then(_.bind(function (succeeded) {\n // client-side dedupe\n _.each(batch, _.bind(function(item) {\n var itemId = item['id'];\n if (itemId) {\n this.itemIdsSentSuccessfully[itemId] = this.itemIdsSentSuccessfully[itemId] || 0;\n this.itemIdsSentSuccessfully[itemId]++;\n if (this.itemIdsSentSuccessfully[itemId] > 5) {\n this.reportError('[dupe] item ID sent too many times', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n }\n } else {\n this.reportError('[dupe] found item with no ID while removing', {item: item});\n }\n }, this));\n\n if (succeeded) {\n this.consecutiveRemovalFailures = 0;\n if (this.flushOnlyOnInterval && !attemptSecondaryFlush) {\n this.resetFlush(); // schedule next batch with a delay\n return Promise.resolve();\n } else {\n return this.flush(); // handle next batch if the queue isn't empty\n }\n } else {\n if (++this.consecutiveRemovalFailures > 5) {\n this.reportError('Too many queue failures; disabling batching system.');\n this.stopAllBatching();\n } else {\n this.resetFlush();\n }\n return Promise.resolve();\n }\n }, this));\n }, this);\n\n var batchSendCallback = _.bind(function(res) {\n this.requestInProgress = false;\n\n try {\n\n // handle API response in a try-catch to make sure we can reset the\n // flush operation if something goes wrong\n\n if (options.unloading) {\n // update persisted data to include hook transformations\n return this.queue.updatePayloads(transformedItems);\n } else if (\n _.isObject(res) &&\n res.error === 'timeout' &&\n new Date().getTime() - startTime >= timeoutMS\n ) {\n this.reportError('Network timeout; retrying');\n return this.flush();\n } else if (\n _.isObject(res) &&\n (\n res.httpStatusCode >= 500\n || res.httpStatusCode === 429\n || (res.httpStatusCode <= 0 && !isOnline())\n || res.error === 'timeout'\n )\n ) {\n // network or API error, or 429 Too Many Requests, retry\n var retryMS = this.flushInterval * 2;\n if (res.retryAfter) {\n retryMS = (parseInt(res.retryAfter, 10) * 1000) || retryMS;\n }\n retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n this.reportError('Error; retry in ' + retryMS + ' ms');\n this.scheduleFlush(retryMS);\n return Promise.resolve();\n } else if (_.isObject(res) && res.httpStatusCode === 413) {\n // 413 Payload Too Large\n if (batch.length > 1) {\n var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n this.reportError('413 response; reducing batch size to ' + this.batchSize);\n this.resetFlush();\n return Promise.resolve();\n } else {\n this.reportError('Single-event request too large; dropping', batch);\n this.resetBatchSize();\n return removeItemsFromQueue();\n }\n } else {\n // successful network request+response; remove each item in batch from queue\n // (even if it was e.g. a 400, in which case retrying won't help)\n return removeItemsFromQueue();\n }\n } catch(err) {\n this.reportError('Error handling API response', err);\n this.resetFlush();\n }\n }, this);\n var requestOptions = {\n method: 'POST',\n verbose: true,\n ignore_json_errors: true, // eslint-disable-line camelcase\n timeout_ms: timeoutMS // eslint-disable-line camelcase\n };\n if (options.unloading) {\n requestOptions.transport = 'sendBeacon';\n }\n logger.log('MIXPANEL REQUEST:', dataForRequest);\n return this.sendRequestPromise(dataForRequest, requestOptions).then(batchSendCallback);\n }, this))\n .catch(_.bind(function(err) {\n this.reportError('Error flushing request queue', err);\n this.resetFlush();\n }, this));\n};\n\n/**\n * Log error to global logger and optional user-defined logger.\n */\nRequestBatcher.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n if (this.errorReporter) {\n try {\n if (!(err instanceof Error)) {\n err = new Error(msg);\n }\n this.errorReporter(msg, err);\n } catch(err) {\n logger.error(err);\n }\n }\n};\n\nexport { RequestBatcher };\n","import { _ } from '../utils';\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n * @returns {boolean}\n */\nvar isRecordingExpired = function(serializedRecording) {\n var now = Date.now();\n return !serializedRecording || now > serializedRecording['maxExpires'] || now > serializedRecording['idleExpires'];\n};\n\n\nvar RECORD_ENQUEUE_THROTTLE_MS = 250;\n\nvar validateAllowedOrigins = function(origins, logger) {\n if (!_.isArray(origins)) {\n if (origins) {\n logger.critical('record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled.');\n }\n return [];\n }\n var valid = [];\n for (var i = 0; i < origins.length; i++) {\n try {\n var origin = new URL(origins[i]).origin;\n if (origin === 'null') {\n logger.critical(origins[i] + ' has an opaque origin. Skipping this entry.');\n continue;\n }\n valid.push(origin);\n } catch (e) {\n logger.critical(origins[i] + ' is not a valid origin URL. Skipping this entry.');\n }\n }\n return valid;\n};\n\nexport {\n isRecordingExpired,\n RECORD_ENQUEUE_THROTTLE_MS,\n validateAllowedOrigins\n};\n","// stateless utils\n// mostly from https://github.com/mixpanel/mixpanel-js/blob/989ada50f518edab47b9c4fd9535f9fbd5ec5fc0/src/autotrack-utils.js\n\nimport { _, console_with_prefix, document, safewrap } from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\n\nvar EV_CHANGE = 'change';\nvar EV_CLICK = 'click';\nvar EV_HASHCHANGE = 'hashchange';\nvar EV_INPUT = 'input';\nvar EV_LOAD = 'load';\nvar EV_MP_LOCATION_CHANGE = 'mp_locationchange';\nvar EV_POPSTATE = 'popstate';\n// TODO scrollend isn't available in Safari: document or polyfill?\nvar EV_SCROLLEND = 'scrollend';\nvar EV_SCROLL = 'scroll';\nvar EV_SELECT = 'select';\nvar EV_SUBMIT = 'submit';\nvar EV_TOGGLE = 'toggle';\nvar EV_VISIBILITYCHANGE = 'visibilitychange';\n\nvar CLICK_EVENT_PROPS = [\n 'clientX', 'clientY',\n 'offsetX', 'offsetY',\n 'pageX', 'pageY',\n 'screenX', 'screenY',\n 'x', 'y'\n];\nvar OPT_IN_CLASSES = ['mp-include'];\nvar OPT_OUT_CLASSES = ['mp-no-track'];\nvar SENSITIVE_DATA_CLASSES = OPT_OUT_CLASSES.concat(['mp-sensitive']);\nvar TRACKED_ATTRS = [\n 'aria-label', 'aria-labelledby', 'aria-describedby',\n 'href', 'name', 'role', 'title', 'type'\n];\n\nvar INTERACTIVE_ARIA_ROLES = {\n 'button': true,\n 'checkbox': true,\n 'combobox': true,\n 'grid': true,\n 'link': true,\n 'listbox': true,\n 'menu': true,\n 'menubar': true,\n 'menuitem': true,\n 'menuitemcheckbox': true,\n 'menuitemradio': true,\n 'navigation': true,\n 'option': true,\n 'radio': true,\n 'radiogroup': true,\n 'searchbox': true,\n 'slider': true,\n 'spinbutton': true,\n 'switch': true,\n 'tab': true,\n 'tablist': true,\n 'textbox': true,\n 'tree': true,\n 'treegrid': true,\n 'treeitem': true\n};\n\nvar ALWAYS_NON_INTERACTIVE_TAGS = {\n // Document metadata\n 'base': true,\n 'head': true,\n 'html': true,\n 'link': true,\n 'meta': true,\n 'script': true,\n 'style': true,\n 'title': true,\n // Text formatting\n 'br': true,\n 'hr': true,\n 'wbr': true,\n // Other\n 'noscript': true,\n 'picture': true,\n 'source': true,\n 'template': true,\n 'track': true\n};\n\n// Common container tags that need additional checks\nvar TEXT_CONTAINER_TAGS = {\n 'article': true,\n 'div': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'p': true,\n 'section': true,\n 'span': true\n};\n\nvar EVENT_HANDLER_ATTRIBUTES = [\n 'onclick', 'onmousedown', 'onmouseup', 'onpointerdown', 'onpointerup', 'ontouchend', 'ontouchstart'\n];\n\nvar MAX_DEPTH = 5;\n\nvar logger = console_with_prefix('autocapture');\n\n\nfunction getClasses(el) {\n var classes = {};\n var classList = getClassName(el).split(' ');\n for (var i = 0; i < classList.length; i++) {\n var cls = classList[i];\n if (cls) {\n classes[cls] = true;\n }\n }\n return classes;\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n * @param {Element} el - element to get the className of\n * @returns {string} the element's class\n */\nfunction getClassName(el) {\n switch(typeof el.className) {\n case 'string':\n return el.className;\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n return el.className.baseVal || el.getAttribute('class') || '';\n default: // future proof\n return '';\n }\n}\n\nfunction getPreviousElementSibling(el) {\n if (el.previousElementSibling) {\n return el.previousElementSibling;\n } else {\n do {\n el = el.previousSibling;\n } while (el && !isElementNode(el));\n return el;\n }\n}\n\nfunction getPropertiesFromElement(el, ev, blockAttrsSet, extraAttrs, allowElementCallback, allowSelectors) {\n var props = {\n '$classes': getClassName(el).split(' '),\n '$tag_name': el.tagName.toLowerCase()\n };\n var elId = el.id;\n if (elId) {\n props['$id'] = elId;\n }\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors)) {\n _.each(TRACKED_ATTRS.concat(extraAttrs), function(attr) {\n if (el.hasAttribute(attr) && !blockAttrsSet[attr]) {\n var attrVal = el.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$attr-' + attr] = attrVal;\n }\n }\n });\n }\n\n var nthChild = 1;\n var nthOfType = 1;\n var currentElem = el;\n while (currentElem = getPreviousElementSibling(currentElem)) { // eslint-disable-line no-cond-assign\n nthChild++;\n if (currentElem.tagName === el.tagName) {\n nthOfType++;\n }\n }\n props['$nth_child'] = nthChild;\n props['$nth_of_type'] = nthOfType;\n\n return props;\n}\n\nfunction getPropsForDOMEvent(ev, config) {\n var allowElementCallback = config.allowElementCallback;\n var allowSelectors = config.allowSelectors || [];\n var blockAttrs = config.blockAttrs || [];\n var blockElementCallback = config.blockElementCallback;\n var blockSelectors = config.blockSelectors || [];\n var captureTextContent = config.captureTextContent || false;\n var captureExtraAttrs = config.captureExtraAttrs || [];\n var capturedForHeatMap = config.capturedForHeatMap || false;\n\n // convert array to set every time, as the config may have changed\n var blockAttrsSet = {};\n _.each(blockAttrs, function(attr) {\n blockAttrsSet[attr] = true;\n });\n\n var props = null;\n\n var target = typeof ev.target === 'undefined' ? ev.srcElement : ev.target;\n if (isTextNode(target)) { // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = target.parentNode;\n }\n\n if (\n shouldTrackDomEvent(target, ev) &&\n isElementAllowed(target, ev, allowElementCallback, allowSelectors) &&\n !isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n var targetElementList = [target];\n var curEl = target;\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n targetElementList.push(curEl.parentNode);\n curEl = curEl.parentNode;\n }\n\n var elementsJson = [];\n var href, explicitNoTrack = false;\n _.each(targetElementList, function(el) {\n var shouldTrackDetails = shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors);\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (!blockAttrsSet['href'] && el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href');\n href = shouldTrackDetails && shouldTrackValue(href) && href;\n }\n\n if (isElementBlocked(el, ev, blockElementCallback, blockSelectors)) {\n explicitNoTrack = true;\n }\n\n elementsJson.push(getPropertiesFromElement(el, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors));\n }, this);\n\n if (!explicitNoTrack) {\n var docElement = document['documentElement'];\n props = {\n '$event_type': ev.type,\n '$host': window.location.host,\n '$pathname': window.location.pathname,\n '$elements': elementsJson,\n '$el_attr__href': href,\n '$viewportHeight': Math.max(docElement['clientHeight'], window['innerHeight'] || 0),\n '$viewportWidth': Math.max(docElement['clientWidth'], window['innerWidth'] || 0),\n '$pageHeight': document['body']['offsetHeight'] || 0,\n '$pageWidth': document['body']['offsetWidth'] || 0,\n };\n _.each(captureExtraAttrs, function(attr) {\n if (!blockAttrsSet[attr] && target.hasAttribute(attr)) {\n var attrVal = target.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$el_attr__' + attr] = attrVal;\n }\n }\n });\n\n if (captureTextContent) {\n elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (ev.type === EV_CLICK) {\n _.each(CLICK_EVENT_PROPS, function(prop) {\n if (prop in ev) {\n props['$' + prop] = ev[prop];\n }\n });\n if (capturedForHeatMap) {\n props['$captured_for_heatmap'] = true;\n }\n target = guessRealClickTarget(ev);\n }\n // prioritize text content from \"real\" click target if different from original target\n if (captureTextContent) {\n var elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (target) {\n // target may have been recalculated; check allowlists and blocklists again\n if (\n !isElementAllowed(target, ev, allowElementCallback, allowSelectors) ||\n isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n return null;\n }\n\n var targetProps = getPropertiesFromElement(target, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors);\n props['$target'] = targetProps;\n // pull up more props onto main event props\n props['$el_classes'] = targetProps['$classes'];\n _.extend(props, _.strip_empty_properties({\n '$el_id': targetProps['$id'],\n '$el_tag_name': targetProps['$tag_name']\n }));\n }\n }\n }\n\n return props;\n}\n\n\n/**\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {string} the element's direct text content\n */\nfunction getSafeText(el, ev, allowElementCallback, allowSelectors) {\n var elText = '';\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) && el.childNodes && el.childNodes.length) {\n _.each(el.childNodes, function(child) {\n if (isTextNode(child) && child.textContent) {\n elText += child.textContent.trim()\n // scrub potentially sensitive values\n .split(/(\\s+)/).filter(shouldTrackValue).join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ').replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255);\n }\n });\n }\n\n return elText.trim();\n}\n\nfunction guessRealClickTarget(ev) {\n var target = ev.target;\n var composedPath = ev['composedPath']();\n for (var i = 0; i < composedPath.length; i++) {\n var node = composedPath[i];\n if (\n isTag(node, 'a') ||\n isTag(node, 'button') ||\n isTag(node, 'input') ||\n isTag(node, 'select') ||\n (node.getAttribute && node.getAttribute('role') === 'button')\n ) {\n target = node;\n break;\n }\n if (node === target) {\n break;\n }\n }\n return target;\n}\n\nfunction isElementAllowed(el, ev, allowElementCallback, allowSelectors) {\n if (allowElementCallback) {\n try {\n if (!allowElementCallback(el, ev)) {\n return false;\n }\n } catch (err) {\n logger.critical('Error while checking element in allowElementCallback', err);\n return false;\n }\n }\n\n if (!allowSelectors.length) {\n // no allowlist; all elements are fair game\n return true;\n }\n\n for (var i = 0; i < allowSelectors.length; i++) {\n var sel = allowSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n return false;\n}\n\nfunction isElementBlocked(el, ev, blockElementCallback, blockSelectors) {\n var i;\n\n if (blockElementCallback) {\n try {\n if (blockElementCallback(el, ev)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking element in blockElementCallback', err);\n return true;\n }\n }\n\n if (blockSelectors && blockSelectors.length) {\n // programmatically prevent tracking of elements that match CSS selectors\n for (i = 0; i < blockSelectors.length; i++) {\n var sel = blockSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n }\n\n // allow users to programmatically prevent tracking of elements by adding default classes such as 'mp-no-track'\n var classes = getClasses(el);\n for (i = 0; i < OPT_OUT_CLASSES.length; i++) {\n if (classes[OPT_OUT_CLASSES[i]]) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM node has nodeType Node.ELEMENT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of the correct nodeType\n */\nfunction isElementNode(node) {\n return node && node.nodeType === 1; // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nfunction isTag(el, tag) {\n return el && el.tagName && el.tagName.toLowerCase() === tag.toLowerCase();\n}\n\n/*\n * Check whether a DOM node is a TEXT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of type Node.TEXT_NODE\n */\nfunction isTextNode(node) {\n return node && node.nodeType === 3; // Node.TEXT_NODE - use integer constant for browser portability\n}\n\nfunction minDOMApisSupported() {\n try {\n var testEl = document.createElement('div');\n return !!testEl['matches'];\n } catch (err) {\n return false;\n }\n}\n\nfunction weakSetSupported() {\n return typeof WeakSet !== 'undefined';\n}\n\n/*\n * Check whether a DOM event should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} ev - event to check\n * @returns {boolean} whether the event should be tracked\n */\nfunction shouldTrackDomEvent(el, ev) {\n if (!el || isTag(el, 'html') || !isElementNode(el)) {\n return false;\n }\n var tag = el.tagName.toLowerCase();\n switch (tag) {\n case 'form':\n return ev.type === EV_SUBMIT;\n case 'input':\n if (['button', 'submit'].indexOf(el.getAttribute('type')) === -1) {\n return ev.type === EV_CHANGE;\n } else {\n return ev.type === EV_CLICK;\n }\n case 'select':\n case 'textarea':\n return ev.type === EV_CHANGE;\n default:\n return ev.type === EV_CLICK;\n }\n}\n\nfunction elementLooksSensitive(el) {\n var name = (el.name || el.id || '').toString().toLowerCase();\n if (typeof name === 'string') { // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n var sensitiveNameRegex = /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i;\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM element should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) {\n var i;\n\n if (!isElementAllowed(el, ev, allowElementCallback, allowSelectors)) {\n return false;\n }\n\n for (var curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode) {\n var classes = getClasses(curEl);\n for (i = 0; i < SENSITIVE_DATA_CLASSES.length; i++) {\n if (classes[SENSITIVE_DATA_CLASSES[i]]) {\n return false;\n }\n }\n }\n\n var elClasses = getClasses(el);\n for (i = 0; i < OPT_IN_CLASSES.length; i++) {\n if (elClasses[OPT_IN_CLASSES[i]]) {\n return true;\n }\n }\n\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n if (\n isTag(el, 'input') ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return false;\n }\n\n // don't include hidden or password fields\n var type = el.type || '';\n if (typeof type === 'string') { // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch(type.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n if (elementLooksSensitive(el)) {\n return false;\n }\n\n return true;\n}\n\n\n/*\n * Check whether a string value should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackValue(value) {\n if (value === null || _.isUndefined(value)) {\n return false;\n }\n\n if (typeof value === 'string') {\n value = value.trim();\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n var ccRegex = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false;\n }\n\n // check to see if input value looks like a social security number\n var ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(value)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Creates a cross-browser compatible scroll end function with appropriate event listener.\n * For browsers that support scrollend, returns the original function with scrollend event.\n * For browsers without scrollend support, returns a debounced function that triggers\n * 100ms after the last scroll event to simulate scrollend behavior.\n * @param {Function} originalFunction - The function to call when scrolling ends\n * @returns {Object} Object containing listener function and eventType string\n * @returns {Function} returns.listener - The wrapped function to use as event listener\n * @returns {string} returns.eventType - The event type to listen for ('scrollend' or 'scroll')\n */\nfunction getPolyfillScrollEndFunction(originalFunction) {\n var supportsScrollEnd = 'onscrollend' in window;\n var polyfillFunction = safewrap(originalFunction);\n var polyfillEvent = EV_SCROLLEND;\n if (!supportsScrollEnd) {\n // Polyfill for browsers without scrollend support: wait 100ms after the last scroll event\n // https://developer.chrome.com/blog/scrollend-a-new-javascript-event\n var scrollTimer = null;\n var scrollDelayMs = 100;\n\n polyfillFunction = safewrap(function() {\n clearTimeout(scrollTimer);\n scrollTimer = setTimeout(originalFunction, scrollDelayMs);\n });\n\n polyfillEvent = EV_SCROLL;\n }\n\n return {\n listener: polyfillFunction,\n eventType: polyfillEvent\n };\n}\n\nfunction hasInlineEventHandlers(element) {\n for (var i = 0; i < EVENT_HANDLER_ATTRIBUTES.length; i++) {\n if (element.hasAttribute(EVENT_HANDLER_ATTRIBUTES[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction hasInteractiveAriaRole(element) {\n var role = element.getAttribute('role');\n if (!role) return false;\n\n // Handle invalid markup where multiple roles might be specified\n // Only the first token is recognized per ARIA spec\n var primaryRole = role.trim().split(/\\s+/)[0].toLowerCase();\n\n return INTERACTIVE_ARIA_ROLES[primaryRole];\n}\n\nfunction hasAnyInteractivityIndicators(element) {\n var tagName = element.tagName.toLowerCase();\n\n // Check for interactive HTML elements\n if (tagName === 'button' ||\n tagName === 'input' ||\n tagName === 'select' ||\n tagName === 'textarea' ||\n tagName === 'details' ||\n tagName === 'dialog') {\n return true;\n }\n\n if (element.isContentEditable) {\n return true;\n }\n\n if (element.onclick || element.onmousedown || element.onmouseup || element.ontouchstart || element.ontouchend) {\n return true;\n }\n\n if (hasInlineEventHandlers(element)) {\n return true;\n }\n\n if (hasInteractiveAriaRole(element)) {\n return true;\n }\n\n if (tagName === 'a' && element.hasAttribute('href')) {\n return true;\n }\n\n if (element.hasAttribute('tabindex')) {\n return true;\n }\n\n return false;\n}\n\n\nfunction isDefinitelyNonInteractive(element) {\n if (!element || !element.tagName) {\n return true;\n }\n\n var tagName = element.tagName.toLowerCase();\n\n // These tags are definitely non-interactive\n if (ALWAYS_NON_INTERACTIVE_TAGS[tagName]) {\n return true;\n }\n\n // For all other elements, we can only be certain they're non-interactive if they lack ALL indicators of interactivity\n // Check for any signs of interactivity\n if (hasAnyInteractivityIndicators(element)) {\n return false;\n }\n\n // Check parent chain for interactive context\n var parent = element.parentElement;\n var depth = 0;\n\n while (parent && depth < MAX_DEPTH) {\n if (hasAnyInteractivityIndicators(parent)) {\n return false; // Element is inside an interactive parent\n }\n\n if (parent.getRootNode && parent.getRootNode() !== document) {\n var root = parent.getRootNode();\n if (root.host && hasAnyInteractivityIndicators(root.host)) {\n return false; // Inside an interactive shadow host\n }\n }\n\n parent = parent.parentElement;\n depth++;\n }\n\n // Pure text containers without any interactive context\n if (TEXT_CONTAINER_TAGS[tagName]) {\n // These are non-interactive ONLY if they have no interactive indicators (already checked as part of hasAnyInteractivityIndicators)\n return true;\n }\n\n // Default: we can't be certain it's non-interactive\n return false;\n}\n\n/**\n * Get the composed path of a click event for elements embedded in shadow DOM.\n * @param {Event} event - event to get the composed path from\n * @returns {Array} the composed path of the click event\n*/\nfunction getClickEventComposedPath(event) {\n if ('composedPath' in event) {\n return event['composedPath']();\n }\n\n return [];\n}\n\n/**\n * Get the element from a click event, accounting for elements embedded in shadow DOM.\n * @param {Event} event - event to get the target from\n * @returns {Element | null} the element that was the target of the click event\n */\nfunction getClickEventTargetElement(event) {\n var path = getClickEventComposedPath(event);\n\n if (path && path.length > 0) {\n return path[0];\n }\n\n return event['target'] || event['srcElement'];\n}\n\nexport {\n EV_CHANGE, EV_CLICK, EV_HASHCHANGE, EV_INPUT, EV_LOAD,EV_MP_LOCATION_CHANGE, EV_POPSTATE,\n EV_SCROLL, EV_SCROLLEND, EV_SELECT, EV_SUBMIT, EV_TOGGLE, EV_VISIBILITYCHANGE,\n elementLooksSensitive,\n getClickEventComposedPath,\n getClickEventTargetElement,\n getPolyfillScrollEndFunction,\n getPropsForDOMEvent,\n getSafeText,\n isDefinitelyNonInteractive,\n logger,\n minDOMApisSupported,\n shouldTrackDomEvent, shouldTrackElementDetails, shouldTrackValue,\n weakSetSupported\n};\n","/**\n * @typedef {Object} MaskingConfig\n * @property {string} maskingSelector - Combined CSS selector string to mask\n * @property {string} unmaskingSelector - Combined CSS selector string to unmask\n * @property {boolean} maskAll - Whether to mask all by default\n * @property {RegExp} [_legacyClassRegex] - Legacy class regex for backwards compatibility\n */\n\n/**\n * @typedef {Object} PrivacyConfig\n * @property {MaskingConfig} input - Input masking configuration\n * @property {MaskingConfig} text - Text masking configuration\n */\n\nimport { classMatchesRegex } from './rrweb-entrypoint';\nimport { elementLooksSensitive } from '../autocapture/utils';\n\nvar COMMON_MASK_CLASSES_SELECTOR = '.mp-mask, .fs-mask, .amp-mask, .rr-mask, .ph-mask';\nvar RRWEB_PASSWORD_ATTRIBUTE = 'data-rr-is-password';\nvar ALWAYS_MASKED_INPUT_TYPES = ['password', 'email', 'tel', 'hidden'];\n\n/**\n * Normalizes a selector value to an array of selectors\n * @param {string|string[]|undefined} selector\n * @returns {string[]}\n */\nfunction normalizeSelectors(selector) {\n if (!selector) {\n return [];\n }\n if (Array.isArray(selector)) {\n return selector;\n }\n return [selector];\n}\n\n/**\n * Reads flat config options and normalizes them into internal privacy config structure\n * @param {Object} mixpanelInstance\n * @returns {PrivacyConfig} privacyConfig\n */\nfunction getPrivacyConfig(mixpanelInstance) {\n var privacyConfig = {\n input: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n },\n text: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n }\n };\n\n // Input related config\n var maskInputSelector = mixpanelInstance.get_config('record_mask_input_selector');\n var unmaskInputSelector = mixpanelInstance.get_config('record_unmask_input_selector');\n var maskAllInputs = mixpanelInstance.get_config('record_mask_all_inputs');\n\n privacyConfig.input.maskingSelector = normalizeSelectors(maskInputSelector).join(',');\n privacyConfig.input.unmaskingSelector = normalizeSelectors(unmaskInputSelector).join(',');\n if (maskAllInputs !== undefined) {\n privacyConfig.input.maskAll = maskAllInputs;\n }\n\n // Text related config\n var maskTextSelector = mixpanelInstance.get_config('record_mask_text_selector');\n var unmaskTextSelector = mixpanelInstance.get_config('record_unmask_text_selector');\n var maskAllText = mixpanelInstance.get_config('record_mask_all_text');\n var legacyMaskTextClass = mixpanelInstance.get_config('record_mask_text_class');\n\n var textMaskingSelectors = normalizeSelectors(maskTextSelector);\n\n // Handle legacy record_mask_text_class\n if (legacyMaskTextClass) {\n if (legacyMaskTextClass instanceof RegExp) {\n // For RegExp classes, we'll need to handle this differently in the shouldMaskText function\n privacyConfig.text._legacyClassRegex = legacyMaskTextClass;\n } else {\n // String class name - convert to selector\n var classSelector = '.' + legacyMaskTextClass;\n if (textMaskingSelectors.indexOf(classSelector) === -1) {\n textMaskingSelectors.push(classSelector);\n }\n }\n }\n\n privacyConfig.text.maskingSelector = textMaskingSelectors.join(',');\n privacyConfig.text.unmaskingSelector = normalizeSelectors(unmaskTextSelector).join(',');\n\n // Migrate old config: if only record_mask_text_selector is specified, set maskAll to false\n // preserves behavior where the masking selector defaulted to \"*\"\n if (maskAllText === undefined && maskTextSelector !== undefined) {\n privacyConfig.text.maskAll = false;\n } else if (maskAllText !== undefined) {\n privacyConfig.text.maskAll = maskAllText;\n }\n\n return privacyConfig;\n}\n\n/**\n * Checks if element matches a combined CSS selector\n * @param {HTMLElement} element\n * @param {string} selector - Combined CSS selector (comma-separated)\n * @returns {boolean}\n */\nfunction elementMatchesSelector(element, selector) {\n if (!selector) {\n return false;\n }\n return !!element.closest(selector);\n}\n\n/**\n * Determines if an input should be masked based on privacy config\n * @param {HTMLElement} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskInput(element, privacyConfig) {\n var inputType = (element.getAttribute('type') || '').toLowerCase();\n if (ALWAYS_MASKED_INPUT_TYPES.indexOf(inputType) !== -1) {\n return true;\n }\n\n var autocomplete = (element.getAttribute('autocomplete') || '').toLowerCase();\n if (autocomplete && autocomplete !== '' && autocomplete !== 'off') {\n return true;\n }\n\n if (element.hasAttribute(RRWEB_PASSWORD_ATTRIBUTE)) {\n return true;\n }\n\n if (elementLooksSensitive(element)) {\n return true;\n }\n\n if (privacyConfig.input.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.input.unmaskingSelector)) {\n return false;\n }\n\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.input.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\n/**\n * Determines if text should be masked based on privacy config\n * @param {HTMLElement|null} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskText(element, privacyConfig) {\n if (!element) {\n return false;\n }\n\n // Check legacy class regex if present (for backwards compatibility)\n if (privacyConfig.text._legacyClassRegex) {\n if (classMatchesRegex(element, privacyConfig.text._legacyClassRegex, true)) {\n return true;\n }\n }\n\n if (privacyConfig.text.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.text.unmaskingSelector)) {\n return false;\n }\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.text.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\nexport {\n COMMON_MASK_CLASSES_SELECTOR,\n getPrivacyConfig,\n shouldMaskInput,\n shouldMaskText\n};\n","/**\n * This is a port of the open rrweb network plugin in this PR https://github.com/rrweb-io/rrweb/pull/1105\n * the hope is that eventually this can be replaced with the official plugin once it's published (and we sync the mixpanel rrweb fork)\n *\n * This plugin incorporates some important fixes for fetch/XHR body recording that are not yet in the main rrweb repo, as well as makes\n * header and body recording more restrictive by requiring an allowlist instead of content type / blocklist.\n *\n */\nimport { urlMatchesRegexList, console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('network-plugin');\n\n/**\n * Get the time origin for converting performance timestamps to absolute timestamps.\n * Uses Date.now() - performance.now() instead of performance.timeOrigin because\n * browsers can report timeOrigin values that are skewed from actual time, and some\n * browsers (notably older Safari versions) don't implement timeOrigin at all.\n * See: https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L49-L70\n * @param {Window} win\n * @returns {number}\n */\nfunction getTimeOrigin(win) {\n return Math.round(Date.now() - win.performance.now());\n}\n\n/**\n * @typedef {import('../index.d.ts').InitiatorType} InitiatorType\n * @typedef {import('../index.d.ts').NetworkRequest} NetworkRequest\n * @typedef {import('../index.d.ts').NetworkRecordOptions} NetworkRecordOptions\n * @typedef {import('../index.d.ts').NetworkData} NetworkData\n */\n\n/**\n * @typedef {Record} Headers\n */\n\n/**\n * @typedef {string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream | null} Body\n */\n\n/**\n * @callback networkCallback\n * @param {NetworkData} data\n * @returns {void}\n */\n\n/**\n * @callback listenerHandler\n * @returns {void}\n */\n\n/**\n * @typedef {(PerformanceNavigationTiming | PerformanceResourceTiming) & { responseStatus?: number }} ObservedPerformanceEntry\n */\n\n/**\n * @typedef {Object} RecordPlugin\n * @property {string} name\n * @property {(callback: networkCallback, win: Window, options: NetworkRecordOptions) => listenerHandler} observer\n * @property {NetworkRecordOptions} [options]\n */\n\n/** @type {Required} */\nvar defaultNetworkOptions = {\n initiatorTypes: [\n 'audio',\n 'beacon',\n 'body',\n 'css',\n 'early-hint',\n 'embed',\n 'fetch',\n 'frame',\n 'iframe',\n 'icon',\n 'image',\n 'img',\n 'input',\n 'link',\n 'navigation',\n 'object',\n 'ping',\n 'script',\n 'track',\n 'video',\n 'xmlhttprequest',\n ],\n ignoreRequestFn: function() { return false; },\n recordHeaders: {\n request: [],\n response: [],\n },\n recordBodyUrls: {\n request: [],\n response: [],\n },\n recordInitialRequests: false,\n};\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceNavigationTiming}\n */\nfunction isNavigationTiming(entry) {\n return entry.entryType === 'navigation';\n}\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceResourceTiming}\n */\nfunction isResourceTiming (entry) {\n return entry.entryType === 'resource';\n}\n\nexport function findLast(array, predicate) {\n var length = array.length;\n for (var i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i];\n }\n }\n}\n\n/**\n * Monkey-patches a method on an object with a wrapped version, returning a function that restores the original.\n * Adapted from Sentry's `fill` utility:\n * https://github.com/getsentry/sentry-javascript/blob/de5c5cbe177b4334386e747857225eec36a91ea1/packages/core/src/utils/object.ts#L67-L95\n *\n * @param {object} source - The object containing the method to patch\n * @param {string} name - The method name to patch\n * @param {function} replacementFactory - A function that receives the original method and returns the replacement\n * @returns {function} A function that restores the original method\n */\nexport function patch(source, name, replacementFactory) {\n if (!(name in source) || typeof source[name] !== 'function') {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacementFactory(original);\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n}\n\n\n/**\n * Maximum body size to record (1MB)\n */\nvar MAX_BODY_SIZE = 1024 * 1024;\n\n/**\n * Truncate string if it exceeds max size\n * @param {string} str\n * @returns {string}\n */\nexport function truncateBody(str) {\n if (!str || typeof str !== 'string') {\n return str;\n }\n if (str.length > MAX_BODY_SIZE) {\n logger.error('Body truncated from ' + str.length + ' to ' + MAX_BODY_SIZE + ' characters');\n return str.substring(0, MAX_BODY_SIZE) + '... [truncated]';\n }\n return str;\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initPerformanceObserver(cb, win, options) {\n if (!win.PerformanceObserver) {\n logger.error('PerformanceObserver not supported');\n return function() {\n //\n };\n }\n if (options.recordInitialRequests) {\n var initialPerformanceEntries = win.performance\n .getEntries()\n .filter(function(entry) {\n return isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType));\n });\n cb({\n requests: initialPerformanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n isInitial: true,\n });\n }\n var observer = new win.PerformanceObserver(function(entries) {\n var performanceEntries = entries\n .getEntries()\n .filter(function(entry) {\n return isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType) &&\n entry.initiatorType !== 'xmlhttprequest' &&\n entry.initiatorType !== 'fetch';\n });\n cb({\n requests: performanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n });\n });\n observer.observe({ entryTypes: ['navigation', 'resource'] });\n return function() {\n observer.disconnect();\n };\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for headers instead of supporting boolean options\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordHeaders']} recordHeaders\n * @param {string} headerName\n * @returns {boolean}\n */\nexport function shouldRecordHeader(type, recordHeaders, headerName) {\n if (!recordHeaders[type] || recordHeaders[type].length === 0) {\n return false;\n }\n\n return recordHeaders[type].includes(headerName.toLowerCase());\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for URLs instead of supporting boolean options or by content type\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordBodyUrls']} recordBodyUrls\n * @param {string} url\n * @returns {boolean}\n */\nexport function shouldRecordBody(type, recordBodyUrls, url) {\n if (!recordBodyUrls[type] || recordBodyUrls[type].length === 0) {\n return false;\n }\n\n return urlMatchesRegexList(url, recordBodyUrls[type]);\n}\n\nfunction tryReadXHRBody(body) {\n if (body === null || body === undefined) {\n return null;\n }\n\n var result;\n if (typeof body === 'string') {\n result = body;\n } else if (body instanceof Document) {\n result = body.textContent;\n } else if (body instanceof FormData) {\n result = _.HTTPBuildQuery(body);\n } else if (_.isObject(body)) {\n try {\n result = JSON.stringify(body);\n } catch (e) {\n return 'Failed to stringify response object';\n }\n } else {\n return 'Cannot read body of type ' + typeof body;\n }\n\n return truncateBody(result);\n}\n\n/**\n * @param {Request | Response} r\n * @returns {Promise}\n */\nfunction tryReadFetchBody(r) {\n return new Promise(function(resolve) {\n var timeout = setTimeout(function() {\n resolve('Timeout while trying to read body');\n }, 500);\n try {\n r.clone()\n .text()\n .then(\n function(txt) {\n clearTimeout(timeout);\n resolve(truncateBody(txt));\n },\n function(reason) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(reason));\n }\n );\n } catch (e) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(e));\n }\n });\n}\n\n/**\n * @param {Window} win\n * @param {string} initiatorType\n * @param {string} url\n * @param {number} [after]\n * @param {number} [before]\n * @param {number} [attempt]\n * @returns {Promise}\n */\nfunction getRequestPerformanceEntry(win, initiatorType, url, after, before, attempt) {\n if (attempt === undefined) {\n attempt = 0;\n }\n if (attempt > 10) {\n logger.error('Cannot find performance entry');\n return Promise.resolve(null);\n }\n var urlPerformanceEntries = /** @type {PerformanceResourceTiming[]} */ (\n win.performance.getEntriesByName(url)\n );\n var performanceEntry = findLast(\n urlPerformanceEntries,\n function(entry) {\n return isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (!after || entry.startTime >= after) &&\n (!before || entry.startTime <= before);\n }\n );\n if (!performanceEntry) {\n return new Promise(function(resolve) {\n setTimeout(resolve, 50 * attempt);\n }).then(function() {\n return getRequestPerformanceEntry(\n win,\n initiatorType,\n url,\n after,\n before,\n attempt + 1\n );\n });\n }\n return Promise.resolve(performanceEntry);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initXhrObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return function() {\n //\n };\n }\n var restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n function(/** @type {typeof XMLHttpRequest.prototype.open} */ originalOpen) {\n return function(\n /** @type {string} */ method,\n /** @type {string | URL} */ url,\n /** @type {boolean} */ async,\n username, password\n ) {\n if (async === undefined) {\n async = true;\n }\n var xhr = /** @type {XMLHttpRequest} */ (this);\n var req = new Request(url, { method: method });\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n /** @type {Headers} */\n var requestHeaders = {};\n var originalSetRequestHeader = xhr.setRequestHeader.bind(xhr);\n xhr.setRequestHeader = function(/** @type {string} */ header, /** @type {string} */ value) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n return originalSetRequestHeader(header, value);\n };\n networkRequest.requestHeaders = requestHeaders;\n\n var originalSend = xhr.send.bind(xhr);\n xhr.send = function(/** @type {Body} */ body) {\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n networkRequest.requestBody = tryReadXHRBody(body);\n }\n after = win.performance.now();\n return originalSend(body);\n };\n xhr.addEventListener('readystatechange', function() {\n if (xhr.readyState !== xhr.DONE) {\n return;\n }\n before = win.performance.now();\n /** @type {Headers} */\n var responseHeaders = {};\n var rawHeaders = xhr.getAllResponseHeaders();\n if (rawHeaders) {\n var headers = rawHeaders.trim().split(/[\\r\\n]+/);\n headers.forEach(function(line) {\n if (!line) return;\n var colonIndex = line.indexOf(': ');\n if (colonIndex === -1) return;\n var header = line.substring(0, colonIndex);\n var value = line.substring(colonIndex + 2);\n if (header && shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n }\n networkRequest.responseHeaders = responseHeaders;\n if (\n shouldRecordBody('response', options.recordBodyUrls, req.url)\n ) {\n networkRequest.responseBody = tryReadXHRBody(xhr.response);\n }\n getRequestPerformanceEntry(\n win,\n 'xmlhttprequest',\n req.url,\n after,\n before\n )\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for XHR request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: xhr.status,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function(e) {\n logger.error('Error recording XHR request to ' + req.url + ': ' + String(e));\n });\n });\n\n originalOpen.call(xhr, method, url, async, username, password);\n };\n }\n );\n return function() {\n restorePatch();\n };\n}\n\n/**\n * Build the Request used to inspect an outgoing fetch call.\n *\n * Constructing a Request from another Request marks the source's body as used, which makes\n * the caller's own fetch fail with \"Cannot construct a Request with a Request object that has\n * already been used\". Clone Request inputs first so the object the caller passed stays intact.\n *\n * @param {RequestInfo | URL} input\n * @param {RequestInit} [init]\n * @returns {Request}\n */\nexport function buildRecordedRequest(input, init) {\n if (typeof Request !== 'undefined' && input instanceof Request) {\n var cloned = input.clone();\n return init ? new Request(cloned, init) : cloned;\n }\n return new Request(input, init);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nexport function initFetchObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('fetch')) {\n return function() {\n //\n };\n }\n\n var restorePatch = patch(win, 'fetch', function(/** @type {typeof fetch} */ originalFetch) {\n return function() {\n var req = buildRecordedRequest(arguments[0], arguments[1]);\n /** @type {Response | undefined} */\n var res;\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n var originalFetchPromise;\n var requestBodyPromise = Promise.resolve(undefined);\n var responseBodyResolve;\n var responseBodyPromise = new Promise(function(resolve) {\n responseBodyResolve = resolve;\n });\n try {\n /** @type {Headers} */\n var requestHeaders = {};\n req.headers.forEach(function(value, header) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n });\n networkRequest.requestHeaders = requestHeaders;\n\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n requestBodyPromise = tryReadFetchBody(req)\n .then(function(body) {\n networkRequest.requestBody = body;\n });\n }\n\n after = win.performance.now();\n originalFetchPromise = originalFetch.apply(win, arguments).then(function(response) {\n res = response;\n before = win.performance.now();\n\n /** @type {Headers} */\n var responseHeaders = {};\n res.headers.forEach(function(value, header) {\n if (shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n networkRequest.responseHeaders = responseHeaders;\n\n if (shouldRecordBody('response', options.recordBodyUrls, req.url)) {\n tryReadFetchBody(res).then(function(body) {\n networkRequest.responseBody = body;\n responseBodyResolve();\n });\n } else {\n responseBodyResolve();\n }\n\n return res;\n });\n } catch (e) {\n originalFetchPromise = Promise.reject(e);\n }\n\n // await concurrently so we don't delay the fetch response\n Promise.all([requestBodyPromise, responseBodyPromise, originalFetchPromise])\n .then(function () {\n return getRequestPerformanceEntry(win, 'fetch', req.url, after, before);\n })\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for fetch request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: res ? res.status : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function (e) {\n logger.error('Error recording fetch request to ' + req.url + ': ' + String(e));\n });\n\n return originalFetchPromise;\n };\n });\n return function() {\n restorePatch();\n };\n}\n\n/**\n * @param {networkCallback} callback\n * @param {Window} win\n * @param {NetworkRecordOptions} options\n * @returns {listenerHandler}\n */\nfunction initNetworkObserver(callback, win, options) {\n if (!('performance' in win)) {\n return function() {\n //\n };\n }\n\n var recordHeaders = Object.assign({}, defaultNetworkOptions.recordHeaders, options.recordHeaders || {});\n var recordBodyUrls = Object.assign({}, defaultNetworkOptions.recordBodyUrls, options.recordBodyUrls || {});\n options = Object.assign({}, options, {\n recordHeaders: recordHeaders,\n recordBodyUrls: recordBodyUrls,\n });\n var networkOptions = /** @type {Required} */ Object.assign({}, defaultNetworkOptions, options);\n\n /** @type {networkCallback} */\n var cb = function(data) {\n var requests = data.requests.filter(function(request) {\n var shouldIgnoreUrl = urlMatchesRegexList(request.url, networkOptions.ignoreRequestUrls || []);\n return !shouldIgnoreUrl && !networkOptions.ignoreRequestFn(request);\n });\n if (requests.length > 0 || data.isInitial) {\n callback(Object.assign({}, data, { requests: requests }));\n }\n };\n var performanceObserver = initPerformanceObserver(cb, win, networkOptions);\n var xhrObserver = initXhrObserver(cb, win, networkOptions);\n var fetchObserver = initFetchObserver(cb, win, networkOptions);\n return function() {\n performanceObserver();\n xhrObserver();\n fetchObserver();\n };\n}\n\n// arbitrary .mp suffix in case rrweb does publish this plugin later and we use it but need to handle\n// a changed format in the mixpanel product.\nexport var NETWORK_PLUGIN_NAME = 'rrweb/network@1.mp';\n\n/**\n * @param {NetworkRecordOptions} [options]\n * @returns {RecordPlugin}\n */\nexport var getRecordNetworkPlugin = function(options) {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n };\n};\n","/**\n * @typedef {import('../index').RecordPrivacyConfig} RecordPrivacyConfig\n */\n\nimport { window } from '../window';\nimport { EventType, getRecordConsolePlugin, IncrementalSource } from './rrweb-entrypoint';\nimport { MAX_RECORDING_MS, MAX_VALUE_FOR_MIN_RECORDING_MS, console_with_prefix, NOOP_FUNC, _, localStorageSupported, getLocalStorage, canUseCompressionStream, navigator, userAgent, windowOpera} from '../utils'; // eslint-disable-line camelcase\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { RequestBatcher } from '../request-batcher';\n\nimport { Config } from '../config';\nimport { RECORD_ENQUEUE_THROTTLE_MS, validateAllowedOrigins } from './utils';\nimport { shouldMaskInput, shouldMaskText, getPrivacyConfig } from './masking';\nimport { getRecordNetworkPlugin } from './rrweb-network-plugin';\n\nvar logger = console_with_prefix('recorder');\nvar CompressionStream = window['CompressionStream'];\n\nvar RECORDER_BATCHER_LIB_CONFIG = {\n 'batch_size': 1000,\n 'batch_flush_interval_ms': 10 * 1000,\n 'batch_request_timeout_ms': 90 * 1000,\n 'batch_autostart': true\n};\n\nvar ACTIVE_SOURCES = new Set([\n IncrementalSource.MouseMove,\n IncrementalSource.MouseInteraction,\n IncrementalSource.Scroll,\n IncrementalSource.ViewportResize,\n IncrementalSource.Input,\n IncrementalSource.TouchMove,\n IncrementalSource.MediaInteraction,\n IncrementalSource.Drag,\n IncrementalSource.Selection,\n]);\n\nfunction isUserEvent(ev) {\n return ev.type === EventType.IncrementalSnapshot && ACTIVE_SOURCES.has(ev.data.source);\n}\n\n/**\n * @typedef {Object} SerializedRecording\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayId\n * @property {string} tabId\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} SessionRecordingOptions\n * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks\n * before it stores or sends\n * @property {String} [options.replayId] - unique uuid for a single replay\n * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout\n * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length\n * @property {import('./rrweb-entrypoint').record} [options.rrwebRecord] - rrweb's `record` function\n * @property {Function} [options.onBatchSent] - callback when a batch of events is sent to the server\n * @property {Storage} [options.sharedLockStorage] - optional storage for shared lock, used for test dependency injection\n * optional properties for deserialization:\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp - the unix timestamp of the last recorded event from rrweb\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} UserIdInfo\n * @property {string} distinct_id\n * @property {string} user_id\n * @property {string} device_id\n */\n\n\n/**\n * This class encapsulates a single session recording and its lifecycle.\n * @param {SessionRecordingOptions} options\n */\nvar SessionRecording = function(options) {\n this._mixpanel = options.mixpanelInstance;\n this.consentGate = options.consentGate;\n this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC;\n this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC;\n this._onBatchSent = options.onBatchSent || NOOP_FUNC;\n this._rrwebRecord = options.rrwebRecord || null;\n\n // internal rrweb stopRecording function\n this._stopRecording = null;\n this.replayId = options.replayId;\n\n this.batchStartUrl = options.batchStartUrl || null;\n this.replayStartUrl = options.replayStartUrl || null;\n this.idleExpires = options.idleExpires || null;\n this.maxExpires = options.maxExpires || null;\n this.replayStartTime = options.replayStartTime || null;\n this.lastEventTimestamp = options.lastEventTimestamp || null;\n this.seqNo = options.seqNo || 0;\n\n this.idleTimeoutId = null;\n this.maxTimeoutId = null;\n\n this.recordMaxMs = MAX_RECORDING_MS;\n this.recordMinMs = 0;\n this._recordMinMsCheckStart = null;\n\n // disable persistence if localStorage is not supported\n // request-queue will automatically disable persistence if indexedDB fails to initialize\n var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence();\n\n // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings\n this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId;\n this.queueStorage = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_EVENTS_STORE_NAME, RECORDER_VERSION_DATA);\n this.batcher = new RequestBatcher(this.batcherKey, {\n errorReporter: this.reportError.bind(this),\n flushOnlyOnInterval: true,\n libConfig: RECORDER_BATCHER_LIB_CONFIG,\n sendRequestFunc: this.flushEventsWithOptOut.bind(this),\n queueStorage: this.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n usePersistence: usePersistence,\n stopAllBatchingFunc: this.stopRecording.bind(this),\n consentGate: this.consentGate,\n\n // increased throttle and shared lock timeout because recording events are very high frequency.\n // this will minimize the amount of lock contention between enqueued events.\n // for session recordings there is a lock for each tab anyway, so there's no risk of deadlock between tabs.\n enqueueThrottleMs: RECORD_ENQUEUE_THROTTLE_MS,\n sharedLockTimeoutMS: 10 * 1000,\n });\n};\n\n/**\n * @returns {UserIdInfo}\n */\nSessionRecording.prototype.getUserIdInfo = function () {\n if (this.finalFlushUserIdInfo) {\n return this.finalFlushUserIdInfo;\n }\n\n var userIdInfo = {\n 'distinct_id': String(this._mixpanel.get_distinct_id()),\n };\n\n // send ID management props if they exist\n var deviceId = this._mixpanel.get_property('$device_id');\n if (deviceId) {\n userIdInfo['$device_id'] = deviceId;\n }\n var userId = this._mixpanel.get_property('$user_id');\n if (userId) {\n userIdInfo['$user_id'] = userId;\n }\n return userIdInfo;\n};\n\nSessionRecording.prototype.unloadPersistedData = function () {\n this.batcher.stop();\n\n return this.queueStorage.init().catch(function () {\n this.reportError('Error initializing IndexedDB storage for unloading persisted data.');\n }.bind(this)).then(function () {\n // if the recording is too short, just delete any stored events without flushing\n if (this.getDurationMs() < this._getRecordMinMs()) {\n return this.queueStorage.removeItem(this.batcherKey);\n }\n\n return this.batcher.flush()\n .then(function () {\n return this.queueStorage.removeItem(this.batcherKey);\n }.bind(this));\n }.bind(this));\n};\n\nSessionRecording.prototype.getConfig = function(configVar) {\n return this._mixpanel.get_config(configVar);\n};\n\nSessionRecording.prototype.startRecording = function (shouldStopBatcher) {\n if (this._rrwebRecord === null) {\n this.reportError('rrweb record function not provided. ');\n return;\n }\n\n if (this._stopRecording !== null) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n this.recordMaxMs = this.getConfig('record_max_ms');\n if (this.recordMaxMs > MAX_RECORDING_MS) {\n this.recordMaxMs = MAX_RECORDING_MS;\n logger.critical('record_max_ms cannot be greater than ' + MAX_RECORDING_MS + 'ms. Capping value.');\n }\n\n if (!this.maxExpires) {\n this.maxExpires = new Date().getTime() + this.recordMaxMs;\n }\n\n this.recordMinMs = this._getRecordMinMs();\n\n if (!this.replayStartTime) {\n this.replayStartTime = new Date().getTime();\n this.batchStartUrl = _.info.currentUrl();\n this.replayStartUrl = _.info.currentUrl();\n }\n\n if (shouldStopBatcher || this.recordMinMs > 0) {\n // the primary case for shouldStopBatcher is when we're starting recording after a reset\n // and don't want to send anything over the network until there's\n // actual user activity\n // this also applies if the minimum recording length has not been hit yet\n // so that we don't send data until we know the recording will be long enough\n this.batcher.stop();\n this._recordMinMsCheckStart = null;\n } else {\n this.batcher.start();\n }\n\n var resetIdleTimeout = function () {\n clearTimeout(this.idleTimeoutId);\n var idleTimeoutMs = this.getConfig('record_idle_timeout_ms');\n this.idleTimeoutId = setTimeout(this._onIdleTimeout, idleTimeoutMs);\n this.idleExpires = new Date().getTime() + idleTimeoutMs;\n }.bind(this);\n resetIdleTimeout();\n\n var blockSelector = this.getConfig('record_block_selector');\n if (blockSelector === '' || blockSelector === null) {\n blockSelector = undefined;\n }\n\n var privacyConfig = getPrivacyConfig(this._mixpanel);\n\n var plugins = [];\n if (this.getConfig('record_network')) {\n var options = this.getConfig('record_network_options') || {};\n // don't track requests to Mixpanel /record API\n var ignoreRequestUrls = (options.ignoreRequestUrls || []).slice();\n ignoreRequestUrls.push(this._getApiRoute());\n options.ignoreRequestUrls = ignoreRequestUrls;\n\n plugins.push(getRecordNetworkPlugin(options));\n }\n\n if (this.getConfig('record_console')) {\n plugins.push(\n getRecordConsolePlugin({\n stringifyOptions: {\n stringLengthLimit: 1000,\n numOfKeysLimit: 50,\n depthOfLimit: 2\n }\n })\n );\n }\n\n var validatedOrigins = validateAllowedOrigins(this.getConfig('record_allowed_iframe_origins'), logger);\n\n try {\n this._stopRecording = this._rrwebRecord({\n 'emit': function (ev) {\n if (this.idleExpires && this.idleExpires < ev.timestamp) {\n this._onIdleTimeout();\n return;\n }\n if (this._recordMinMsCheckStart === null) {\n this._recordMinMsCheckStart = ev.timestamp;\n }\n if (isUserEvent(ev)) {\n if (this.batcher.stopped && ev.timestamp - this._recordMinMsCheckStart >= this.recordMinMs) {\n this.batcher.start();\n }\n resetIdleTimeout();\n }\n // promise only used to await during tests\n this.__enqueuePromise = this.batcher.enqueue(ev);\n\n // Capture the timestamp of the last event for duration calculation.\n if (this.lastEventTimestamp === null || ev.timestamp > this.lastEventTimestamp) {\n this.lastEventTimestamp = ev.timestamp;\n }\n }.bind(this),\n 'blockClass': this.getConfig('record_block_class'),\n 'blockSelector': blockSelector,\n 'collectFonts': this.getConfig('record_collect_fonts'),\n 'dataURLOptions': { // canvas image options (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL)\n 'type': 'image/webp',\n 'quality': 0.6\n },\n // mask all inputs and text by default, unmasking is applied via callbacks maskInputFn and maskTextFn\n 'maskAllInputs': true,\n 'maskTextSelector': '*',\n 'maskInputFn': this._getMaskFn(shouldMaskInput, privacyConfig),\n 'maskTextFn': this._getMaskFn(shouldMaskText, privacyConfig),\n 'recordCrossOriginIframes': validatedOrigins.length > 0,\n 'allowedIframeOrigins': validatedOrigins,\n 'recordCanvas': this.getConfig('record_canvas'),\n 'sampling': {\n 'canvas': 15\n },\n 'plugins': plugins,\n });\n } catch (err) {\n this.reportError('Unexpected error when starting rrweb recording.', err);\n }\n\n if (typeof this._stopRecording !== 'function') {\n this.reportError('rrweb failed to start, skipping this recording.');\n this._stopRecording = null;\n this.stopRecording(); // stop batcher looping and any timeouts\n return;\n }\n\n var maxTimeoutMs = this.maxExpires - new Date().getTime();\n this.maxTimeoutId = setTimeout(this._onMaxLengthReached.bind(this), maxTimeoutMs);\n};\n\nSessionRecording.prototype.stopRecording = function (skipFlush) {\n // store the user ID info in case this is getting called in mixpanel.reset()\n this.finalFlushUserIdInfo = this.getUserIdInfo();\n\n if (!this.isRrwebStopped()) {\n try {\n this._stopRecording();\n } catch (err) {\n this.reportError('Error with rrweb stopRecording', err);\n }\n this._stopRecording = null;\n }\n\n var flushPromise;\n if (this.batcher.stopped) {\n // never got user activity to flush after reset, so just clear the batcher\n flushPromise = this.batcher.clear();\n } else if (!skipFlush) {\n // flush any remaining events from running batcher\n flushPromise = this.batcher.flush();\n }\n this.batcher.stop();\n\n clearTimeout(this.idleTimeoutId);\n clearTimeout(this.maxTimeoutId);\n return flushPromise;\n};\n\nSessionRecording.prototype.isRrwebStopped = function () {\n return this._stopRecording === null;\n};\n\n\n/**\n * Flushes the current batch of events to the server, or stops recording if consent stops the calls.\n */\nSessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) {\n if (!this.consentGate.allowsApiCalls()) {\n this.stopRecording();\n cb({error: 'Tracking has been opted out, stopping recording.'});\n return;\n }\n this._flushEvents(data, options, cb);\n};\n\n/**\n * @returns {SerializedRecording}\n */\nSessionRecording.prototype.serialize = function () {\n // don't break if mixpanel instance was destroyed at some point\n var tabId;\n try {\n tabId = this._mixpanel.get_tab_id();\n } catch (e) {\n this.reportError('Error getting tab ID for serialization ', e);\n tabId = null;\n }\n\n return {\n 'replayId': this.replayId,\n 'seqNo': this.seqNo,\n 'replayStartTime': this.replayStartTime,\n 'batchStartUrl': this.batchStartUrl,\n 'replayStartUrl': this.replayStartUrl,\n 'lastEventTimestamp': this.lastEventTimestamp,\n 'idleExpires': this.idleExpires,\n 'maxExpires': this.maxExpires,\n 'tabId': tabId,\n };\n};\n\n\n/**\n * @static\n * @param {SerializedRecording} serializedRecording\n * @param {SessionRecordingOptions} options\n * @returns {SessionRecording}\n */\nSessionRecording.deserialize = function (serializedRecording, options) {\n var recording = new SessionRecording(_.extend({}, options, {\n replayId: serializedRecording['replayId'],\n batchStartUrl: serializedRecording['batchStartUrl'],\n replayStartUrl: serializedRecording['replayStartUrl'],\n idleExpires: serializedRecording['idleExpires'],\n maxExpires: serializedRecording['maxExpires'],\n replayStartTime: serializedRecording['replayStartTime'],\n lastEventTimestamp: serializedRecording['lastEventTimestamp'],\n seqNo: serializedRecording['seqNo'],\n sharedLockStorage: options.sharedLockStorage,\n }));\n\n return recording;\n};\n\nSessionRecording.prototype._getApiRoute = function () {\n return this.getConfig('api_routes')['record'];\n};\n\n// consent can be withdrawn while the batch is compressed, so it is checked again before sending\nSessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) {\n if (!this.consentGate.allowsApiCalls()) {\n callback(0);\n return;\n }\n var onSuccess = function (response, responseBody) {\n // Update batch specific props only if the request was successful to guarantee ordering.\n // RequestBatcher will always flush the next batch after the previous one succeeds.\n // extra check to see if the replay ID has changed so that we don't increment the seqNo on the wrong replay\n if (response.status === 200 && this.replayId === currentReplayId) {\n this.seqNo++;\n this.batchStartUrl = _.info.currentUrl();\n }\n\n this._onBatchSent();\n callback({\n status: 0,\n httpStatusCode: response.status,\n responseBody: responseBody,\n retryAfter: response.headers.get('Retry-After')\n });\n }.bind(this);\n var apiHost = (this._mixpanel.get_api_host && this._mixpanel.get_api_host('record')) || this.getConfig('api_host');\n window['fetch'](apiHost + '/' + this._getApiRoute() + '?' + new URLSearchParams(reqParams), {\n 'method': 'POST',\n 'headers': {\n 'Authorization': 'Basic ' + btoa(this.getConfig('token') + ':'),\n 'Content-Type': 'application/octet-stream'\n },\n 'body': reqBody,\n }).then(function (response) {\n response.json().then(function (responseBody) {\n onSuccess(response, responseBody);\n }).catch(function (error) {\n callback({error: error});\n });\n }).catch(function (error) {\n callback({error: error, httpStatusCode: 0});\n });\n};\n\nSessionRecording.prototype._flushEvents = function(data, options, callback) {\n var numEvents = data.length;\n\n if (numEvents > 0) {\n var replayId = this.replayId;\n\n // each rrweb event has a timestamp - leverage those to get time properties\n var batchStartTime = Infinity;\n var batchEndTime = -Infinity;\n var hasFullSnapshot = false;\n for (var i = 0; i < numEvents; i++) {\n batchStartTime = Math.min(batchStartTime, data[i].timestamp);\n batchEndTime = Math.max(batchEndTime, data[i].timestamp);\n if (data[i].type === EventType.FullSnapshot) {\n hasFullSnapshot = true;\n }\n }\n\n if (this.seqNo === 0) {\n if (!hasFullSnapshot) {\n callback({error: 'First batch does not contain a full snapshot. Aborting recording.'});\n this.stopRecording(true);\n return;\n }\n this.replayStartTime = batchStartTime;\n } else if (!this.replayStartTime) {\n this.reportError('Replay start time not set but seqNo is not 0. Using current batch start time as a fallback.');\n this.replayStartTime = batchStartTime;\n }\n\n var replayLengthMs = batchEndTime - this.replayStartTime;\n\n var reqParams = {\n '$current_url': this.batchStartUrl,\n '$lib_version': Config.LIB_VERSION,\n 'batch_start_time': batchStartTime / 1000,\n 'mp_lib': 'web',\n 'replay_id': replayId,\n 'replay_length_ms': replayLengthMs,\n 'replay_start_time': this.replayStartTime / 1000,\n 'replay_start_url': this.replayStartUrl,\n 'seq': this.seqNo\n };\n var eventsJson = JSON.stringify(data);\n Object.assign(reqParams, this.getUserIdInfo());\n\n var sendUncompressed = function() {\n reqParams['format'] = 'body';\n this._sendRequest(replayId, reqParams, eventsJson, callback);\n }.bind(this);\n\n if (canUseCompressionStream(userAgent, navigator.vendor, windowOpera)) {\n var jsonStream = new Blob([eventsJson], {type: 'application/json'}).stream();\n var gzipStream = jsonStream.pipeThrough(new CompressionStream('gzip'));\n new Response(gzipStream)\n .blob()\n .then(function(compressedBlob) {\n reqParams['format'] = 'gzip';\n this._sendRequest(replayId, reqParams, compressedBlob, callback);\n }.bind(this), function(err) {\n this.reportError('Error compressing session recording batch; sending uncompressed', err);\n sendUncompressed();\n }.bind(this));\n } else {\n sendUncompressed();\n }\n }\n};\n\n\nSessionRecording.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n try {\n if (!err && !(msg instanceof Error)) {\n msg = new Error(msg);\n }\n this.getConfig('error_reporter')(msg, err);\n } catch(err) {\n logger.error(err);\n }\n};\n\n/**\n * Calculates the duration of the recording in milliseconds, based on the start time and time of last recorded event.\n * @returns {number} The duration of the recording in milliseconds. Returns 0 if recording hasn't started.\n */\nSessionRecording.prototype.getDurationMs = function() {\n if (this.replayStartTime === null) {\n return 0;\n }\n\n // If the recording has no events, assume it is in progress and use the current time as the end time.\n if (this.lastEventTimestamp === null) {\n return new Date().getTime() - this.replayStartTime;\n }\n\n return this.lastEventTimestamp - this.replayStartTime;\n};\n\n/**\n * Lazily loads the minimum recording length config in milliseconds, respecting the maximum limit.\n * @returns {number} The minimum recording length in milliseconds.\n */\nSessionRecording.prototype._getRecordMinMs = function() {\n var configValue = this.getConfig('record_min_ms');\n\n if (configValue > MAX_VALUE_FOR_MIN_RECORDING_MS) {\n logger.critical('record_min_ms cannot be greater than ' + MAX_VALUE_FOR_MIN_RECORDING_MS + 'ms. Capping value.');\n return MAX_VALUE_FOR_MIN_RECORDING_MS;\n }\n\n return configValue;\n};\n\n/**\n * Creates a masking function for rrweb's maskInputFn or maskTextFn\n * @param {(element: HTMLElement, privacyConfig: RecordPrivacyConfig) => boolean} shouldMaskFn - Function that determines if element should be masked\n * @param {RecordPrivacyConfig} privacyConfig - Privacy configuration\n * @returns {(text: string, element: HTMLElement) => string} Function that masks text based on privacy config\n */\nSessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) {\n return function(text, element) {\n // whitespace-only text has nothing to mask, and dropping it would join adjacent words\n // (e.g. a space text node between two inline elements)\n if (!text.trim().length) {\n return text;\n }\n\n var shouldMask = true;\n try {\n shouldMask = shouldMaskFn(element, privacyConfig);\n } catch (err) {\n this.reportError('Error checking if text should be masked, defaulting to masked', err);\n }\n\n if (shouldMask) {\n var textLength = Math.min(text.length, 10000); // limit to 10000 chars to optimize performance\n return '*'.repeat(textLength);\n } else {\n return text;\n }\n }.bind(this);\n};\n\nexport { SessionRecording };\n","import { Promise } from '../promise-polyfill';\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { SessionRecording } from './session-recording';\nimport { isRecordingExpired } from './utils';\n\n/**\n * Module for handling the storage and retrieval of recording metadata as well as any active recordings.\n * Makes sure that only one tab can be recording at a time.\n */\nvar RecordingRegistry = function (options) {\n /** @type {IDBStorageWrapper} */\n this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA);\n this.errorReporter = options.errorReporter;\n this.mixpanelInstance = options.mixpanelInstance;\n this.consentGate = options.consentGate;\n this.sharedLockStorage = options.sharedLockStorage;\n};\n\nRecordingRegistry.prototype.isPersistenceEnabled = function() {\n return this.consentGate.allowsPersistence();\n};\n\nRecordingRegistry.prototype.handleError = function (err) {\n this.errorReporter('IndexedDB error: ', err);\n};\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n */\nRecordingRegistry.prototype.setActiveRecording = function (serializedRecording) {\n // a recording that resumes after consent stops storage writes nothing\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve();\n }\n\n var tabId = serializedRecording['tabId'];\n if (!tabId) {\n console.warn('No tab ID is set, cannot persist recording metadata.');\n return Promise.resolve();\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.setItem(tabId, serializedRecording);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\n/**\n * @returns {Promise}\n */\nRecordingRegistry.prototype.getActiveRecording = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve(null);\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.getItem(this.mixpanelInstance.get_tab_id());\n }.bind(this))\n .then(function (serializedRecording) {\n return isRecordingExpired(serializedRecording) ? null : serializedRecording;\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nRecordingRegistry.prototype.clearActiveRecording = function () {\n // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion.\n // this will ensure the next pageload will flush the remaining events, but not try to continue the recording.\n // without persistence the entry is left as it is, and its unsent events wait for a load that allows them.\n return this.markActiveRecordingExpired();\n};\n\nRecordingRegistry.prototype.markActiveRecordingExpired = function () {\n return this.getActiveRecording()\n .then(function (serializedRecording) {\n if (serializedRecording) {\n serializedRecording['maxExpires'] = 0;\n return this.setActiveRecording(serializedRecording);\n }\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\n/**\n * Flush any inactive recordings from the registry to minimize data loss.\n * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch.\n */\nRecordingRegistry.prototype.flushInactiveRecordings = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve([]);\n }\n\n return this.idb.init()\n .then(function() {\n return this.idb.getAll();\n }.bind(this))\n .then(function (serializedRecordings) {\n // clean up any expired recordings from the registry, non-expired ones may be active in other tabs\n var unloadPromises = serializedRecordings\n .filter(function (serializedRecording) {\n return isRecordingExpired(serializedRecording);\n })\n .map(function (serializedRecording) {\n var sessionRecording = SessionRecording.deserialize(serializedRecording, {\n mixpanelInstance: this.mixpanelInstance,\n consentGate: this.consentGate,\n sharedLockStorage: this.sharedLockStorage\n });\n return sessionRecording.unloadPersistedData()\n .then(function () {\n // expired recording was successfully flushed, we can clean it up from the registry\n return this.idb.removeItem(serializedRecording['tabId']);\n }.bind(this))\n .catch(this.handleError.bind(this));\n }.bind(this));\n\n return Promise.all(unloadPromises);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nexport { RecordingRegistry };\n","/**\n * What the services ask before they store or send on their own. A ConsentManager is one; a new\n * storage write or network send must ask it too.\n * @typedef {Object} ConsentGate\n * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and\n * replay methods run\n * @property {function(): boolean} allowsSending whether tracking requests go out\n * @property {function(): boolean} allowsFetching whether feature flags and remote settings are\n * fetched\n * @property {function(): boolean} allowsStoring whether consent allows storing data about the\n * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them\n * @property {function(): boolean} allowsPersistence whether the services may write to browser\n * storage: consent allows storing, and disable_persistence is off. Without it they keep their data\n * in memory.\n */\n\nimport { console } from './utils';\n\n/**\n * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send',\n * 'fetch' or 'store' now\n * @param {function(string): *} getConfigFunc\n * @returns {ConsentGate}\n */\nfunction buildConsentGate(allowsFunc, getConfigFunc) {\n var gate = {\n // if asking throws, the call runs\n allowsApiCalls: function() {\n try {\n return allowsFunc('api_calls');\n } catch (err) {\n console.error('Unexpected error when checking tracking opt-out status: ' + err);\n return true;\n }\n },\n allowsSending: function() {\n return allowsFunc('send');\n },\n allowsFetching: function() {\n return allowsFunc('fetch');\n },\n allowsStoring: function() {\n return allowsFunc('store');\n },\n allowsPersistence: function() {\n return gate.allowsStoring() && !getConfigFunc('disable_persistence');\n }\n };\n return gate;\n}\n\n/**\n * The consent gate the recorder bundle builds when it starts, and hands to its services. The core\n * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name,\n * the bundle being built separately. A core without it only knows the opt-out, through\n * has_opted_out_tracking().\n * @param {Object} mixpanelInstance\n * @returns {ConsentGate}\n */\nfunction consentGateFor(mixpanelInstance) {\n return buildConsentGate(\n function(capability) {\n var consentAllows = mixpanelInstance['_consent_allows'];\n if (typeof consentAllows === 'function') {\n return !!consentAllows.call(mixpanelInstance, capability);\n }\n return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking();\n },\n function(key) {\n return mixpanelInstance.get_config(key);\n }\n );\n}\n\nexport { buildConsentGate, consentGateFor };\n","import { record } from './rrweb-entrypoint';\nimport { Promise } from '../promise-polyfill';\nimport { SessionRecording } from './session-recording';\nimport { RecordingRegistry } from './recording-registry';\nimport { consentGateFor } from '../consent-gate';\n\nimport { console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('recorder');\n\n/**\n * Recorder API: bundles rrweb and and exposes methods to start and stop recordings.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n*/\nvar MixpanelRecorder = function(mixpanelInstance, rrwebRecord, sharedLockStorage) {\n this.mixpanelInstance = mixpanelInstance;\n this.rrwebRecord = rrwebRecord || record;\n this.sharedLockStorage = sharedLockStorage;\n this.consentGate = consentGateFor(mixpanelInstance);\n\n /**\n * @member {import('./registry').RecordingRegistry}\n */\n this.recordingRegistry = new RecordingRegistry({\n mixpanelInstance: this.mixpanelInstance,\n consentGate: this.consentGate,\n errorReporter: logger.error,\n sharedLockStorage: sharedLockStorage\n });\n this._flushInactivePromise = this.recordingRegistry.flushInactiveRecordings();\n\n this.activeRecording = null;\n this.stopRecordingInProgress = false;\n};\n\nMixpanelRecorder.prototype.startRecording = function(options) {\n options = options || {};\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n var onIdleTimeout = function () {\n logger.log('Idle timeout reached, restarting recording.');\n this.resetRecording();\n }.bind(this);\n\n var onMaxLengthReached = function () {\n logger.log('Max recording length reached, stopping recording.');\n this.resetRecording();\n }.bind(this);\n\n var onBatchSent = function () {\n this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n this['__flushPromise'] = this.activeRecording.batcher._flushPromise;\n }.bind(this);\n\n /**\n * @type {import('./session-recording').SessionRecordingOptions}\n */\n var sessionRecordingOptions = {\n mixpanelInstance: this.mixpanelInstance,\n consentGate: this.consentGate,\n onBatchSent: onBatchSent,\n onIdleTimeout: onIdleTimeout,\n onMaxLengthReached: onMaxLengthReached,\n replayId: _.UUID(),\n rrwebRecord: this.rrwebRecord,\n sharedLockStorage: this.sharedLockStorage\n };\n\n if (options.activeSerializedRecording) {\n this.activeRecording = SessionRecording.deserialize(options.activeSerializedRecording, sessionRecordingOptions);\n } else {\n this.activeRecording = new SessionRecording(sessionRecordingOptions);\n }\n\n this.activeRecording.startRecording(options.shouldStopBatcher);\n return this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n};\n\nMixpanelRecorder.prototype.stopRecording = function() {\n // Prevents activeSerializedRecording from being reused when stopping the recording.\n this.stopRecordingInProgress = true;\n return this._stopCurrentRecording(false, true).then(function() {\n return this.recordingRegistry.clearActiveRecording();\n }.bind(this)).then(function() {\n this.stopRecordingInProgress = false;\n }.bind(this));\n};\n\nMixpanelRecorder.prototype.pauseRecording = function() {\n return this._stopCurrentRecording(false);\n};\n\nMixpanelRecorder.prototype._stopCurrentRecording = function(skipFlush, disableActiveRecording) {\n if (this.activeRecording) {\n var stopRecordingPromise = this.activeRecording.stopRecording(skipFlush);\n if (disableActiveRecording) {\n this.activeRecording = null;\n }\n return stopRecordingPromise;\n }\n return Promise.resolve();\n};\n\nMixpanelRecorder.prototype.resumeRecording = function (startNewIfInactive) {\n if (this.activeRecording && this.activeRecording.isRrwebStopped()) {\n this.activeRecording.startRecording(false);\n return Promise.resolve(null);\n }\n\n return this.recordingRegistry.getActiveRecording()\n .then(function (activeSerializedRecording) {\n if (activeSerializedRecording && !this.stopRecordingInProgress) {\n return this.startRecording({activeSerializedRecording: activeSerializedRecording});\n } else if (startNewIfInactive) {\n return this.startRecording({shouldStopBatcher: false});\n } else {\n logger.log('No resumable recording found.');\n return null;\n }\n }.bind(this));\n};\n\n\nMixpanelRecorder.prototype.resetRecording = function () {\n this.stopRecording();\n this.startRecording({shouldStopBatcher: true});\n};\n\nMixpanelRecorder.prototype.isRecording = function () {\n return this.activeRecording && !this.activeRecording.isRrwebStopped();\n};\n\nMixpanelRecorder.prototype.getActiveReplayId = function () {\n if (this.isRecording()) {\n return this.activeRecording.replayId;\n } else {\n return null;\n }\n};\n\n// getter so that older mixpanel-core versions can still retrieve the replay ID\n// when pulling the latest recorder bundle from the CDN\nObject.defineProperty(MixpanelRecorder.prototype, 'replayId', {\n get: function () {\n return this.getActiveReplayId();\n }\n});\n\n\nexport { MixpanelRecorder };\n","import { window } from '../window';\nimport { RECORDER_GLOBAL_NAME } from '../config';\nimport { MixpanelRecorder } from './recorder';\n\nwindow[RECORDER_GLOBAL_NAME] = MixpanelRecorder;\n"],"names":["win","loc","Config","RECORDER_GLOBAL_NAME","_array_like_to_array","arr","len","i","arr2","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_async_to_generator","fn","self","args","err","_construct","Parent","Class","_is_native_reflect_construct","Constructor","instance","_set_prototype_of","_defineProperties","target","props","descriptor","_create_class","protoProps","staticProps","_extends","source","_get_prototype_of","o","_inherits","subClass","superClass","_instanceof","left","right","_is_native_function","_object_without_properties_loose","excluded","sourceKeys","p","_type_of","obj","_unsupported_iterable_to_array","minLen","n","_wrap_native_super","_cache","Wrapper","result","_","_create_for_of_iterator_helper_loose","allowArrayLike","it","_ts_generator","thisArg","body","f","y","g","verb","v","step","op","e","_ts_values","s","m","__defProp$1","__defNormalProp$1","__publicField$1","_a","__defProp$1$1","__defNormalProp$1$1","__publicField$1$1","NodeType$3","NodeType2","testableAccessors$1","testableMethods$1","untaintedBasePrototype$1","isAngularZonePresent$1","getUntaintedPrototype$1","defaultObj","defaultPrototype","accessorNames","isUntaintedAccessors","accessor","_a2","_b","methodNames","isUntaintedMethods","method","iframeEl","untaintedObject","untaintedAccessorCache$1","getUntaintedAccessor$1","cacheKey","untaintedPrototype","untaintedAccessor","untaintedMethodCache$1","getUntaintedMethod$1","untaintedMethod","childNodes$1","n2","parentNode$1","parentElement$1","textContent$1","contains$1","other","getRootNode$1","host$1","styleSheets$1","shadowRoot$1","querySelector$1","selectors","querySelectorAll$1","mutationObserverCtor$1","patch$1$1","name","replacement","original","wrapped","index$1","isElement","isShadowRoot","hostEl","isNativeShadowDom","shadowRoot2","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule2","statement","stringifyStylesheet","s2","rules2","sheetHref","stringifiedRules","stringifyRule","isCSSImportRule","importStringified","absolutifyURLs","ruleStringified","isCSSStyleRule","fixSafariColons","cssStringified","regex","Mirror","_proto","id","permanent","_this","childNode","node2","meta","oldNode","createMirror$2","maskInputValue","param","element","maskInputOptions","tagName","type","maskInputFn","text","actualType","toLowerCase","str","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","ctx","chunkSize","x2","getImageData","originalGetImageData","pixelBuffer","pixel","getInputType","extractFileExtension","path","baseURL","url","match","_ref","extractOrigin","origin","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","parts","_iterator","_step","part","normalizeCssString","_testNoPxNorm","splitCssText","style","childNodes2","splits","iterCount","cssTextNorm","normFactor","i2","textContentNorm","jLimit","j","startSubstring","cssNormSplits","splitNorm","prevTextContent","prevMinLength","k","normPart","markCssSplits","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName$1","processedTagName","canvasService","canvasCtx","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars2","output","absoluteToDoc","descriptorsStr","inParens","c2","cachedDocument","getHref","isSVGElement","el","customHref","a2","transformAttribute","ignoreAttribute","_value","_isBlockedElement","blockClass","blockSelector","eIndex","className","e2","classMatchesRegex$1","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","listener","iframeLoadTimeout","fired","readyState","timer","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","options","mirror2","needsMask","inlineStylesheet","_options_maskInputOptions","maskTextFn","_options_dataURLOptions","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","_options_newlyAddedElement","newlyAddedElement","_options_cssCaptured","cssCaptured","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parent","parentTagName","textContent2","isStyle","isScript","needBlock","attributes","attr","stylesheet","cssText1","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","imageSrc","priorCrossOrigin","recordInlineImage","mediaAttributes","_n2_getBoundingClientRect","width","height","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","_options_skipChild","skipChild","_options_inlineStylesheet","_options_inlineImages","_options_recordCanvas","onSerialize","onIframeLoad","_options_iframeLoadTimeout","onStylesheetLoad","_options_stylesheetLoadTimeout","stylesheetLoadTimeout","_options_keepIframeSrcFn","_options_preserveWhiteSpace","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","shadowRootEl","bypassOptions","childN","serializedChildNode","shadowRootEl1","_iterator1","_step1","childN1","serializedChildNode1","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","tmp","_ref_blockClass","_ref_blockSelector","_ref_maskTextClass","_ref_maskTextSelector","_ref_inlineStylesheet","_ref_inlineImages","_ref_recordCanvas","_ref_maskAllInputs","maskAllInputs","_ref_slimDOM","slimDOM","_ref_keepIframeSrcFn","getDefaultExportFromCjs$1","getAugmentedNamespace$1","f2","a22","d","picocolors_browser$1","x$1","create$1","picocolors_browserExports$1","__viteBrowserExternal$2","__viteBrowserExternal$1$1","require$$2$1","pico$1","terminalHighlight$1$1","CssSyntaxError$3$1","Error1","CssSyntaxError","message","line","column","file","plugin22","color","css","lines","start","end","maxWidth","mark","aside","_pico$1_createColors","bold","gray","red","index2","number","gutter","spacing","code","cssSyntaxError$1","symbols$1","DEFAULT_RAW$1","capitalize$1","Stringifier$2$1","Stringifier","builder","semicolon","params","detect","buf","depth","indent","between","after","last","child","before","string","own","root2","prop","raw","stringifier$1","Stringifier$1$1","stringify$4$1","stringify_1$1","isClean$2$1","my$2$1","CssSyntaxError$2$1","Stringifier2$1","stringify$3$1","cloneNode$1","cloned","Node$4$1","Node2","defaults","add","overrides","keepBetween","opts","_this_rangeBy","next","stringRepresentation","defaultType","_len","nodes","_key","bookmark","foundSelf","result2","inputs","fixed","emitInputs","inputsNextIndex","inputId","input2","stringifier2","data","node$1","Node$3$1","Declaration$4$1","Declaration","declaration$1","urlAlphabet$1","nanoid$1$1","size","nonSecure$1","SourceMapConsumer$2$1","SourceMapGenerator$2$1","existsSync$1","readFileSync$1","dirname$1$1","join$1","fromBase64$1","PreviousMap$2$1","PreviousMap","prev","baseCharsetUri","baseUri","charsetUri","uri","encoding","sourceMapString","map","comments","prevPath","map1","previousMap$1","SourceMapConsumer$1$1","SourceMapGenerator$1$1","fileURLToPath$1","pathToFileURL$1$1","isAbsolute$1","resolve$1$1","nanoid$2","terminalHighlight$2","CssSyntaxError$1$1","PreviousMap$1$1","fromOffsetCache$1","sourceMapAvailable$1$1","pathAvailable$1$1","Input$4$1","Input","endLine","endColumn","pos1","pos2","offset","lastLine","lineToIndex","prevIndex","l2","min","max","mid","consumer","from","to","fromUrl","json","_i","_iter","input$1","SourceMapConsumer$3","SourceMapGenerator$3","dirname$2","relative$1","resolve$2","sep$1","pathToFileURL$2","Input$3$1","sourceMapAvailable$2","pathAvailable$2","MapGenerator$2$1","MapGenerator","stringify2","cssString","content","eol","noSource","mapping","childless","annotation","cached","already","fileURL","mapGenerator$1","Node$2$1","Comment$4$1","Comment","comment$1","isClean$1$1","my$1$1","Declaration$3$1","Comment$3$1","Node$1$1","parse$4$1","Rule$4$1","AtRule$4$1","Root$6$1","cleanSource$1","markDirtyUp$1","Container$7$1","Container","children","callback","iterator","condition","_node2","cb","exist","existIndex","sample","i21","processed","pattern","decl","selector","dependant","container$1","Container$6$1","LazyResult$4$1","Processor$3$1","Document$3$1","Document2","lazy","document$1$1","printed$1","warnOnce$2$1","Warning$2$1","Warning","range","opt","warning$1","Warning$1$1","Result$3$1","Result","processor2","warning2","result$1","SINGLE_QUOTE$1","DOUBLE_QUOTE$1","BACKSLASH$1","SLASH$1","NEWLINE$1","SPACE$1","FEED$1","TAB$1","CR$1","OPEN_SQUARE$1","CLOSE_SQUARE$1","OPEN_PARENTHESES$1","CLOSE_PARENTHESES$1","OPEN_CURLY$1","CLOSE_CURLY$1","SEMICOLON$1","ASTERISK$1","COLON$1","AT$1","RE_AT_END$1","RE_WORD_END$1","RE_BAD_BRACKET$1","RE_HEX_ESCAPE$1","tokenize$1","ignore","quote","escape","escaped","escapePos","currentToken","length","buffer","returned","position","unclosed","what","endOfFile","nextToken","ignoreUnclosed","controlChar","back","token","Container$5$1","AtRule$3$1","AtRule","_Container$5$1_prototype_append","_Container$5$1_prototype_prepend","atRule$1","Container$4$1","LazyResult$3$1","Processor$2$1","Root$5$1","Root","root$1","list$2$1","spaces","separators","array","current","split","func","inQuote","prevQuote","letter","list_1$1","Container$3$1","list$1$1","Rule$3$1","Rule","values","sep2","rule$1","Declaration$2$1","tokenizer2$1","Comment$2$1","AtRule$2$1","Root$4$1","Rule$2$1","SAFE_COMMENT_NEIGHBOR$1","findLastWithPosition$1","tokens","Parser$1$1","Parser","shift","open","brackets","colon","founded","_step_value","customProperty","firstSpaces","cache","type1","hasWord","bracket","clean","all","lastTokenType","parser$1","Container$2$1","Parser2$1","Input$2$1","parse$3$1","parser2","parse_1$1","isClean$3","my$3","MapGenerator$1$1","stringify$2$1","Container$1$1","Document$2$1","warnOnce$1$1","Result$2$1","parse$2$1","Root$3$1","TYPE_TO_CLASS_NAME$1","PLUGIN_PROPS$1","NOT_VISITORS$1","CHILDREN$1","isPromise$1","getEvents$1","toStack$1","events","cleanMarks$1","postcss$2$1","LazyResult$2$1","LazyResult","onRejected","onFinally","pluginName","pluginVer","runtimeVer","b","event","filter","promise","promise1","_loop","_state","visitor","roots","subRoot","onFulfilled","visitors","visit2","_visitors_visit2_visitorIndex","lazyResult$1","MapGenerator2$1","stringify$1$1","warnOnce2$1","parse$1$1","Result$1$1","NoWorkResult$1$1","NoWorkResult","_map_generate","generatedCSS","generatedMap","noWorkResult$1","NoWorkResult2$1","LazyResult$1$1","Document$1$1","Root$2$1","Processor$1$1","Processor","plugins","normalized","processor$1","Declaration$1$1","PreviousMap2$1","Comment$1$1","AtRule$1$1","Input$1$1","Root$1$1","Rule$1$1","fromJSON$1$1","ownInputs","inputHydrated","_defaults_source","fromJSON_1$1","CssSyntaxError2$1","Declaration2$1","LazyResult2$1","Container2$1","Processor2$1","stringify$5$1","fromJSON$2","Document22","Warning2$1","Comment2$1","AtRule2$1","Result2$1","Input2$1","parse$5","list$3","Rule2$1","Root2$1","Node2$1","postcss$3","initializer","warningPrinted","creator","transformer","processOpts","pluginOpts","postcss_1$1","postcss$1$1","__defProp2","__defNormalProp2","__publicField2","getDefaultExportFromCjs$2","getAugmentedNamespace$2","picocolors_browser$2","x$2","create$2","picocolors_browserExports$2","__viteBrowserExternal$3","__viteBrowserExternal$1$2","require$$2$2","pico$2","terminalHighlight$1$2","CssSyntaxError$3$2","CssSyntaxError2","_pico$2_createColors","cssSyntaxError$2","symbols$2","DEFAULT_RAW$2","capitalize$2","Stringifier$2$2","Stringifier2","stringifier$2","Stringifier$1$2","stringify$4$2","stringify_1$2","isClean$2$2","my$2$2","CssSyntaxError$2$2","Stringifier22","stringify$3$2","cloneNode$2","Node$4$2","Node3","node$2","Node$3$2","Declaration$4$2","Declaration2","declaration$2","urlAlphabet$2","nanoid$1$2","nonSecure$2","SourceMapConsumer$2$2","SourceMapGenerator$2$2","existsSync$2","readFileSync$2","dirname$1$2","join$2","fromBase64$2","PreviousMap$2$2","PreviousMap2","previousMap$2","SourceMapConsumer$1$2","SourceMapGenerator$1$2","fileURLToPath$2","pathToFileURL$1$2","isAbsolute$2","resolve$1$2","nanoid$3","terminalHighlight$3","CssSyntaxError$1$2","PreviousMap$1$2","fromOffsetCache$2","sourceMapAvailable$1$2","pathAvailable$1$2","Input$4$2","Input2","input$2","SourceMapConsumer$4","SourceMapGenerator$4","dirname$3","relative$2","resolve$3","sep$2","pathToFileURL$3","Input$3$2","sourceMapAvailable$3","pathAvailable$3","MapGenerator$2$2","MapGenerator2","mapGenerator$2","Node$2$2","Comment$4$2","Comment2","comment$2","isClean$1$2","my$1$2","Declaration$3$2","Comment$3$2","Node$1$2","parse$4$2","Rule$4$2","AtRule$4$2","Root$6$2","cleanSource$2","markDirtyUp$2","Container$7$2","Container2","container$2","Container$6$2","LazyResult$4$2","Processor$3$2","Document$3$2","Document23","document$1$2","printed$2","warnOnce$2$2","Warning$2$2","Warning2","warning$2","Warning$1$2","Result$3$2","Result2","result$2","SINGLE_QUOTE$2","DOUBLE_QUOTE$2","BACKSLASH$2","SLASH$2","NEWLINE$2","SPACE$2","FEED$2","TAB$2","CR$2","OPEN_SQUARE$2","CLOSE_SQUARE$2","OPEN_PARENTHESES$2","CLOSE_PARENTHESES$2","OPEN_CURLY$2","CLOSE_CURLY$2","SEMICOLON$2","ASTERISK$2","COLON$2","AT$2","RE_AT_END$2","RE_WORD_END$2","RE_BAD_BRACKET$2","RE_HEX_ESCAPE$2","tokenize$2","Container$5$2","AtRule$3$2","AtRule2","_Container$5$2_prototype_append","_Container$5$2_prototype_prepend","atRule$2","Container$4$2","LazyResult$3$2","Processor$2$2","Root$5$2","Root2","root$2","list$2$2","list_1$2","Container$3$2","list$1$2","Rule$3$2","Rule2","rule$2","Declaration$2$2","tokenizer22","Comment$2$2","AtRule$2$2","Root$4$2","Rule$2$2","SAFE_COMMENT_NEIGHBOR$2","findLastWithPosition$2","Parser$1$2","Parser2","parser$2","Container$2$2","Parser22","Input$2$2","parse$3$2","parse_1$2","isClean$4","my$4","MapGenerator$1$2","stringify$2$2","Container$1$2","Document$2$2","warnOnce$1$2","Result$2$2","parse$2$2","Root$3$2","TYPE_TO_CLASS_NAME$2","PLUGIN_PROPS$2","NOT_VISITORS$2","CHILDREN$2","isPromise$2","getEvents$2","toStack$2","cleanMarks$2","postcss$2$2","LazyResult$2$2","LazyResult2","lazyResult$2","MapGenerator22","stringify$1$2","warnOnce22","parse$1$2","Result$1$2","NoWorkResult$1$2","NoWorkResult2","noWorkResult$2","NoWorkResult22","LazyResult$1$2","Document$1$2","Root$2$2","Processor$1$2","Processor2","processor$2","Declaration$1$2","PreviousMap22","Comment$1$2","AtRule$1$2","Input$1$2","Root$1$2","Rule$1$2","fromJSON$1$2","fromJSON_1$2","CssSyntaxError22","Declaration22","LazyResult22","Container22","Processor22","stringify$6","fromJSON$3","Document222","Warning22","Comment22","AtRule22","Result22","Input22","parse$6","list$4","Rule22","Root22","Node22","postcss$4","postcss_1$2","postcss$1$2","BaseRRNode","_args","_newChild","_refChild","_node","childIterator","testableAccessors$2","testableMethods$2","untaintedBasePrototype$2","isAngularZonePresent$2","getUntaintedPrototype$2","untaintedAccessorCache$2","getUntaintedAccessor$2","untaintedMethodCache$2","getUntaintedMethod$2","childNodes$2","parentNode$2","parentElement$2","textContent$2","contains$2","getRootNode$2","host$2","styleSheets$2","shadowRoot$2","querySelector$2","querySelectorAll$2","mutationObserverCtor$2","patch$2","index$2","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","receiver","throttle","wait","timeout","previous","now","remaining","context","hookSetter","isRevoked","nowTimestamp","getWindowScroll","_c","_d","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill$1","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","_this_styleIDMap_get","newId","getShadowHost","shadowHost","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","NodeType","isNodeInLinkedList","DoubleLinkedList","current1","moveKey","parentId","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","parentTag","currentN","iframe","childSn","removedNode","isParentRemoved","n21","isAncestorInSet","candidate","tailNode","parentId1","nextId1","unhandledNode","parentId2","payload","attribute","diffAsStr","unchangedAsStr","textarea","item","cn","attributeName","value1","old","pname","newValue","newPriority","pname1","nodeId","deepDelete","processRemoves","targetId","addsSet","queue","n22","removes","_isParentRemoved","_mirror2","set","_isAncestorInSet","errorHandler","registerErrorHandler","handler","unregisterErrorHandler","callbackWrapper","rrwebWrapped","rest","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","observer","removeMutationBufferForDoc","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","updatePosition","evt","clientX","clientY","handlers","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","eventName","h","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","param1","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","text2","v2","lastInputValue","currentWindow","propertyDescriptor","hookProperties","_handlers","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","rules21","index21","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","argumentsList","_getIdAndStyleId","styleBlock","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","host2","hostId","patchTarget","originalPropertyDescriptor","_a3","sheets","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","loop","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","selectionCb","collapsed","updateSelection","selection","ranges","count","startContainer","startOffset","endContainer","endOffset","blocked","initCustomElementObserver","customElementCb","constructor","mergeHooks","o2","hooks","mutationCb","canvasMutationCb","_hooks","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin3","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","ids","IframeManager","cleanup","storedDoc","observerCleanup","crossOriginMessageEvent","iframeSourceWindow","transformedEvent","iframeMirror","keys","ShadowDomManager","iframeElement","manager","option","sRoot","chars","lookup","i$1","encode","arraybuffer","bytes","base64","canvasVarMap","variableListFor$1","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","list2","serializeArg","name1","name2","name3","src","name4","src1","name5","name6","serializeArgs","webGLConstructorNames","supportedWebGLConstructorNames","initCanvas2DMutationObserver","recordArgs","hookHandler","props2D","getNormalizedContextName","contextType","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","patchGLPrototype","prototype","mutation","initCanvasWebGLMutationObserver","_handlers1","encodedJs","decodeBase64","blob","WorkerWrapper","objURL","worker","CanvasManager","newFrame","_options_sampling","fps","canvasContextReset","snapshotInProgressMap","_e2_data","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","timestamp","_this1","bitmap","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","_values","valuesWithType","StylesheetManager","linkEl","styles","r2","adoptedStyleSheetData","styleEl","_linkEl","ProcessedNodeManager","thisBuffer","buffers","toOrigin","buildAllowedOriginSet","origins","entry","wrappedEmit","takeFullSnapshot$1","canvasManager","recording","cleanFrame","mirror","record","emit","checkoutEveryNms","checkoutEveryNth","_options_blockClass","_options_blockSelector","_options_ignoreClass","_options_ignoreSelector","_options_maskTextClass","_options_maskTextSelector","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","_options_recordDOM","recordDOM","_options_recordCrossOriginIframes","recordCrossOriginIframes","allowedIframeOrigins","_options_recordAfter","recordAfter","_options_userTriggeredOnInput","_options_collectFonts","collectFonts","_options_ignoreCSSAttributes","errorHandler2","validatedOrigins","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","targetOrigin","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","shadowDomManager","observe","iframeHandler","existingCleanup","idx","init","msg","tag","t2","testableAccessors","testableMethods","untaintedBasePrototype","isAngularZonePresent","getUntaintedPrototype","untaintedAccessorCache","getUntaintedAccessor","untaintedMethodCache","getUntaintedMethod","childNodes","parentNode","parentElement","textContent","contains","getRootNode","host","styleSheets","shadowRoot","querySelector","querySelectorAll","mutationObserverCtor","patch$1","index","classMatchesRegex","getDefaultExportFromCjs","getAugmentedNamespace","a","picocolors_browser","x","create","picocolors_browserExports","__viteBrowserExternal","__viteBrowserExternal$1","require$$2","pico","terminalHighlight$1","CssSyntaxError$3","plugin2","_pico_createColors","cssSyntaxError","symbols","DEFAULT_RAW","capitalize","Stringifier$2","stringifier","Stringifier$1","stringify$4","stringify_1","isClean$2","my$2","CssSyntaxError$2","stringify$3","cloneNode","Node$4","Node1","node","Node$3","Declaration$4","declaration","urlAlphabet","nanoid$1","nonSecure","SourceMapConsumer$2","SourceMapGenerator$2","existsSync","readFileSync","dirname$1","join","fromBase64","PreviousMap$2","previousMap","SourceMapConsumer$1","SourceMapGenerator$1","fileURLToPath","pathToFileURL$1","isAbsolute","resolve$1","nanoid","terminalHighlight","CssSyntaxError$1","PreviousMap$1","fromOffsetCache","sourceMapAvailable$1","pathAvailable$1","Input$4","l","input","SourceMapConsumer","SourceMapGenerator","dirname","relative","sep","pathToFileURL","Input$3","sourceMapAvailable","pathAvailable","MapGenerator$2","mapGenerator","Node$2","Comment$4","comment","isClean$1","my$1","Declaration$3","Comment$3","Node$1","parse$4","Rule$4","AtRule$4","Root$6","cleanSource","markDirtyUp","Container$7","i1","container","Container$6","LazyResult$4","Processor$3","Document$3","Document","document$1","printed","warnOnce$2","Warning$2","warning","Warning$1","Result$3","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","tokenize","Container$5","AtRule$3","_Container$5_prototype_append","_Container$5_prototype_prepend","atRule","Container$4","LazyResult$3","Processor$2","Root$5","root","list$2","list_1","Container$3","list$1","Rule$3","rule","Declaration$2","tokenizer2","Comment$2","AtRule$2","Root$4","Rule$2","SAFE_COMMENT_NEIGHBOR","findLastWithPosition","Parser$1","parser","Container$2","Input$2","parse$3","parse_1","isClean","my","MapGenerator$1","stringify$2","Container$1","Document$2","warnOnce$1","Result$2","parse$2","Root$3","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","NOT_VISITORS","CHILDREN","isPromise","getEvents","toStack","cleanMarks","postcss$2","LazyResult$2","lazyResult","stringify$1","warnOnce2","parse$1","Result$1","NoWorkResult$1","noWorkResult","LazyResult$1","Document$1","Root$2","Processor$1","processor","Declaration$1","Comment$1","AtRule$1","Input$1","Root$1","Rule$1","fromJSON$1","fromJSON_1","stringify$5","fromJSON","parse","list","postcss","postcss_1","postcss$1","__defProp","__defNormalProp","__publicField","patch","StackFrame","lineNumber","columnNumber","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","ErrorStackParser","urlLike","regExp","filtered","sanitizedLine","location","locationParts","functionName","fileName","functionNameRegex","matches","lineRE","functionCall","pathToSelector","domSiblings","sibling","isObject","isObjTooDeep","limit","stringify","stringifyOptions","thisPos","shouldIgnore","toString","eventResult","eventValue","_obj","defaultLogOptions","initLogObserver","logOptions","loggerType","logger","logCount","inStack","cancelHandlers","trace","stackFrame","unhandledrejectionHandler","levelType","_logger","level","argsForPayload","PLUGIN_NAME","getRecordConsolePlugin","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","val","config","first","Item","schedule","isThenable","_then","oType","notify","notifyIsolated","chain","ret","defWrapper","MakeDefWrapper","iteratePromises","resolver","rejecter","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","msgs","PromisePolyfill","MAX_RECORDING_MS","MAX_VALUE_FOR_MIN_RECORDING_MS","ArrayProto","FuncProto","ObjProto","slice","hasOwnProperty","windowConsole","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","console","log_func_with_prefix","prefix","console_with_prefix","bound","iterable","results","found","needle","subclass","superclass","encoded","pad","mixed_val","escapable","c","holder","gap","mind","partial","at","ch","escapee","hex","uffff","white","word","object","b64","o1","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","stringl","c1","uuid","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","regexS","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","getElementsBySelector","foundCount","elements","currentContextIndex","currentContext","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","extra_props","batchedThrottle","waitMs","timeoutPromise","throttledItems","Promise","returnValue","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","tld","isOnline","onLine","NOOP_FUNC","urlMatchesRegexList","regexList","JSONStringify","JSONParse","canUseCompressionStream","version","IDBStorageWrapper","dbName","storeName","versionData","storeNamesInDb","createIfMissing","openRequest","ev","db","databases","dbOrError","mode","storeCb","doTransaction","transaction","objectStore","req","MIXPANEL_BROWSER_DB_NAME","RECORDING_EVENTS_STORE_NAME","RECORDING_REGISTRY_STORE_NAME","RECORDER_VERSION_DATA","SharedLock","lockedCB","pid","startTime","pollIntervalMS","timeoutMS","keyX","keyY","keyZ","delay","waitFor","predicate","getSetY","valY","criticalSection","removeLock","LocalStorageWrapper","storageOverride","RequestQueue","storageKey","queueEntry","flushInterval","queueEntries","enqueueItem","storedQueue","succeeded","batchSize","batch","idsInBatch","filterOutIDsAndInvalid","items","idSet","filteredItems","removeFromStorage","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","MAX_RETRY_INTERVAL_MS","RequestBatcher","flushMS","currentBatchSize","attemptSecondaryFlush","dataForRequest","transformedItems","addPayload","itemId","removeItemsFromQueue","batchSendCallback","res","retryMS","halvedBatchSize","requestOptions","isRecordingExpired","serializedRecording","RECORD_ENQUEUE_THROTTLE_MS","validateAllowedOrigins","valid","elementLooksSensitive","sensitiveNameRegex","COMMON_MASK_CLASSES_SELECTOR","RRWEB_PASSWORD_ATTRIBUTE","ALWAYS_MASKED_INPUT_TYPES","normalizeSelectors","getPrivacyConfig","mixpanelInstance","privacyConfig","maskInputSelector","unmaskInputSelector","unmaskTextSelector","maskAllText","legacyMaskTextClass","textMaskingSelectors","classSelector","elementMatchesSelector","shouldMaskInput","inputType","autocomplete","shouldMaskText","getTimeOrigin","defaultNetworkOptions","isNavigationTiming","isResourceTiming","findLast","replacementFactory","MAX_BODY_SIZE","truncateBody","initPerformanceObserver","initialPerformanceEntries","entries","performanceEntries","shouldRecordHeader","recordHeaders","headerName","shouldRecordBody","recordBodyUrls","tryReadXHRBody","tryReadFetchBody","txt","reason","getRequestPerformanceEntry","initiatorType","attempt","urlPerformanceEntries","performanceEntry","initXhrObserver","restorePatch","originalOpen","async","username","password","xhr","networkRequest","requestHeaders","originalSetRequestHeader","header","originalSend","responseHeaders","rawHeaders","headers","colonIndex","request","buildRecordedRequest","initFetchObserver","originalFetch","originalFetchPromise","requestBodyPromise","responseBodyResolve","responseBodyPromise","response","initNetworkObserver","networkOptions","requests","shouldIgnoreUrl","performanceObserver","xhrObserver","fetchObserver","NETWORK_PLUGIN_NAME","getRecordNetworkPlugin","CompressionStream","RECORDER_BATCHER_LIB_CONFIG","ACTIVE_SOURCES","isUserEvent","SessionRecording","usePersistence","userIdInfo","deviceId","userId","configVar","shouldStopBatcher","resetIdleTimeout","idleTimeoutMs","ignoreRequestUrls","maxTimeoutMs","skipFlush","flushPromise","tabId","currentReplayId","reqParams","reqBody","onSuccess","responseBody","apiHost","numEvents","replayId","batchStartTime","batchEndTime","hasFullSnapshot","replayLengthMs","eventsJson","sendUncompressed","jsonStream","gzipStream","compressedBlob","configValue","shouldMaskFn","shouldMask","textLength","RecordingRegistry","serializedRecordings","unloadPromises","sessionRecording","buildConsentGate","allowsFunc","getConfigFunc","gate","consentGateFor","capability","consentAllows","MixpanelRecorder","rrwebRecord","sharedLockStorage","onIdleTimeout","onMaxLengthReached","onBatchSent","sessionRecordingOptions","disableActiveRecording","stopRecordingPromise","startNewIfInactive","activeSerializedRecording"],"mappings":"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"} \ No newline at end of file diff --git a/dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js b/dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js deleted file mode 100644 index 6451c2c8..00000000 --- a/dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(){"use strict";var m;if(typeof window=="undefined"){var K={hostname:""};m={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:K,referrer:""},screen:{width:0,height:0},location:K,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else m=window;var Oe={LIB_VERSION:"2.84.0"},be="__mp_targeting",Q=m.setImmediate,S,$,R,X=Object.prototype.toString,Ee=typeof Q!="undefined"?function(r){return Q(r)}:setTimeout;try{Object.defineProperty({},"x",{}),S=function(r,i,n,u){return Object.defineProperty(r,i,{value:n,writable:!0,configurable:u!==!1})}}catch(e){S=function(i,n,u){return i[n]=u,i}}R=(function(){var r,i,n;function u(t,o){this.fn=t,this.self=o,this.next=void 0}return{add:function(o,s){n=new u(o,s),i?i.next=n:r=n,i=n,n=void 0},drain:function(){var o=r;for(r=i=$=void 0;o;)o.fn.call(o.self),o=o.next}}})();function I(e,r){R.add(e,r),$||($=Ee(R.drain))}function Z(e){var r,i=typeof e;return e!==null&&(i==="object"||i==="function")&&(r=e.then),typeof r=="function"?r:!1}function j(){for(var e=0;e0&&I(j,i))}catch(n){P.call(new ee(i),n)}}}function P(e){var r=this;r.triggered||(r.triggered=!0,r.def&&(r=r.def),r.msg=e,r.state=2,r.chain.length>0&&I(j,r))}function Y(e,r,i,n){for(var u=0;u0&&(r[n]=i)}),r},a.truncate=function(e,r){var i;return typeof e=="string"?i=e.slice(0,r):a.isArray(e)?(i=[],a.each(e,function(n){i.push(a.truncate(n,r))})):a.isObject(e)?(i={},a.each(e,function(n,u){i[u]=a.truncate(n,r)})):i=e,i},a.JSONEncode=(function(){return function(e){var r=e,i=function(u){var t=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,o={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return t.lastIndex=0,t.test(u)?'"'+u.replace(t,function(s){var f=o[s];return typeof f=="string"?f:"\\u"+("0000"+s.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+u+'"'},n=function(u,t){var o="",s=" ",f=0,l="",h="",g=0,c=o,d=[],p=t[u];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(u)),typeof p){case"string":return i(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(o+=s,d=[],N.apply(p)==="[object Array]"){for(g=p.length,f=0;f="0"&&r<="9";)p+=r,t();if(r===".")for(p+=".";t()&&r>="0"&&r<="9";)p+=r;if(r==="e"||r==="E")for(p+=r,t(),(r==="-"||r==="+")&&(p+=r,t());r>="0"&&r<="9";)p+=r,t();if(d=+p,!isFinite(d))u("Bad number");else return d},s=function(){var d,p,y="",v;if(r==='"')for(;t();){if(r==='"')return t(),y;if(r==="\\")if(t(),r==="u"){for(v=0,p=0;p<4&&(d=parseInt(t(),16),!!isFinite(d));p+=1)v=v*16+d;y+=String.fromCharCode(v)}else if(typeof i[r]=="string")y+=i[r];else break;else y+=r}u("Bad string")},f=function(){for(;r&&r<=" ";)t()},l=function(){switch(r){case"t":return t("t"),t("r"),t("u"),t("e"),!0;case"f":return t("f"),t("a"),t("l"),t("s"),t("e"),!1;case"n":return t("n"),t("u"),t("l"),t("l"),null}u('Unexpected "'+r+'"')},h,g=function(){var d=[];if(r==="["){if(t("["),f(),r==="]")return t("]"),d;for(;r;){if(d.push(h()),f(),r==="]")return t("]"),d;t(","),f()}}u("Bad array")},c=function(){var d,p={};if(r==="{"){if(t("{"),f(),r==="}")return t("}"),p;for(;r;){if(d=s(),f(),t(":"),Object.hasOwnProperty.call(p,d)&&u('Duplicate key "'+d+'"'),p[d]=h(),f(),r==="}")return t("}"),p;t(","),f()}}u("Bad object")};return h=function(){switch(f(),r){case"{":return c();case"[":return g();case'"':return s();case"-":return o();default:return r>="0"&&r<="9"?o():l()}},function(d){var p;return n=d,e=0,r=" ",p=h(),f(),r&&u("Syntax error"),p}})(),a.base64Encode=function(e){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i,n,u,t,o,s,f,l,h=0,g=0,c="",d=[];if(!e)return e;e=a.utf8Encode(e);do i=e.charCodeAt(h++),n=e.charCodeAt(h++),u=e.charCodeAt(h++),l=i<<16|n<<8|u,t=l>>18&63,o=l>>12&63,s=l>>6&63,f=l&63,d[g++]=r.charAt(t)+r.charAt(o)+r.charAt(s)+r.charAt(f);while(h127&&o<2048?s=String.fromCharCode(o>>6|192,o&63|128):s=String.fromCharCode(o>>12|224,o>>6&63|128,o&63|128),s!==null&&(n>i&&(r+=e.substring(i,n)),r+=s,i=n=t+1)}return n>i&&(r+=e.substring(i,e.length)),r},a.UUID=function(){try{return m.crypto.randomUUID()}catch(i){for(var e=new Array(36),r=0;r<36;r++)e[r]=Math.floor(Math.random()*16);return e[14]=4,e[19]=e[19]&=-5,e[19]=e[19]|=8,e[8]=e[13]=e[18]=e[23]="-",a.map(e,function(n){return n.toString(16)}).join("")}};var ae=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];a.isBlockedUA=function(e){var r;for(e=e.toLowerCase(),r=0;r=0}function n(u){if(!A.getElementsByTagName)return[];var t=u.split(" "),o,s,f,l,h,g,c,d,p,y,v=[A];for(g=0;g-1){s=o.split("#"),f=s[0];var V=s[1],H=A.getElementById(V);if(!H||f&&H.nodeName.toLowerCase()!=f)return[];v=[H];continue}if(o.indexOf(".")>-1){s=o.split("."),f=s[0];var tr=s[1];for(f||(f="*"),l=[],h=0,c=0;c-1};break;default:O=function(w){return w.getAttribute(_)}}for(v=[],y=0,c=0;c=3?r[2]:""},currentUrl:function(){return m.location.href},properties:function(e){return typeof e!="object"&&(e={}),a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D),$referrer:A.referrer,$referring_domain:a.info.referringDomain(A.referrer),$device:a.info.device(C)}),{$current_url:a.info.currentUrl(),$browser_version:a.info.browserVersion(C,B.vendor,D),$screen_height:ne.height,$screen_width:ne.width,mp_lib:"web",$lib_version:Oe.LIB_VERSION,$insert_id:le(),time:a.timestamp()/1e3},a.strip_empty_properties(e))},people_properties:function(){return a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D)}),{$browser_version:a.info.browserVersion(C,B.vendor,D)})},mpPageViewProperties:function(){return a.strip_empty_properties({current_page_title:A.title,current_domain:m.location.hostname,current_url_path:m.location.pathname,current_url_protocol:m.location.protocol,current_url_search:m.location.search})}};var le=function(e){var r=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return e?r.substring(0,e):r},$e=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Re=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,ce=function(e){var r=Re,i=e.split("."),n=i[i.length-1];(n.length>4||n==="com"||n==="org")&&(r=$e);var u=e.match(r);return u?u[0]:""},J=null,G=null;typeof JSON!="undefined"&&(J=JSON.stringify,G=JSON.parse),J=J||a.JSONEncode,G=G||a.JSONDecode,a.info=a.info,a.info.browser=a.info.browser,a.info.browserVersion=a.info.browserVersion,a.info.device=a.info.device,a.info.properties=a.info.properties,a.isBlockedUA=a.isBlockedUA,a.isEmptyObject=a.isEmptyObject,a.isObject=a.isObject,a.JSONDecode=a.JSONDecode,a.JSONEncode=a.JSONEncode,a.toArray=a.toArray,a.NPO=b;function je(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var k={exports:{}},Fe=k.exports,pe;function Le(){return pe||(pe=1,(function(e,r){(function(i,n){e.exports=n()})(Fe,function(){Array.isArray||(Array.isArray=function(t){return Object.prototype.toString.call(t)==="[object Array]"});function i(t){for(var o=[],s=0,f=t.length;s":function(t,o){return t>o},">=":function(t,o){return t>=o},"<":function(t,o,s){return s===void 0?t=t?[]:s}};return n.is_logic=function(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1},n.truthy=function(t){return Array.isArray(t)&&t.length===0?!1:!!t},n.get_operator=function(t){return Object.keys(t)[0]},n.get_values=function(t){return t[n.get_operator(t)]},n.apply=function(t,o){if(Array.isArray(t))return t.map(function(v){return n.apply(v,o)});if(!n.is_logic(t))return t;var s=n.get_operator(t),f=t[s],l,h,g,c,d;if(Array.isArray(f)||(f=[f]),s==="if"||s=="?:"){for(l=0;l0){var p=String(s).split("."),y=u;for(l=0;lhe||e.target.length>he)return!1;var r=Se(e.actual),i=Se(e.target);if(!ge.test(r)||!ge.test(i))return!1;var n=Qe(r,i);return Ae(n,e.symbol)}function ve(e){var r=e.indexOf("+");r!==-1&&(e=e.slice(0,r));var i=e.indexOf("-");return i===-1?{core:e.split("."),prerelease:[]}:{core:e.slice(0,i).split("."),prerelease:e.slice(i+1).split(".")}}function me(e){return/^[0-9]+$/.test(e)}function ye(e,r){return e.length!==r.length?e.lengthr?1:0}function Ke(e,r){var i=me(e),n=me(r);return i&&n?ye(e,r):i?-1:n?1:er?1:0}function Qe(e,r){var i=ve(e),n=ve(r),u,t;for(u=0;u":return e>0;case">=":return e>=0;default:return!1}}function Se(e){for(var r=e.trim().replace(/^[vV]/,""),i=r.length,n=["-","+"],u=0;u23)return!1;var u=new Date;return u.setUTCFullYear(e,r-1,i),u.getUTCFullYear()===e&&u.getUTCMonth()===r-1&&u.getUTCDate()===i}function qe(e){if(typeof e!="string")return null;var r=e.trim().toUpperCase(),i=We.exec(r);if(!i||!Ze(Number(i[1]),Number(i[2]),Number(i[3]),Number(i[4])))return null;var n=new Date(r),u=n.getTime();return isNaN(u)?null:Math.floor(u/1e3)}function Ye(e){return typeof e!="number"||!isFinite(e)||e>=Ge||e<=-9223372036854776e3?null:er(e/1e3)}function er(e){return e<0?Math.ceil(e):Math.floor(e)}Ve(de);var rr=function(e,r,i){if(e!==i.event_name)return{matches:!1};var n=i.property_filters,u=!0;if(n&&!a.isEmptyObject(n))try{u=de.apply(n,r||{})}catch(t){return{matches:!1,error:t.toString()}}return{matches:u}},_e={};_e.eventMatchesCriteria=rr,m[be]=Promise.resolve(_e)})(); -//# sourceMappingURL=mixpanel-targeting-Dv-okZB7.min.js.map diff --git a/dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js.map b/dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js.map deleted file mode 100644 index 8b02b43b..00000000 --- a/dist/async-modules/mixpanel-targeting-Dv-okZB7.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mixpanel-targeting-Dv-okZB7.min.js","sources":["../../src/window.js","../../src/config.js","../../src/promise-polyfill.js","../../src/utils.js","../../node_modules/json-logic-js/logic.js","../../src/targeting/custom-operators.js","../../src/targeting/event-matcher.js","../../src/targeting/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.84.0'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","/* globals define,module */\n/*\nUsing a Universal Module Loader that should be browser, require, and AMD friendly\nhttp://ricostacruz.com/cheatsheets/umdjs.html\n*/\n;(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.jsonLogic = factory();\n }\n}(this, function() {\n \"use strict\";\n /* globals console:false */\n\n if ( ! Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === \"[object Array]\";\n };\n }\n\n /**\n * Return an array that contains no duplicates (original not modified)\n * @param {array} array Original reference array\n * @return {array} New array with no duplicates\n */\n function arrayUnique(array) {\n var a = [];\n for (var i=0, l=array.length; i\": function(a, b) {\n return a > b;\n },\n \">=\": function(a, b) {\n return a >= b;\n },\n \"<\": function(a, b, c) {\n return (c === undefined) ? a < b : (a < b) && (b < c);\n },\n \"<=\": function(a, b, c) {\n return (c === undefined) ? a <= b : (a <= b) && (b <= c);\n },\n \"!!\": function(a) {\n return jsonLogic.truthy(a);\n },\n \"!\": function(a) {\n return !jsonLogic.truthy(a);\n },\n \"%\": function(a, b) {\n return a % b;\n },\n \"log\": function(a) {\n console.log(a); return a;\n },\n \"in\": function(a, b) {\n if (!b || typeof b.indexOf === \"undefined\") return false;\n return (b.indexOf(a) !== -1);\n },\n \"cat\": function() {\n return Array.prototype.join.call(arguments, \"\");\n },\n \"substr\": function(source, start, end) {\n if (end < 0) {\n // JavaScript doesn't support negative end, this emulates PHP behavior\n var temp = String(source).substr(start);\n return temp.substr(0, temp.length + end);\n }\n return String(source).substr(start, end);\n },\n \"+\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) + parseFloat(b, 10);\n }, 0);\n },\n \"*\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) * parseFloat(b, 10);\n });\n },\n \"-\": function(a, b) {\n if (b === undefined) {\n return -a;\n } else {\n return a - b;\n }\n },\n \"/\": function(a, b) {\n return a / b;\n },\n \"min\": function() {\n return Math.min.apply(this, arguments);\n },\n \"max\": function() {\n return Math.max.apply(this, arguments);\n },\n \"merge\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return a.concat(b);\n }, []);\n },\n \"var\": function(a, b) {\n var not_found = (b === undefined) ? null : b;\n var data = this;\n if (typeof a === \"undefined\" || a===\"\" || a===null) {\n return data;\n }\n var sub_props = String(a).split(\".\");\n for (var i = 0; i < sub_props.length; i++) {\n if (data === null || data === undefined) {\n return not_found;\n }\n // Descending into data\n data = data[sub_props[i]];\n if (data === undefined) {\n return not_found;\n }\n }\n return data;\n },\n \"missing\": function() {\n /*\n Missing can receive many keys as many arguments, like {\"missing:[1,2]}\n Missing can also receive *one* argument that is an array of keys,\n which typically happens if it's actually acting on the output of another command\n (like 'if' or 'merge')\n */\n\n var missing = [];\n var keys = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = jsonLogic.apply({\"var\": key}, this);\n if (value === null || value === \"\") {\n missing.push(key);\n }\n }\n\n return missing;\n },\n \"missing_some\": function(need_count, options) {\n // missing_some takes two arguments, how many (minimum) items must be present, and an array of keys (just like 'missing') to check for presence.\n var are_missing = jsonLogic.apply({\"missing\": options}, this);\n\n if (options.length - are_missing.length >= need_count) {\n return [];\n } else {\n return are_missing;\n }\n },\n };\n\n jsonLogic.is_logic = function(logic) {\n return (\n typeof logic === \"object\" && // An object\n logic !== null && // but not null\n ! Array.isArray(logic) && // and not an array\n Object.keys(logic).length === 1 // with exactly one key\n );\n };\n\n /*\n This helper will defer to the JsonLogic spec as a tie-breaker when different language interpreters define different behavior for the truthiness of primitives. E.g., PHP considers empty arrays to be falsy, but Javascript considers them to be truthy. JsonLogic, as an ecosystem, needs one consistent answer.\n\n Spec and rationale here: http://jsonlogic.com/truthy\n */\n jsonLogic.truthy = function(value) {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n return !! value;\n };\n\n\n jsonLogic.get_operator = function(logic) {\n return Object.keys(logic)[0];\n };\n\n jsonLogic.get_values = function(logic) {\n return logic[jsonLogic.get_operator(logic)];\n };\n\n jsonLogic.apply = function(logic, data) {\n // Does this array contain logic? Only one way to find out.\n if (Array.isArray(logic)) {\n return logic.map(function(l) {\n return jsonLogic.apply(l, data);\n });\n }\n // You've recursed to a primitive, stop!\n if ( ! jsonLogic.is_logic(logic) ) {\n return logic;\n }\n\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n var i;\n var current;\n var scopedLogic;\n var scopedData;\n var initial;\n\n // easy syntax for unary operators, like {\"var\" : \"x\"} instead of strict {\"var\" : [\"x\"]}\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n // 'if', 'and', and 'or' violate the normal rule of depth-first calculating consequents, let each manage recursion as needed.\n if (op === \"if\" || op == \"?:\") {\n /* 'if' should be called with a odd number of parameters, 3 or greater\n This works on the pattern:\n if( 0 ){ 1 }else{ 2 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else{ 4 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else if( 4 ){ 5 }else{ 6 };\n\n The implementation is:\n For pairs of values (0,1 then 2,3 then 4,5 etc)\n If the first evaluates truthy, evaluate and return the second\n If the first evaluates falsy, jump to the next pair (e.g, 0,1 to 2,3)\n given one parameter, evaluate and return it. (it's an Else and all the If/ElseIf were false)\n given 0 parameters, return NULL (not great practice, but there was no Else)\n */\n for (i = 0; i < values.length - 1; i += 2) {\n if ( jsonLogic.truthy( jsonLogic.apply(values[i], data) ) ) {\n return jsonLogic.apply(values[i+1], data);\n }\n }\n if (values.length === i+1) {\n return jsonLogic.apply(values[i], data);\n }\n return null;\n } else if (op === \"and\") { // Return first falsy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( ! jsonLogic.truthy(current)) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"or\") {// Return first truthy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( jsonLogic.truthy(current) ) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"filter\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n // Return only the elements from the array in the first argument,\n // that return truthy when passed to the logic in the second argument.\n // For parity with JavaScript, reindex the returned array\n return scopedData.filter(function(datum) {\n return jsonLogic.truthy( jsonLogic.apply(scopedLogic, datum));\n });\n } else if (op === \"map\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n\n return scopedData.map(function(datum) {\n return jsonLogic.apply(scopedLogic, datum);\n });\n } else if (op === \"reduce\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n initial = typeof values[2] !== \"undefined\" ? jsonLogic.apply(values[2], data) : null;\n\n if ( ! Array.isArray(scopedData)) {\n return initial;\n }\n\n return scopedData.reduce(\n function(accumulator, current) {\n return jsonLogic.apply(\n scopedLogic,\n {current: current, accumulator: accumulator}\n );\n },\n initial\n );\n } else if (op === \"all\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n // All of an empty set is false. Note, some and none have correct fallback after the for loop\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( ! jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First falsy, short circuit\n }\n }\n return true; // All were truthy\n } else if (op === \"none\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return true;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First truthy, short circuit\n }\n }\n return true; // None were truthy\n } else if (op === \"some\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return true; // First truthy, short circuit\n }\n }\n return false; // None were truthy\n }\n\n // Everyone else gets immediate depth-first recursion\n values = values.map(function(val) {\n return jsonLogic.apply(val, data);\n });\n\n\n // The operation is called with \"data\" bound to its \"this\" and \"values\" passed as arguments.\n // Structured commands like % or > can name formal arguments while flexible commands (like missing or merge) can operate on the pseudo-array arguments\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n if (operations.hasOwnProperty(op) && typeof operations[op] === \"function\") {\n return operations[op].apply(data, values);\n } else if (op.indexOf(\".\") > 0) { // Contains a dot, and not in the 0th position\n var sub_ops = String(op).split(\".\");\n var operation = operations;\n for (i = 0; i < sub_ops.length; i++) {\n if (!operation.hasOwnProperty(sub_ops[i])) {\n throw new Error(\"Unrecognized operation \" + op +\n \" (failed at \" + sub_ops.slice(0, i+1).join(\".\") + \")\");\n }\n // Descending into operations\n operation = operation[sub_ops[i]];\n }\n\n return operation.apply(data, values);\n }\n\n throw new Error(\"Unrecognized operation \" + op );\n };\n\n jsonLogic.uses_data = function(logic) {\n var collection = [];\n\n if (jsonLogic.is_logic(logic)) {\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n if (op === \"var\") {\n // This doesn't cover the case where the arg to var is itself a rule.\n collection.push(values[0]);\n } else {\n // Recursion!\n values.forEach(function(val) {\n collection.push.apply(collection, jsonLogic.uses_data(val) );\n });\n }\n }\n\n return arrayUnique(collection);\n };\n\n jsonLogic.add_operation = function(name, code) {\n operations[name] = code;\n };\n\n jsonLogic.rm_operation = function(name) {\n delete operations[name];\n };\n\n jsonLogic.rule_like = function(rule, pattern) {\n // console.log(\"Is \". JSON.stringify(rule) . \" like \" . JSON.stringify(pattern) . \"?\");\n if (pattern === rule) {\n return true;\n } // TODO : Deep object equivalency?\n if (pattern === \"@\") {\n return true;\n } // Wildcard!\n if (pattern === \"number\") {\n return (typeof rule === \"number\");\n }\n if (pattern === \"string\") {\n return (typeof rule === \"string\");\n }\n if (pattern === \"array\") {\n // !logic test might be superfluous in JavaScript\n return Array.isArray(rule) && ! jsonLogic.is_logic(rule);\n }\n\n if (jsonLogic.is_logic(pattern)) {\n if (jsonLogic.is_logic(rule)) {\n var pattern_op = jsonLogic.get_operator(pattern);\n var rule_op = jsonLogic.get_operator(rule);\n\n if (pattern_op === \"@\" || pattern_op === rule_op) {\n // echo \"\\nOperators match, go deeper\\n\";\n return jsonLogic.rule_like(\n jsonLogic.get_values(rule, false),\n jsonLogic.get_values(pattern, false)\n );\n }\n }\n return false; // pattern is logic, rule isn't, can't be eq\n }\n\n if (Array.isArray(pattern)) {\n if (Array.isArray(rule)) {\n if (pattern.length !== rule.length) {\n return false;\n }\n /*\n Note, array order MATTERS, because we're using this array test logic to consider arguments, where order can matter. (e.g., + is commutative, but '-' or 'if' or 'var' are NOT)\n */\n for (var i = 0; i < pattern.length; i += 1) {\n // If any fail, we fail\n if ( ! jsonLogic.rule_like(rule[i], pattern[i])) {\n return false;\n }\n }\n return true; // If they *all* passed, we pass\n } else {\n return false; // Pattern is array, rule isn't\n }\n }\n\n // Not logic, not array, not a === match for rule.\n return false;\n };\n\n return jsonLogic;\n}));\n","// Strict RFC3339 guard for datetime strings. The date and hour fields are captured so the calendar\n// can be validated separately; the regex only constrains their shape.\nvar RFC3339_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})[Tt](\\d{2}):\\d{2}:\\d{2}(\\.\\d+)?([Zz]|[+-]\\d{2}:\\d{2})$/;\n\n// SemVer 2.0.0 requires major.minor.patch; partial versions are zero-padded to this.\nvar SEMVER_PARTS = 3;\n\n// Longest operand the semver regex is allowed to see. A real version never approaches this; the\n// bound matches MAX_LENGTH in node-semver, and keeps an arbitrarily long property value off the\n// regex regardless of how the engine schedules backtracking.\nvar MAX_SEMVER_LENGTH = 256;\n\n// Epoch milliseconds are compared as int64 elsewhere, so anything at or beyond this is out of range.\nvar MAX_EPOCH_MS = 9223372036854775808;\n\n// Using the official semantic versioning 2.0.0 regular expression to handle cross-platform validation\n// differences on other SDK's. For example, some platforms allow leading zeros even though it is not valid\n// as part of the Semver 2.0.0 spec. See https://semver.org/\nvar SEMVER_REGEX = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n// Registers custom operators into the JSONLogic engine.\n// 1. Semantic Versioning 2.0.0 comparison\n// 2. RFC3339 datetime comparison\nfunction registerCustomOperators(jsonLogic) {\n jsonLogic.add_operation('semver_compare', semverCompare);\n jsonLogic.add_operation('datetime_compare', datetimeCompare);\n}\n\n// Implements a custom operation for semantic versioning comparison that conforms to the semver 2.0.0 standard.\n// Prior to comparison, any leading version prefix is stripped.\nfunction semverCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n if (typeof ops.actual !== 'string' || typeof ops.target !== 'string') {\n return false;\n }\n if (ops.actual.length > MAX_SEMVER_LENGTH || ops.target.length > MAX_SEMVER_LENGTH) {\n return false;\n }\n var actual = normalizeSemver(ops.actual);\n var target = normalizeSemver(ops.target);\n if (!SEMVER_REGEX.test(actual) || !SEMVER_REGEX.test(target)) {\n return false;\n }\n var cmp = compareSemver(actual, target);\n return comparatorMatches(cmp, ops.symbol);\n}\n\n// Strip optional build metadata and separate the core version from pre-release identifiers\nfunction splitSemver(version) {\n var plus = version.indexOf('+');\n if (plus !== -1) {\n version = version.slice(0, plus);\n }\n var dash = version.indexOf('-');\n if (dash === -1) {\n return {core: version.split('.'), prerelease: []};\n }\n return {core: version.slice(0, dash).split('.'), prerelease: version.slice(dash + 1).split('.')};\n}\n\nfunction isNumericIdentifier(identifier) {\n return /^[0-9]+$/.test(identifier);\n}\n\n// Numeric identifiers carry no leading zeros, so the longer run of digits is the larger number.\n// Comparing them as digits rather than as numbers keeps versions past Number.MAX_SAFE_INTEGER ordered\n// correctly.\nfunction compareNumeric(a, b) {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// SemVer 2.0.0 section 11.4: digits compare numerically, a numeric identifier ranks below an\n// alphanumeric one, and anything else compares by ASCII order.\nfunction comparePrereleaseIdentifier(a, b) {\n var aNumeric = isNumericIdentifier(a);\n var bNumeric = isNumericIdentifier(b);\n if (aNumeric && bNumeric) {\n return compareNumeric(a, b);\n }\n if (aNumeric) {\n return -1;\n }\n if (bNumeric) {\n return 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// Ordering per SemVer 2.0.0 section 11. Both operands have already been normalized and matched against\n// the official regex, so the core holds exactly three numeric identifiers and every prerelease field is\n// well-formed; the split needs no error path.\nfunction compareSemver(actualVersion, targetVersion) {\n var actual = splitSemver(actualVersion);\n var target = splitSemver(targetVersion);\n var i, result;\n\n for (i = 0; i < actual.core.length; i++) {\n result = compareNumeric(actual.core[i], target.core[i]);\n if (result !== 0) {\n return result;\n }\n }\n\n // A prerelease ranks below the release it belongs to (section 11.3).\n if (!actual.prerelease.length && !target.prerelease.length) {\n return 0;\n }\n if (!actual.prerelease.length) {\n return 1;\n }\n if (!target.prerelease.length) {\n return -1;\n }\n\n var shared = Math.min(actual.prerelease.length, target.prerelease.length);\n for (i = 0; i < shared; i++) {\n result = comparePrereleaseIdentifier(actual.prerelease[i], target.prerelease[i]);\n if (result !== 0) {\n return result;\n }\n }\n // Every field so far is equal, so the longer list wins (section 11.4.4).\n if (actual.prerelease.length !== target.prerelease.length) {\n return actual.prerelease.length < target.prerelease.length ? -1 : 1;\n }\n return 0;\n}\n\n// Implements a custom operation for datetime comparison.\n// The target value stored on the feature flag is the millisecond epoch, whereas the actual value provided at evaluation time must be RFC-3339 formatted.\nfunction datetimeCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n var actualSec = convertRfc3339ToUnixSeconds(ops.actual);\n var targetSec = convertUnixMillisecondsToSeconds(ops.target);\n if (actualSec === null || targetSec === null) {\n return false;\n }\n var cmp = actualSec - targetSec;\n return comparatorMatches(cmp, ops.symbol);\n}\n\nfunction operands(args) {\n if (args.length !== 3) {\n return null;\n }\n return { actual: args[0], symbol: args[1], target: args[2] };\n}\n\nfunction comparatorMatches(cmp, symbol) {\n switch (symbol) {\n case '===':\n return cmp === 0;\n case '!==':\n return cmp !== 0;\n case '<':\n return cmp < 0;\n case '<=':\n return cmp <= 0;\n case '>':\n return cmp > 0;\n case '>=':\n return cmp >= 0;\n default:\n return false;\n }\n}\n\nfunction normalizeSemver(version) {\n var stripped = version.trim().replace(/^[vV]/, '');\n\n var suffixStart = stripped.length;\n var separators = ['-', '+'];\n for (var i = 0; i < separators.length; i++) {\n var index = stripped.indexOf(separators[i]);\n if (index !== -1 && index < suffixStart) {\n suffixStart = index;\n }\n }\n\n var core = stripped.slice(0, suffixStart);\n var suffix = stripped.slice(suffixStart);\n\n var parts = core.split('.');\n while (parts.length < SEMVER_PARTS) {\n parts.push('0');\n }\n return parts.join('.') + suffix;\n}\n\n// The regex constrains each field to two digits, which still admits a date that cannot exist, such as\n// 2026-02-30 or 29 February in a common year. Writing the fields into a Date and reading them back\n// settles it: out-of-range fields are normalized into a real instant, so a date that does not exist\n// comes back carrying different fields than it went in with. The three-argument setUTCFullYear sets\n// all three at once, which judges 29 February against the year given rather than a placeholder, and\n// leaves years 0 through 99 alone where Date.UTC would map them into the 1900s. The hour is checked\n// separately because it is not part of the round trip; RFC 3339 section 5.6 allows hours 00 through 23.\nfunction isRealCalendarDate(year, month, day, hour) {\n if (hour > 23) {\n return false;\n }\n var dt = new Date();\n dt.setUTCFullYear(year, month - 1, day);\n return dt.getUTCFullYear() === year && dt.getUTCMonth() === month - 1 && dt.getUTCDate() === day;\n}\n\nfunction convertRfc3339ToUnixSeconds(v) {\n if (typeof v !== 'string') {\n return null;\n }\n var normalized = v.trim().toUpperCase();\n var fields = RFC3339_REGEX.exec(normalized);\n if (!fields) {\n return null;\n }\n if (!isRealCalendarDate(Number(fields[1]), Number(fields[2]), Number(fields[3]), Number(fields[4]))) {\n return null;\n }\n var parsed = new Date(normalized);\n var ms = parsed.getTime();\n if (isNaN(ms)) {\n return null;\n }\n return Math.floor(ms / 1000);\n}\n\nfunction convertUnixMillisecondsToSeconds(v) {\n if (typeof v !== 'number' || !isFinite(v)) {\n return null;\n }\n // A value int64 cannot represent is not a real timestamp; treating one as a bound would let a\n // nonsense target define a rollout window.\n if (v >= MAX_EPOCH_MS || v <= -MAX_EPOCH_MS) {\n return null;\n }\n return truncate(v / 1000);\n}\n\nfunction truncate(n) {\n return n < 0 ? Math.ceil(n) : Math.floor(n);\n}\n\nexport {\n registerCustomOperators,\n semverCompare,\n datetimeCompare\n};\n","import { _ } from '../utils';\nimport jsonLogic from 'json-logic-js';\nimport { registerCustomOperators } from './custom-operators';\n\n// Register typed runtime-targeting operators (semver_compare, datetime_compare) into the JsonLogic engine.\n// Registration happens lazily, when the async targeting bundle loads.\nregisterCustomOperators(jsonLogic);\n\n/**\n * Check if an event matches the given criteria\n * @param {string} eventName - The name of the event being checked\n * @param {Object} properties - Event properties to evaluate against property filters\n * @param {Object} criteria - Criteria to match against, with:\n * - event_name: string - Required event name (case-sensitive match)\n * - property_filters: Object - Optional JsonLogic filters for properties\n * @returns {Object} Result object with:\n * - matches: boolean - Whether the event matches the criteria\n * - error: string|undefined - Error message if evaluation failed\n */\nvar eventMatchesCriteria = function(eventName, properties, criteria) {\n // Check exact event name match (case-sensitive)\n if (eventName !== criteria.event_name) {\n return { matches: false };\n }\n\n // Evaluate property filters using JsonLogic\n var propertyFilters = criteria.property_filters;\n var filtersMatch = true; // default to true if no filters\n\n if (propertyFilters && !_.isEmptyObject(propertyFilters)) {\n try {\n // Use properties as-is for case-sensitive matching\n filtersMatch = jsonLogic.apply(propertyFilters, properties || {});\n } catch (error) {\n return {\n matches: false,\n error: error.toString()\n };\n }\n }\n\n return { matches: filtersMatch };\n};\n\nexport {\n eventMatchesCriteria\n};\n","import { window } from '../window';\nimport { TARGETING_GLOBAL_NAME } from '../config';\nimport { eventMatchesCriteria } from './event-matcher';\n\n// Create targeting library object\nvar targetingLibrary = {};\ntargetingLibrary['eventMatchesCriteria'] = eventMatchesCriteria;\n\n// Set global Promise (use bracket notation to prevent minification)\n// This is the ONE AND ONLY global - matches recorder pattern\nwindow[TARGETING_GLOBAL_NAME] = Promise.resolve(targetingLibrary);\n"],"names":["win","loc","Config","TARGETING_GLOBAL_NAME","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","timer","fn","obj","name","val","config","err","first","last","item","Item","self","f","schedule","isThenable","o","_then","oType","notify","i","notifyIsolated","cb","chain","ret","resolve","msg","defWrapper","MakeDefWrapper","reject","iteratePromises","Constructor","arr","resolver","rejecter","idx","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","len","msgs","count","ArrayProto","FuncProto","ObjProto","slice","toString","hasOwnProperty","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","_","func","context","args","bound","ctor","result","iterator","l","key","source","prop","iterable","callback","results","value","target","found","str","needle","subclass","superclass","encoded","v","k","d","pad","n","p","length","mixed_val","quote","string","escapable","meta","a","c","holder","gap","indent","mind","partial","at","ch","escapee","text","error","m","e","next","number","hex","uffff","white","word","array","object","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","start","end","stringl","c1","uuid","x","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","url","param","regexS","regex","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","element","type","handler","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","event","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","selector","className","getElementsBySelector","tokens","token","tagName","foundCount","j","elements","currentContextIndex","currentContext","id","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","params","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","matches","split","extra_props","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","parts","tld","JSONStringify","JSONParse","root","factory","module","this","arg","arrayUnique","jsonLogic","operations","b","temp","not_found","sub_props","missing","keys","need_count","options","are_missing","logic","op","values","current","scopedLogic","scopedData","initial","datum","accumulator","sub_ops","operation","collection","code","rule","pattern","pattern_op","rule_op","RFC3339_REGEX","SEMVER_PARTS","MAX_SEMVER_LENGTH","MAX_EPOCH_MS","SEMVER_REGEX","registerCustomOperators","semverCompare","datetimeCompare","ops","operands","actual","normalizeSemver","cmp","compareSemver","comparatorMatches","splitSemver","version","plus","dash","isNumericIdentifier","identifier","compareNumeric","comparePrereleaseIdentifier","aNumeric","bNumeric","actualVersion","targetVersion","shared","actualSec","convertRfc3339ToUnixSeconds","targetSec","convertUnixMillisecondsToSeconds","symbol","stripped","suffixStart","separators","index","core","suffix","isRealCalendarDate","year","month","day","hour","dt","normalized","fields","parsed","ms","truncate","eventMatchesCriteria","eventName","properties","criteria","propertyFilters","filtersMatch","targetingLibrary"],"mappings":"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","x_google_ignoreList":[4]} \ No newline at end of file diff --git a/dist/async-modules/mixpanel-targeting-DVY6oAEA.js b/dist/async-modules/mixpanel-targeting-SfM6RnV-.js similarity index 99% rename from dist/async-modules/mixpanel-targeting-DVY6oAEA.js rename to dist/async-modules/mixpanel-targeting-SfM6RnV-.js index e2a0cb79..e6772cac 100644 --- a/dist/async-modules/mixpanel-targeting-DVY6oAEA.js +++ b/dist/async-modules/mixpanel-targeting-SfM6RnV-.js @@ -27,7 +27,7 @@ } var Config = { - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules diff --git a/dist/async-modules/mixpanel-targeting-z3yre0-D.min.js b/dist/async-modules/mixpanel-targeting-z3yre0-D.min.js new file mode 100644 index 00000000..265e499e --- /dev/null +++ b/dist/async-modules/mixpanel-targeting-z3yre0-D.min.js @@ -0,0 +1,2 @@ +(function(){"use strict";var m;if(typeof window=="undefined"){var K={hostname:""};m={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:K,referrer:""},screen:{width:0,height:0},location:K,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else m=window;var Oe={LIB_VERSION:"2.85.0-rc1"},be="__mp_targeting",Q=m.setImmediate,S,$,R,X=Object.prototype.toString,Ee=typeof Q!="undefined"?function(r){return Q(r)}:setTimeout;try{Object.defineProperty({},"x",{}),S=function(r,i,n,u){return Object.defineProperty(r,i,{value:n,writable:!0,configurable:u!==!1})}}catch(e){S=function(i,n,u){return i[n]=u,i}}R=(function(){var r,i,n;function u(t,o){this.fn=t,this.self=o,this.next=void 0}return{add:function(o,s){n=new u(o,s),i?i.next=n:r=n,i=n,n=void 0},drain:function(){var o=r;for(r=i=$=void 0;o;)o.fn.call(o.self),o=o.next}}})();function I(e,r){R.add(e,r),$||($=Ee(R.drain))}function Z(e){var r,i=typeof e;return e!==null&&(i==="object"||i==="function")&&(r=e.then),typeof r=="function"?r:!1}function j(){for(var e=0;e0&&I(j,i))}catch(n){P.call(new ee(i),n)}}}function P(e){var r=this;r.triggered||(r.triggered=!0,r.def&&(r=r.def),r.msg=e,r.state=2,r.chain.length>0&&I(j,r))}function Y(e,r,i,n){for(var u=0;u0&&(r[n]=i)}),r},a.truncate=function(e,r){var i;return typeof e=="string"?i=e.slice(0,r):a.isArray(e)?(i=[],a.each(e,function(n){i.push(a.truncate(n,r))})):a.isObject(e)?(i={},a.each(e,function(n,u){i[u]=a.truncate(n,r)})):i=e,i},a.JSONEncode=(function(){return function(e){var r=e,i=function(u){var t=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,o={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return t.lastIndex=0,t.test(u)?'"'+u.replace(t,function(s){var f=o[s];return typeof f=="string"?f:"\\u"+("0000"+s.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+u+'"'},n=function(u,t){var o="",s=" ",f=0,l="",h="",g=0,c=o,d=[],p=t[u];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(u)),typeof p){case"string":return i(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(o+=s,d=[],N.apply(p)==="[object Array]"){for(g=p.length,f=0;f="0"&&r<="9";)p+=r,t();if(r===".")for(p+=".";t()&&r>="0"&&r<="9";)p+=r;if(r==="e"||r==="E")for(p+=r,t(),(r==="-"||r==="+")&&(p+=r,t());r>="0"&&r<="9";)p+=r,t();if(d=+p,!isFinite(d))u("Bad number");else return d},s=function(){var d,p,y="",v;if(r==='"')for(;t();){if(r==='"')return t(),y;if(r==="\\")if(t(),r==="u"){for(v=0,p=0;p<4&&(d=parseInt(t(),16),!!isFinite(d));p+=1)v=v*16+d;y+=String.fromCharCode(v)}else if(typeof i[r]=="string")y+=i[r];else break;else y+=r}u("Bad string")},f=function(){for(;r&&r<=" ";)t()},l=function(){switch(r){case"t":return t("t"),t("r"),t("u"),t("e"),!0;case"f":return t("f"),t("a"),t("l"),t("s"),t("e"),!1;case"n":return t("n"),t("u"),t("l"),t("l"),null}u('Unexpected "'+r+'"')},h,g=function(){var d=[];if(r==="["){if(t("["),f(),r==="]")return t("]"),d;for(;r;){if(d.push(h()),f(),r==="]")return t("]"),d;t(","),f()}}u("Bad array")},c=function(){var d,p={};if(r==="{"){if(t("{"),f(),r==="}")return t("}"),p;for(;r;){if(d=s(),f(),t(":"),Object.hasOwnProperty.call(p,d)&&u('Duplicate key "'+d+'"'),p[d]=h(),f(),r==="}")return t("}"),p;t(","),f()}}u("Bad object")};return h=function(){switch(f(),r){case"{":return c();case"[":return g();case'"':return s();case"-":return o();default:return r>="0"&&r<="9"?o():l()}},function(d){var p;return n=d,e=0,r=" ",p=h(),f(),r&&u("Syntax error"),p}})(),a.base64Encode=function(e){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i,n,u,t,o,s,f,l,h=0,g=0,c="",d=[];if(!e)return e;e=a.utf8Encode(e);do i=e.charCodeAt(h++),n=e.charCodeAt(h++),u=e.charCodeAt(h++),l=i<<16|n<<8|u,t=l>>18&63,o=l>>12&63,s=l>>6&63,f=l&63,d[g++]=r.charAt(t)+r.charAt(o)+r.charAt(s)+r.charAt(f);while(h127&&o<2048?s=String.fromCharCode(o>>6|192,o&63|128):s=String.fromCharCode(o>>12|224,o>>6&63|128,o&63|128),s!==null&&(n>i&&(r+=e.substring(i,n)),r+=s,i=n=t+1)}return n>i&&(r+=e.substring(i,e.length)),r},a.UUID=function(){try{return m.crypto.randomUUID()}catch(i){for(var e=new Array(36),r=0;r<36;r++)e[r]=Math.floor(Math.random()*16);return e[14]=4,e[19]=e[19]&=-5,e[19]=e[19]|=8,e[8]=e[13]=e[18]=e[23]="-",a.map(e,function(n){return n.toString(16)}).join("")}};var ae=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];a.isBlockedUA=function(e){var r;for(e=e.toLowerCase(),r=0;r=0}function n(u){if(!A.getElementsByTagName)return[];var t=u.split(" "),o,s,f,l,h,g,c,d,p,y,v=[A];for(g=0;g-1){s=o.split("#"),f=s[0];var V=s[1],H=A.getElementById(V);if(!H||f&&H.nodeName.toLowerCase()!=f)return[];v=[H];continue}if(o.indexOf(".")>-1){s=o.split("."),f=s[0];var tr=s[1];for(f||(f="*"),l=[],h=0,c=0;c-1};break;default:O=function(w){return w.getAttribute(_)}}for(v=[],y=0,c=0;c=3?r[2]:""},currentUrl:function(){return m.location.href},properties:function(e){return typeof e!="object"&&(e={}),a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D),$referrer:A.referrer,$referring_domain:a.info.referringDomain(A.referrer),$device:a.info.device(C)}),{$current_url:a.info.currentUrl(),$browser_version:a.info.browserVersion(C,B.vendor,D),$screen_height:ne.height,$screen_width:ne.width,mp_lib:"web",$lib_version:Oe.LIB_VERSION,$insert_id:le(),time:a.timestamp()/1e3},a.strip_empty_properties(e))},people_properties:function(){return a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D)}),{$browser_version:a.info.browserVersion(C,B.vendor,D)})},mpPageViewProperties:function(){return a.strip_empty_properties({current_page_title:A.title,current_domain:m.location.hostname,current_url_path:m.location.pathname,current_url_protocol:m.location.protocol,current_url_search:m.location.search})}};var le=function(e){var r=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return e?r.substring(0,e):r},$e=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Re=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,ce=function(e){var r=Re,i=e.split("."),n=i[i.length-1];(n.length>4||n==="com"||n==="org")&&(r=$e);var u=e.match(r);return u?u[0]:""},J=null,G=null;typeof JSON!="undefined"&&(J=JSON.stringify,G=JSON.parse),J=J||a.JSONEncode,G=G||a.JSONDecode,a.info=a.info,a.info.browser=a.info.browser,a.info.browserVersion=a.info.browserVersion,a.info.device=a.info.device,a.info.properties=a.info.properties,a.isBlockedUA=a.isBlockedUA,a.isEmptyObject=a.isEmptyObject,a.isObject=a.isObject,a.JSONDecode=a.JSONDecode,a.JSONEncode=a.JSONEncode,a.toArray=a.toArray,a.NPO=b;function je(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var k={exports:{}},Fe=k.exports,pe;function Le(){return pe||(pe=1,(function(e,r){(function(i,n){e.exports=n()})(Fe,function(){Array.isArray||(Array.isArray=function(t){return Object.prototype.toString.call(t)==="[object Array]"});function i(t){for(var o=[],s=0,f=t.length;s":function(t,o){return t>o},">=":function(t,o){return t>=o},"<":function(t,o,s){return s===void 0?t=t?[]:s}};return n.is_logic=function(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1},n.truthy=function(t){return Array.isArray(t)&&t.length===0?!1:!!t},n.get_operator=function(t){return Object.keys(t)[0]},n.get_values=function(t){return t[n.get_operator(t)]},n.apply=function(t,o){if(Array.isArray(t))return t.map(function(v){return n.apply(v,o)});if(!n.is_logic(t))return t;var s=n.get_operator(t),f=t[s],l,h,g,c,d;if(Array.isArray(f)||(f=[f]),s==="if"||s=="?:"){for(l=0;l0){var p=String(s).split("."),y=u;for(l=0;lhe||e.target.length>he)return!1;var r=Se(e.actual),i=Se(e.target);if(!ge.test(r)||!ge.test(i))return!1;var n=Qe(r,i);return Ae(n,e.symbol)}function ve(e){var r=e.indexOf("+");r!==-1&&(e=e.slice(0,r));var i=e.indexOf("-");return i===-1?{core:e.split("."),prerelease:[]}:{core:e.slice(0,i).split("."),prerelease:e.slice(i+1).split(".")}}function me(e){return/^[0-9]+$/.test(e)}function ye(e,r){return e.length!==r.length?e.lengthr?1:0}function Ke(e,r){var i=me(e),n=me(r);return i&&n?ye(e,r):i?-1:n?1:er?1:0}function Qe(e,r){var i=ve(e),n=ve(r),u,t;for(u=0;u":return e>0;case">=":return e>=0;default:return!1}}function Se(e){for(var r=e.trim().replace(/^[vV]/,""),i=r.length,n=["-","+"],u=0;u23)return!1;var u=new Date;return u.setUTCFullYear(e,r-1,i),u.getUTCFullYear()===e&&u.getUTCMonth()===r-1&&u.getUTCDate()===i}function qe(e){if(typeof e!="string")return null;var r=e.trim().toUpperCase(),i=We.exec(r);if(!i||!Ze(Number(i[1]),Number(i[2]),Number(i[3]),Number(i[4])))return null;var n=new Date(r),u=n.getTime();return isNaN(u)?null:Math.floor(u/1e3)}function Ye(e){return typeof e!="number"||!isFinite(e)||e>=Ge||e<=-9223372036854776e3?null:er(e/1e3)}function er(e){return e<0?Math.ceil(e):Math.floor(e)}Ve(de);var rr=function(e,r,i){if(e!==i.event_name)return{matches:!1};var n=i.property_filters,u=!0;if(n&&!a.isEmptyObject(n))try{u=de.apply(n,r||{})}catch(t){return{matches:!1,error:t.toString()}}return{matches:u}},_e={};_e.eventMatchesCriteria=rr,m[be]=Promise.resolve(_e)})(); +//# sourceMappingURL=mixpanel-targeting-z3yre0-D.min.js.map diff --git a/dist/async-modules/mixpanel-targeting-z3yre0-D.min.js.map b/dist/async-modules/mixpanel-targeting-z3yre0-D.min.js.map new file mode 100644 index 00000000..f82dce21 --- /dev/null +++ b/dist/async-modules/mixpanel-targeting-z3yre0-D.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mixpanel-targeting-z3yre0-D.min.js","sources":["../../src/window.js","../../src/config.js","../../src/promise-polyfill.js","../../src/utils.js","../../node_modules/json-logic-js/logic.js","../../src/targeting/custom-operators.js","../../src/targeting/event-matcher.js","../../src/targeting/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.85.0-rc1'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","/* globals define,module */\n/*\nUsing a Universal Module Loader that should be browser, require, and AMD friendly\nhttp://ricostacruz.com/cheatsheets/umdjs.html\n*/\n;(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.jsonLogic = factory();\n }\n}(this, function() {\n \"use strict\";\n /* globals console:false */\n\n if ( ! Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === \"[object Array]\";\n };\n }\n\n /**\n * Return an array that contains no duplicates (original not modified)\n * @param {array} array Original reference array\n * @return {array} New array with no duplicates\n */\n function arrayUnique(array) {\n var a = [];\n for (var i=0, l=array.length; i\": function(a, b) {\n return a > b;\n },\n \">=\": function(a, b) {\n return a >= b;\n },\n \"<\": function(a, b, c) {\n return (c === undefined) ? a < b : (a < b) && (b < c);\n },\n \"<=\": function(a, b, c) {\n return (c === undefined) ? a <= b : (a <= b) && (b <= c);\n },\n \"!!\": function(a) {\n return jsonLogic.truthy(a);\n },\n \"!\": function(a) {\n return !jsonLogic.truthy(a);\n },\n \"%\": function(a, b) {\n return a % b;\n },\n \"log\": function(a) {\n console.log(a); return a;\n },\n \"in\": function(a, b) {\n if (!b || typeof b.indexOf === \"undefined\") return false;\n return (b.indexOf(a) !== -1);\n },\n \"cat\": function() {\n return Array.prototype.join.call(arguments, \"\");\n },\n \"substr\": function(source, start, end) {\n if (end < 0) {\n // JavaScript doesn't support negative end, this emulates PHP behavior\n var temp = String(source).substr(start);\n return temp.substr(0, temp.length + end);\n }\n return String(source).substr(start, end);\n },\n \"+\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) + parseFloat(b, 10);\n }, 0);\n },\n \"*\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) * parseFloat(b, 10);\n });\n },\n \"-\": function(a, b) {\n if (b === undefined) {\n return -a;\n } else {\n return a - b;\n }\n },\n \"/\": function(a, b) {\n return a / b;\n },\n \"min\": function() {\n return Math.min.apply(this, arguments);\n },\n \"max\": function() {\n return Math.max.apply(this, arguments);\n },\n \"merge\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return a.concat(b);\n }, []);\n },\n \"var\": function(a, b) {\n var not_found = (b === undefined) ? null : b;\n var data = this;\n if (typeof a === \"undefined\" || a===\"\" || a===null) {\n return data;\n }\n var sub_props = String(a).split(\".\");\n for (var i = 0; i < sub_props.length; i++) {\n if (data === null || data === undefined) {\n return not_found;\n }\n // Descending into data\n data = data[sub_props[i]];\n if (data === undefined) {\n return not_found;\n }\n }\n return data;\n },\n \"missing\": function() {\n /*\n Missing can receive many keys as many arguments, like {\"missing:[1,2]}\n Missing can also receive *one* argument that is an array of keys,\n which typically happens if it's actually acting on the output of another command\n (like 'if' or 'merge')\n */\n\n var missing = [];\n var keys = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = jsonLogic.apply({\"var\": key}, this);\n if (value === null || value === \"\") {\n missing.push(key);\n }\n }\n\n return missing;\n },\n \"missing_some\": function(need_count, options) {\n // missing_some takes two arguments, how many (minimum) items must be present, and an array of keys (just like 'missing') to check for presence.\n var are_missing = jsonLogic.apply({\"missing\": options}, this);\n\n if (options.length - are_missing.length >= need_count) {\n return [];\n } else {\n return are_missing;\n }\n },\n };\n\n jsonLogic.is_logic = function(logic) {\n return (\n typeof logic === \"object\" && // An object\n logic !== null && // but not null\n ! Array.isArray(logic) && // and not an array\n Object.keys(logic).length === 1 // with exactly one key\n );\n };\n\n /*\n This helper will defer to the JsonLogic spec as a tie-breaker when different language interpreters define different behavior for the truthiness of primitives. E.g., PHP considers empty arrays to be falsy, but Javascript considers them to be truthy. JsonLogic, as an ecosystem, needs one consistent answer.\n\n Spec and rationale here: http://jsonlogic.com/truthy\n */\n jsonLogic.truthy = function(value) {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n return !! value;\n };\n\n\n jsonLogic.get_operator = function(logic) {\n return Object.keys(logic)[0];\n };\n\n jsonLogic.get_values = function(logic) {\n return logic[jsonLogic.get_operator(logic)];\n };\n\n jsonLogic.apply = function(logic, data) {\n // Does this array contain logic? Only one way to find out.\n if (Array.isArray(logic)) {\n return logic.map(function(l) {\n return jsonLogic.apply(l, data);\n });\n }\n // You've recursed to a primitive, stop!\n if ( ! jsonLogic.is_logic(logic) ) {\n return logic;\n }\n\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n var i;\n var current;\n var scopedLogic;\n var scopedData;\n var initial;\n\n // easy syntax for unary operators, like {\"var\" : \"x\"} instead of strict {\"var\" : [\"x\"]}\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n // 'if', 'and', and 'or' violate the normal rule of depth-first calculating consequents, let each manage recursion as needed.\n if (op === \"if\" || op == \"?:\") {\n /* 'if' should be called with a odd number of parameters, 3 or greater\n This works on the pattern:\n if( 0 ){ 1 }else{ 2 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else{ 4 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else if( 4 ){ 5 }else{ 6 };\n\n The implementation is:\n For pairs of values (0,1 then 2,3 then 4,5 etc)\n If the first evaluates truthy, evaluate and return the second\n If the first evaluates falsy, jump to the next pair (e.g, 0,1 to 2,3)\n given one parameter, evaluate and return it. (it's an Else and all the If/ElseIf were false)\n given 0 parameters, return NULL (not great practice, but there was no Else)\n */\n for (i = 0; i < values.length - 1; i += 2) {\n if ( jsonLogic.truthy( jsonLogic.apply(values[i], data) ) ) {\n return jsonLogic.apply(values[i+1], data);\n }\n }\n if (values.length === i+1) {\n return jsonLogic.apply(values[i], data);\n }\n return null;\n } else if (op === \"and\") { // Return first falsy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( ! jsonLogic.truthy(current)) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"or\") {// Return first truthy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( jsonLogic.truthy(current) ) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"filter\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n // Return only the elements from the array in the first argument,\n // that return truthy when passed to the logic in the second argument.\n // For parity with JavaScript, reindex the returned array\n return scopedData.filter(function(datum) {\n return jsonLogic.truthy( jsonLogic.apply(scopedLogic, datum));\n });\n } else if (op === \"map\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n\n return scopedData.map(function(datum) {\n return jsonLogic.apply(scopedLogic, datum);\n });\n } else if (op === \"reduce\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n initial = typeof values[2] !== \"undefined\" ? jsonLogic.apply(values[2], data) : null;\n\n if ( ! Array.isArray(scopedData)) {\n return initial;\n }\n\n return scopedData.reduce(\n function(accumulator, current) {\n return jsonLogic.apply(\n scopedLogic,\n {current: current, accumulator: accumulator}\n );\n },\n initial\n );\n } else if (op === \"all\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n // All of an empty set is false. Note, some and none have correct fallback after the for loop\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( ! jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First falsy, short circuit\n }\n }\n return true; // All were truthy\n } else if (op === \"none\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return true;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First truthy, short circuit\n }\n }\n return true; // None were truthy\n } else if (op === \"some\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return true; // First truthy, short circuit\n }\n }\n return false; // None were truthy\n }\n\n // Everyone else gets immediate depth-first recursion\n values = values.map(function(val) {\n return jsonLogic.apply(val, data);\n });\n\n\n // The operation is called with \"data\" bound to its \"this\" and \"values\" passed as arguments.\n // Structured commands like % or > can name formal arguments while flexible commands (like missing or merge) can operate on the pseudo-array arguments\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n if (operations.hasOwnProperty(op) && typeof operations[op] === \"function\") {\n return operations[op].apply(data, values);\n } else if (op.indexOf(\".\") > 0) { // Contains a dot, and not in the 0th position\n var sub_ops = String(op).split(\".\");\n var operation = operations;\n for (i = 0; i < sub_ops.length; i++) {\n if (!operation.hasOwnProperty(sub_ops[i])) {\n throw new Error(\"Unrecognized operation \" + op +\n \" (failed at \" + sub_ops.slice(0, i+1).join(\".\") + \")\");\n }\n // Descending into operations\n operation = operation[sub_ops[i]];\n }\n\n return operation.apply(data, values);\n }\n\n throw new Error(\"Unrecognized operation \" + op );\n };\n\n jsonLogic.uses_data = function(logic) {\n var collection = [];\n\n if (jsonLogic.is_logic(logic)) {\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n if (op === \"var\") {\n // This doesn't cover the case where the arg to var is itself a rule.\n collection.push(values[0]);\n } else {\n // Recursion!\n values.forEach(function(val) {\n collection.push.apply(collection, jsonLogic.uses_data(val) );\n });\n }\n }\n\n return arrayUnique(collection);\n };\n\n jsonLogic.add_operation = function(name, code) {\n operations[name] = code;\n };\n\n jsonLogic.rm_operation = function(name) {\n delete operations[name];\n };\n\n jsonLogic.rule_like = function(rule, pattern) {\n // console.log(\"Is \". JSON.stringify(rule) . \" like \" . JSON.stringify(pattern) . \"?\");\n if (pattern === rule) {\n return true;\n } // TODO : Deep object equivalency?\n if (pattern === \"@\") {\n return true;\n } // Wildcard!\n if (pattern === \"number\") {\n return (typeof rule === \"number\");\n }\n if (pattern === \"string\") {\n return (typeof rule === \"string\");\n }\n if (pattern === \"array\") {\n // !logic test might be superfluous in JavaScript\n return Array.isArray(rule) && ! jsonLogic.is_logic(rule);\n }\n\n if (jsonLogic.is_logic(pattern)) {\n if (jsonLogic.is_logic(rule)) {\n var pattern_op = jsonLogic.get_operator(pattern);\n var rule_op = jsonLogic.get_operator(rule);\n\n if (pattern_op === \"@\" || pattern_op === rule_op) {\n // echo \"\\nOperators match, go deeper\\n\";\n return jsonLogic.rule_like(\n jsonLogic.get_values(rule, false),\n jsonLogic.get_values(pattern, false)\n );\n }\n }\n return false; // pattern is logic, rule isn't, can't be eq\n }\n\n if (Array.isArray(pattern)) {\n if (Array.isArray(rule)) {\n if (pattern.length !== rule.length) {\n return false;\n }\n /*\n Note, array order MATTERS, because we're using this array test logic to consider arguments, where order can matter. (e.g., + is commutative, but '-' or 'if' or 'var' are NOT)\n */\n for (var i = 0; i < pattern.length; i += 1) {\n // If any fail, we fail\n if ( ! jsonLogic.rule_like(rule[i], pattern[i])) {\n return false;\n }\n }\n return true; // If they *all* passed, we pass\n } else {\n return false; // Pattern is array, rule isn't\n }\n }\n\n // Not logic, not array, not a === match for rule.\n return false;\n };\n\n return jsonLogic;\n}));\n","// Strict RFC3339 guard for datetime strings. The date and hour fields are captured so the calendar\n// can be validated separately; the regex only constrains their shape.\nvar RFC3339_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})[Tt](\\d{2}):\\d{2}:\\d{2}(\\.\\d+)?([Zz]|[+-]\\d{2}:\\d{2})$/;\n\n// SemVer 2.0.0 requires major.minor.patch; partial versions are zero-padded to this.\nvar SEMVER_PARTS = 3;\n\n// Longest operand the semver regex is allowed to see. A real version never approaches this; the\n// bound matches MAX_LENGTH in node-semver, and keeps an arbitrarily long property value off the\n// regex regardless of how the engine schedules backtracking.\nvar MAX_SEMVER_LENGTH = 256;\n\n// Epoch milliseconds are compared as int64 elsewhere, so anything at or beyond this is out of range.\nvar MAX_EPOCH_MS = 9223372036854775808;\n\n// Using the official semantic versioning 2.0.0 regular expression to handle cross-platform validation\n// differences on other SDK's. For example, some platforms allow leading zeros even though it is not valid\n// as part of the Semver 2.0.0 spec. See https://semver.org/\nvar SEMVER_REGEX = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n// Registers custom operators into the JSONLogic engine.\n// 1. Semantic Versioning 2.0.0 comparison\n// 2. RFC3339 datetime comparison\nfunction registerCustomOperators(jsonLogic) {\n jsonLogic.add_operation('semver_compare', semverCompare);\n jsonLogic.add_operation('datetime_compare', datetimeCompare);\n}\n\n// Implements a custom operation for semantic versioning comparison that conforms to the semver 2.0.0 standard.\n// Prior to comparison, any leading version prefix is stripped.\nfunction semverCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n if (typeof ops.actual !== 'string' || typeof ops.target !== 'string') {\n return false;\n }\n if (ops.actual.length > MAX_SEMVER_LENGTH || ops.target.length > MAX_SEMVER_LENGTH) {\n return false;\n }\n var actual = normalizeSemver(ops.actual);\n var target = normalizeSemver(ops.target);\n if (!SEMVER_REGEX.test(actual) || !SEMVER_REGEX.test(target)) {\n return false;\n }\n var cmp = compareSemver(actual, target);\n return comparatorMatches(cmp, ops.symbol);\n}\n\n// Strip optional build metadata and separate the core version from pre-release identifiers\nfunction splitSemver(version) {\n var plus = version.indexOf('+');\n if (plus !== -1) {\n version = version.slice(0, plus);\n }\n var dash = version.indexOf('-');\n if (dash === -1) {\n return {core: version.split('.'), prerelease: []};\n }\n return {core: version.slice(0, dash).split('.'), prerelease: version.slice(dash + 1).split('.')};\n}\n\nfunction isNumericIdentifier(identifier) {\n return /^[0-9]+$/.test(identifier);\n}\n\n// Numeric identifiers carry no leading zeros, so the longer run of digits is the larger number.\n// Comparing them as digits rather than as numbers keeps versions past Number.MAX_SAFE_INTEGER ordered\n// correctly.\nfunction compareNumeric(a, b) {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// SemVer 2.0.0 section 11.4: digits compare numerically, a numeric identifier ranks below an\n// alphanumeric one, and anything else compares by ASCII order.\nfunction comparePrereleaseIdentifier(a, b) {\n var aNumeric = isNumericIdentifier(a);\n var bNumeric = isNumericIdentifier(b);\n if (aNumeric && bNumeric) {\n return compareNumeric(a, b);\n }\n if (aNumeric) {\n return -1;\n }\n if (bNumeric) {\n return 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// Ordering per SemVer 2.0.0 section 11. Both operands have already been normalized and matched against\n// the official regex, so the core holds exactly three numeric identifiers and every prerelease field is\n// well-formed; the split needs no error path.\nfunction compareSemver(actualVersion, targetVersion) {\n var actual = splitSemver(actualVersion);\n var target = splitSemver(targetVersion);\n var i, result;\n\n for (i = 0; i < actual.core.length; i++) {\n result = compareNumeric(actual.core[i], target.core[i]);\n if (result !== 0) {\n return result;\n }\n }\n\n // A prerelease ranks below the release it belongs to (section 11.3).\n if (!actual.prerelease.length && !target.prerelease.length) {\n return 0;\n }\n if (!actual.prerelease.length) {\n return 1;\n }\n if (!target.prerelease.length) {\n return -1;\n }\n\n var shared = Math.min(actual.prerelease.length, target.prerelease.length);\n for (i = 0; i < shared; i++) {\n result = comparePrereleaseIdentifier(actual.prerelease[i], target.prerelease[i]);\n if (result !== 0) {\n return result;\n }\n }\n // Every field so far is equal, so the longer list wins (section 11.4.4).\n if (actual.prerelease.length !== target.prerelease.length) {\n return actual.prerelease.length < target.prerelease.length ? -1 : 1;\n }\n return 0;\n}\n\n// Implements a custom operation for datetime comparison.\n// The target value stored on the feature flag is the millisecond epoch, whereas the actual value provided at evaluation time must be RFC-3339 formatted.\nfunction datetimeCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n var actualSec = convertRfc3339ToUnixSeconds(ops.actual);\n var targetSec = convertUnixMillisecondsToSeconds(ops.target);\n if (actualSec === null || targetSec === null) {\n return false;\n }\n var cmp = actualSec - targetSec;\n return comparatorMatches(cmp, ops.symbol);\n}\n\nfunction operands(args) {\n if (args.length !== 3) {\n return null;\n }\n return { actual: args[0], symbol: args[1], target: args[2] };\n}\n\nfunction comparatorMatches(cmp, symbol) {\n switch (symbol) {\n case '===':\n return cmp === 0;\n case '!==':\n return cmp !== 0;\n case '<':\n return cmp < 0;\n case '<=':\n return cmp <= 0;\n case '>':\n return cmp > 0;\n case '>=':\n return cmp >= 0;\n default:\n return false;\n }\n}\n\nfunction normalizeSemver(version) {\n var stripped = version.trim().replace(/^[vV]/, '');\n\n var suffixStart = stripped.length;\n var separators = ['-', '+'];\n for (var i = 0; i < separators.length; i++) {\n var index = stripped.indexOf(separators[i]);\n if (index !== -1 && index < suffixStart) {\n suffixStart = index;\n }\n }\n\n var core = stripped.slice(0, suffixStart);\n var suffix = stripped.slice(suffixStart);\n\n var parts = core.split('.');\n while (parts.length < SEMVER_PARTS) {\n parts.push('0');\n }\n return parts.join('.') + suffix;\n}\n\n// The regex constrains each field to two digits, which still admits a date that cannot exist, such as\n// 2026-02-30 or 29 February in a common year. Writing the fields into a Date and reading them back\n// settles it: out-of-range fields are normalized into a real instant, so a date that does not exist\n// comes back carrying different fields than it went in with. The three-argument setUTCFullYear sets\n// all three at once, which judges 29 February against the year given rather than a placeholder, and\n// leaves years 0 through 99 alone where Date.UTC would map them into the 1900s. The hour is checked\n// separately because it is not part of the round trip; RFC 3339 section 5.6 allows hours 00 through 23.\nfunction isRealCalendarDate(year, month, day, hour) {\n if (hour > 23) {\n return false;\n }\n var dt = new Date();\n dt.setUTCFullYear(year, month - 1, day);\n return dt.getUTCFullYear() === year && dt.getUTCMonth() === month - 1 && dt.getUTCDate() === day;\n}\n\nfunction convertRfc3339ToUnixSeconds(v) {\n if (typeof v !== 'string') {\n return null;\n }\n var normalized = v.trim().toUpperCase();\n var fields = RFC3339_REGEX.exec(normalized);\n if (!fields) {\n return null;\n }\n if (!isRealCalendarDate(Number(fields[1]), Number(fields[2]), Number(fields[3]), Number(fields[4]))) {\n return null;\n }\n var parsed = new Date(normalized);\n var ms = parsed.getTime();\n if (isNaN(ms)) {\n return null;\n }\n return Math.floor(ms / 1000);\n}\n\nfunction convertUnixMillisecondsToSeconds(v) {\n if (typeof v !== 'number' || !isFinite(v)) {\n return null;\n }\n // A value int64 cannot represent is not a real timestamp; treating one as a bound would let a\n // nonsense target define a rollout window.\n if (v >= MAX_EPOCH_MS || v <= -MAX_EPOCH_MS) {\n return null;\n }\n return truncate(v / 1000);\n}\n\nfunction truncate(n) {\n return n < 0 ? Math.ceil(n) : Math.floor(n);\n}\n\nexport {\n registerCustomOperators,\n semverCompare,\n datetimeCompare\n};\n","import { _ } from '../utils';\nimport jsonLogic from 'json-logic-js';\nimport { registerCustomOperators } from './custom-operators';\n\n// Register typed runtime-targeting operators (semver_compare, datetime_compare) into the JsonLogic engine.\n// Registration happens lazily, when the async targeting bundle loads.\nregisterCustomOperators(jsonLogic);\n\n/**\n * Check if an event matches the given criteria\n * @param {string} eventName - The name of the event being checked\n * @param {Object} properties - Event properties to evaluate against property filters\n * @param {Object} criteria - Criteria to match against, with:\n * - event_name: string - Required event name (case-sensitive match)\n * - property_filters: Object - Optional JsonLogic filters for properties\n * @returns {Object} Result object with:\n * - matches: boolean - Whether the event matches the criteria\n * - error: string|undefined - Error message if evaluation failed\n */\nvar eventMatchesCriteria = function(eventName, properties, criteria) {\n // Check exact event name match (case-sensitive)\n if (eventName !== criteria.event_name) {\n return { matches: false };\n }\n\n // Evaluate property filters using JsonLogic\n var propertyFilters = criteria.property_filters;\n var filtersMatch = true; // default to true if no filters\n\n if (propertyFilters && !_.isEmptyObject(propertyFilters)) {\n try {\n // Use properties as-is for case-sensitive matching\n filtersMatch = jsonLogic.apply(propertyFilters, properties || {});\n } catch (error) {\n return {\n matches: false,\n error: error.toString()\n };\n }\n }\n\n return { matches: filtersMatch };\n};\n\nexport {\n eventMatchesCriteria\n};\n","import { window } from '../window';\nimport { TARGETING_GLOBAL_NAME } from '../config';\nimport { eventMatchesCriteria } from './event-matcher';\n\n// Create targeting library object\nvar targetingLibrary = {};\ntargetingLibrary['eventMatchesCriteria'] = eventMatchesCriteria;\n\n// Set global Promise (use bracket notation to prevent minification)\n// This is the ONE AND ONLY global - matches recorder pattern\nwindow[TARGETING_GLOBAL_NAME] = Promise.resolve(targetingLibrary);\n"],"names":["win","loc","Config","TARGETING_GLOBAL_NAME","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","timer","fn","obj","name","val","config","err","first","last","item","Item","self","f","schedule","isThenable","o","_then","oType","notify","i","notifyIsolated","cb","chain","ret","resolve","msg","defWrapper","MakeDefWrapper","reject","iteratePromises","Constructor","arr","resolver","rejecter","idx","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","len","msgs","count","ArrayProto","FuncProto","ObjProto","slice","toString","hasOwnProperty","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","_","func","context","args","bound","ctor","result","iterator","l","key","source","prop","iterable","callback","results","value","target","found","str","needle","subclass","superclass","encoded","v","k","d","pad","n","p","length","mixed_val","quote","string","escapable","meta","a","c","holder","gap","indent","mind","partial","at","ch","escapee","text","error","m","e","next","number","hex","uffff","white","word","array","object","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","start","end","stringl","c1","uuid","x","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","url","param","regexS","regex","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","element","type","handler","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","event","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","selector","className","getElementsBySelector","tokens","token","tagName","foundCount","j","elements","currentContextIndex","currentContext","id","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","params","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","matches","split","extra_props","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","parts","tld","JSONStringify","JSONParse","root","factory","module","this","arg","arrayUnique","jsonLogic","operations","b","temp","not_found","sub_props","missing","keys","need_count","options","are_missing","logic","op","values","current","scopedLogic","scopedData","initial","datum","accumulator","sub_ops","operation","collection","code","rule","pattern","pattern_op","rule_op","RFC3339_REGEX","SEMVER_PARTS","MAX_SEMVER_LENGTH","MAX_EPOCH_MS","SEMVER_REGEX","registerCustomOperators","semverCompare","datetimeCompare","ops","operands","actual","normalizeSemver","cmp","compareSemver","comparatorMatches","splitSemver","version","plus","dash","isNumericIdentifier","identifier","compareNumeric","comparePrereleaseIdentifier","aNumeric","bNumeric","actualVersion","targetVersion","shared","actualSec","convertRfc3339ToUnixSeconds","targetSec","convertUnixMillisecondsToSeconds","symbol","stripped","suffixStart","separators","index","core","suffix","isRealCalendarDate","year","month","day","hour","dt","normalized","fields","parsed","ms","truncate","eventMatchesCriteria","eventName","properties","criteria","propertyFilters","filtersMatch","targetingLibrary"],"mappings":"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","x_google_ignoreList":[4]} \ No newline at end of file diff --git a/dist/mixpanel-browser.cdx.json b/dist/mixpanel-browser.cdx.json index 0674946c..1e9c10f2 100644 --- a/dist/mixpanel-browser.cdx.json +++ b/dist/mixpanel-browser.cdx.json @@ -9,7 +9,7 @@ { "type": "application", "name": "npm", - "version": "11.16.0" + "version": "11.19.1" }, { "type": "library", diff --git a/dist/mixpanel-core.cjs.d.ts b/dist/mixpanel-core.cjs.d.ts index 6c9c4660..a0156e5f 100644 --- a/dist/mixpanel-core.cjs.d.ts +++ b/dist/mixpanel-core.cjs.d.ts @@ -10,6 +10,15 @@ export type Query = string | Element | Element[]; export type RemoteSettingType = "disabled" | "fallback" | "strict"; +/** + * What the SDK does before the visitor decides. "no_consent_required" tracks until + * opt_out_tracking(). "require_consent" stores and sends nothing until opt_in_tracking(); with it, + * opt_out_tracking_persistence_type and opt_out_persistence_by_default are ignored, and + * opt_out_tracking_cookie_prefix still names the stored flag. Unset means "no_consent_required"; + * opt_out_tracking_by_default applies only when consent_mode is unset. + */ +export type ConsentMode = "no_consent_required" | "require_consent" | null; + export interface EventTriggerProps { percentage: number; @@ -267,6 +276,7 @@ export interface Config { opt_out_persistence_by_default: boolean; opt_out_tracking_persistence_type: Persistence; opt_out_tracking_cookie_prefix: string; + consent_mode: ConsentMode; inapp_protocol: string; inapp_link_new_window: boolean; ignore_dnt: boolean; diff --git a/dist/mixpanel-core.cjs.js b/dist/mixpanel-core.cjs.js index 8a5e83d6..37e526ee 100644 --- a/dist/mixpanel-core.cjs.js +++ b/dist/mixpanel-core.cjs.js @@ -2,7 +2,7 @@ var Config = { DEBUG: false, - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules @@ -3946,11 +3946,13 @@ var getTargetingPromise = function(loadExtraBundle, targetingSrc) { /** * @type {import('./wrapper').StorageWrapper} */ -var IDBStorageWrapper = function (dbName, storeName, versionData) { +var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -3961,25 +3963,47 @@ IDBStorageWrapper.prototype._openDb = function () { var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -4228,16 +4252,23 @@ FeatureFlagPersistence.prototype.save = function(context, flagsMap, pendingFirst }); }; +/** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger$5.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger$5.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger$5.log('No persisted variants cleared from IndexedDB:', error); }); }; @@ -4300,11 +4331,15 @@ var FeatureFlagManager = function(initOptions) { this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger$4.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -4320,7 +4355,7 @@ FeatureFlagManager.prototype.init = function() { this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -4388,7 +4423,7 @@ FeatureFlagManager.prototype.getConfig = function(key) { }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -4419,6 +4454,14 @@ FeatureFlagManager.prototype.areFlagsReady = function() { return !!this.flags; }; +/** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ +FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); +}; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -4714,6 +4757,9 @@ FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) { }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); @@ -5036,6 +5082,8 @@ var RecorderManager = function(initOptions) { this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -5047,8 +5095,8 @@ var RecorderManager = function(initOptions) { }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console.log('Load recorder check skipped without persistence'); return PromisePolyfill.resolve(false); } @@ -5075,6 +5123,10 @@ RecorderManager.prototype.shouldLoadRecorder = function() { }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console.log('Session recording skipped without consent'); + return PromisePolyfill.resolve(); + } if (!win['MutationObserver']) { console.critical('Browser does not support MutationObserver; skipping session recording'); return PromisePolyfill.resolve(); @@ -5083,6 +5135,11 @@ RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, var loadRecorder = _.bind(function(startNewIfInactive) { return new PromisePolyfill(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new win[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); @@ -5714,6 +5771,7 @@ var RequestQueue = function (storageKey, options) { }); } this.reportError = options.errorReporter || _.bind(logger$1.error, logger$1); + this.consentGate = options.consentGate; this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios @@ -5765,7 +5823,7 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { 'payload': item }; - if (!this.usePersistence) { + if (!this._persists()) { this.memQueue.push(queueEntry); return PromisePolyfill.resolve(true); } else { @@ -5773,7 +5831,20 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { } }; +/** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ +RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); +}; + RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -5873,7 +5944,7 @@ RequestQueue.prototype.removeItemsByID = function (ids) { }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -5961,7 +6032,7 @@ var updatePayloads = function (existingItems, itemsToUpdate) { */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -6016,11 +6087,14 @@ RequestQueue.prototype.readFromStorage = function () { RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); }, this)) - .then(function () { - return true; - }) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -6065,7 +6139,8 @@ var RequestBatcher = function(storageKey, options) { sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -6380,721 +6455,448 @@ RequestBatcher.prototype.reportError = function(msg, err) { } }; -/** - * GDPR utils - * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. - * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. - */ +/* eslint camelcase: "off" */ -/** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ +/** @const */ var SET_ACTION = '$set'; +/** @const */ var SET_ONCE_ACTION = '$set_once'; +/** @const */ var UNSET_ACTION = '$unset'; +/** @const */ var ADD_ACTION = '$add'; +/** @const */ var APPEND_ACTION = '$append'; +/** @const */ var UNION_ACTION = '$union'; +/** @const */ var REMOVE_ACTION = '$remove'; +/** @const */ var DELETE_ACTION = '$delete'; -/** Public **/ +// Common internal methods for mixpanel.people and mixpanel.group APIs. +// These methods shouldn't involve network I/O. +var apiActions = { + set_action: function(prop, to) { + var data = {}; + var $set = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set[k] = v; + } + }, this); + } else { + $set[prop] = to; + } -var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; + data[SET_ACTION] = $set; + return data; + }, -/** - * Opt the user in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function optIn(token, options) { - _optInOut(true, token, options); -} + unset_action: function(prop) { + var data = {}; + var $unset = []; + if (!_.isArray(prop)) { + prop = [prop]; + } -/** - * Opt the user out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not - */ -function optOut(token, options) { - _optInOut(false, token, options); -} + _.each(prop, function(k) { + if (!this._is_reserved_property(k)) { + $unset.push(k); + } + }, this); -/** - * Check whether the user has opted in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {boolean} whether the user has opted in to the given opt type - */ -function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; -} + data[UNSET_ACTION] = $unset; + return data; + }, -/** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ -function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + set_once_action: function(prop, to) { + var data = {}; + var $set_once = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set_once[k] = v; + } + }, this); + } else { + $set_once[prop] = to; + } + data[SET_ONCE_ACTION] = $set_once; + return data; + }, + + union_action: function(list_name, values) { + var data = {}; + var $union = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $union[k] = _.isArray(v) ? v : [v]; + } + }, this); + } else { + $union[list_name] = _.isArray(values) ? values : [values]; + } + data[UNION_ACTION] = $union; + return data; + }, + + append_action: function(list_name, value) { + var data = {}; + var $append = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $append[k] = v; + } + }, this); + } else { + $append[list_name] = value; + } + data[APPEND_ACTION] = $append; + return data; + }, + + remove_action: function(list_name, value) { + var data = {}; + var $remove = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $remove[k] = v; + } + }, this); + } else { + $remove[list_name] = value; + } + data[REMOVE_ACTION] = $remove; + return data; + }, + + delete_action: function() { + var data = {}; + data[DELETE_ACTION] = ''; + return data; } - return optedOut; -} +}; -/** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); -} +/* eslint camelcase: "off" */ /** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * Mixpanel Group Object + * @class */ -function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} +function MixpanelGroup() {} + +_.extend(MixpanelGroup.prototype, apiActions); /** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate */ -function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} +MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { + this._mixpanel = mixpanel_instance; + this._group_key = group_key; + this._group_id = group_id; + this.consentGate = consentGate; +}; /** - * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function clearOptInOut(token, options) { - options = options || {}; - _getStorage(options).remove( - _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain - ); -} - -/** Private **/ - -/** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage - */ -function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; -} - -/** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type + * Set properties on a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, dates, or lists + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; -} +MixpanelGroup.prototype.set = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + return this._send_request(data, callback); +}; /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type + * Set properties on a group, only if they do not yet exist. + * This will not overwrite previous group property values, unlike + * group.set(). + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set_once({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, lists or dates + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); -} +MixpanelGroup.prototype.set_once = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); + return this._send_request(data, callback); +}; /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read + * Unset properties on a group permanently. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').unset('Founded'); + * ``` + * + * @param {String} prop The name of the property. + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; +MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; -} + var data = this.unset_action(prop); + return this._send_request(data, callback); +}; /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true + * Merge a given list with a list-valued group property, excluding duplicate values. + * + * @example + * ```js + * // merge a value to a list, creating it if needed + * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Array} values Values to merge with the given property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; +MixpanelGroup.prototype.union = function(list_name, values, callback) { + if (_.isObject(list_name)) { + callback = values; } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; - - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); } - }); - - return hasDntOn; -} + return; + } + var data = this.union_action(list_name, values); + return this._send_request(data, callback); +}; /** - * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type - * @param {boolean} optValue - whether to opt the user in or out for the given opt type - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + * Permanently delete a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').delete(); + * ``` + * + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _optInOut(optValue, token, options) { - if (!_.isString(token) || !token.length) { - console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); +MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } return; } - - options = options || {}; - - _getStorage(options).set( - _getStorageKey(token, options), - optValue ? 1 : 0, - _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, - !!options.crossSubdomainCookie, - !!options.secureCookie, - !!options.crossSiteCookie, - options.cookieDomain - ); - - if (options.track && optValue) { // only track event if opting in (optValue=true) - options.track(options.trackEventName || '$opt_in', options.trackProperties, { - 'send_immediately': true - }); - } -} + // bracket notation above prevents a minification error related to reserved words + var data = this.delete_action(); + return this._send_request(data, callback); +}; /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out + * Remove a property from a group. The value will be ignored if doesn't exist. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Object} value Value to remove from the given group property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; - - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console.error('Unexpected error when checking tracking opt-out status: ' + err); - } - - if (!optedOut) { - return method.apply(this, arguments); - } - - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { +MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { callback(0); } - return; - }; -} + } + var data = this.remove_action(list_name, value); + return this._send_request(data, callback); +}; -/* eslint camelcase: "off" */ +MixpanelGroup.prototype._send_request = function(data, callback) { + data['$group_key'] = this._group_key; + data['$group_id'] = this._group_id; + data['$token'] = this._get_config('token'); + var date_encoded_data = _.encodeDates(data); + return this._mixpanel._track_or_batch({ + type: 'groups', + data: date_encoded_data, + endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], + batcher: this._mixpanel.request_batchers.groups + }, callback); +}; -/** @const */ var SET_ACTION = '$set'; -/** @const */ var SET_ONCE_ACTION = '$set_once'; -/** @const */ var UNSET_ACTION = '$unset'; -/** @const */ var ADD_ACTION = '$add'; -/** @const */ var APPEND_ACTION = '$append'; -/** @const */ var UNION_ACTION = '$union'; -/** @const */ var REMOVE_ACTION = '$remove'; -/** @const */ var DELETE_ACTION = '$delete'; - -// Common internal methods for mixpanel.people and mixpanel.group APIs. -// These methods shouldn't involve network I/O. -var apiActions = { - set_action: function(prop, to) { - var data = {}; - var $set = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set[k] = v; - } - }, this); - } else { - $set[prop] = to; - } - - data[SET_ACTION] = $set; - return data; - }, - - unset_action: function(prop) { - var data = {}; - var $unset = []; - if (!_.isArray(prop)) { - prop = [prop]; - } - - _.each(prop, function(k) { - if (!this._is_reserved_property(k)) { - $unset.push(k); - } - }, this); - - data[UNSET_ACTION] = $unset; - return data; - }, - - set_once_action: function(prop, to) { - var data = {}; - var $set_once = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set_once[k] = v; - } - }, this); - } else { - $set_once[prop] = to; - } - data[SET_ONCE_ACTION] = $set_once; - return data; - }, - - union_action: function(list_name, values) { - var data = {}; - var $union = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $union[k] = _.isArray(v) ? v : [v]; - } - }, this); - } else { - $union[list_name] = _.isArray(values) ? values : [values]; - } - data[UNION_ACTION] = $union; - return data; - }, - - append_action: function(list_name, value) { - var data = {}; - var $append = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $append[k] = v; - } - }, this); - } else { - $append[list_name] = value; - } - data[APPEND_ACTION] = $append; - return data; - }, +MixpanelGroup.prototype._is_reserved_property = function(prop) { + return prop === '$group_key' || prop === '$group_id'; +}; - remove_action: function(list_name, value) { - var data = {}; - var $remove = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $remove[k] = v; - } - }, this); - } else { - $remove[list_name] = value; - } - data[REMOVE_ACTION] = $remove; - return data; - }, +MixpanelGroup.prototype._get_config = function(conf) { + return this._mixpanel.get_config(conf); +}; - delete_action: function() { - var data = {}; - data[DELETE_ACTION] = ''; - return data; - } +MixpanelGroup.prototype.toString = function() { + return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; }; +// MixpanelGroup Exports +// (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would +// make TypeScript type them as `any`, which breaks the generated API docs) +var MixpanelGroupProto = MixpanelGroup.prototype; +MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; +MixpanelGroupProto['set'] = MixpanelGroupProto.set; +MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; +MixpanelGroupProto['union'] = MixpanelGroupProto.union; +MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; +MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; + /* eslint camelcase: "off" */ /** - * Mixpanel Group Object + * Mixpanel People Object * @class */ -function MixpanelGroup() {} +function MixpanelPeople() {} -_.extend(MixpanelGroup.prototype, apiActions); +_.extend(MixpanelPeople.prototype, apiActions); -MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { +/** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ +MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; - this._group_key = group_key; - this._group_id = group_id; + this.consentGate = consentGate; }; -MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** - * Set properties on a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, dates, or lists - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, to, callback) { - var data = this.set_action(prop, to); +* Set properties on a user record. +* +* @example +* ```js +* mixpanel.people.set('gender', 'm'); +* +* // or set multiple properties at once +* mixpanel.people.set({ +* 'Company': 'Acme', +* 'Plan': 'Premium', +* 'Upgrade date': new Date() +* }); +* // properties can be strings, integers, dates, or lists +* ``` +* +* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. +* @param {*} [to] A value to set on the given property name +* @param {Function} [callback] If provided, the callback will be called after tracking the event. +*/ +MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + // make sure that the referrer info has been updated and saved + if (this._get_config('save_referrer')) { + this._mixpanel['persistence'].update_referrer_info(document.referrer); + } + + // update $set object with default people properties + data[SET_ACTION] = _.extend( + {}, + _.info.people_properties(), + data[SET_ACTION] + ); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** - * Set properties on a group, only if they do not yet exist. - * This will not overwrite previous group property values, unlike - * group.set(). - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set_once({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, lists or dates - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); +* Set properties on a user record, only if they do not yet exist. +* This will not overwrite previous people property values, unlike +* people.set(). +* +* @example +* ```js +* mixpanel.people.set_once('First Login Date', new Date()); +* +* // or set multiple properties at once +* mixpanel.people.set_once({ +* 'First Login Date': new Date(), +* 'Starting Plan': 'Premium' +* }); +* +* // properties can be strings, integers or dates +* ``` +* +* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. +* @param {*} [to] A value to set on the given property name +* @param {Function} [callback] If provided, the callback will be called after tracking the event. +*/ +MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( -/** - * Unset properties on a group permanently. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').unset('Founded'); - * ``` - * - * @param {String} prop The name of the property. - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, callback) { - var data = this.unset_action(prop); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( -/** - * Merge a given list with a list-valued group property, excluding duplicate values. - * - * @example - * ```js - * // merge a value to a list, creating it if needed - * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Array} values Values to merge with the given property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(list_name, values, callback) { - if (_.isObject(list_name)) { - callback = values; - } - var data = this.union_action(list_name, values); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( -/** - * Permanently delete a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').delete(); - * ``` - * - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(callback) { - // bracket notation above prevents a minification error related to reserved words - var data = this.delete_action(); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( -/** - * Remove a property from a group. The value will be ignored if doesn't exist. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Object} value Value to remove from the given group property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(list_name, value, callback) { - var data = this.remove_action(list_name, value); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype._send_request = function(data, callback) { - data['$group_key'] = this._group_key; - data['$group_id'] = this._group_id; - data['$token'] = this._get_config('token'); - - var date_encoded_data = _.encodeDates(data); - return this._mixpanel._track_or_batch({ - type: 'groups', - data: date_encoded_data, - endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], - batcher: this._mixpanel.request_batchers.groups - }, callback); -}; - -MixpanelGroup.prototype._is_reserved_property = function(prop) { - return prop === '$group_key' || prop === '$group_id'; -}; - -MixpanelGroup.prototype._get_config = function(conf) { - return this._mixpanel.get_config(conf); -}; - -MixpanelGroup.prototype.toString = function() { - return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; -}; - -// MixpanelGroup Exports -// (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would -// make TypeScript type them as `any`, which breaks the generated API docs) -var MixpanelGroupProto = MixpanelGroup.prototype; -MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; -MixpanelGroupProto['set'] = MixpanelGroupProto.set; -MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; -MixpanelGroupProto['union'] = MixpanelGroupProto.union; -MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; -MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; - -/* eslint camelcase: "off" */ - -/** - * Mixpanel People Object - * @class - */ -function MixpanelPeople() {} - -_.extend(MixpanelPeople.prototype, apiActions); - -MixpanelPeople.prototype._init = function(mixpanel_instance) { - this._mixpanel = mixpanel_instance; -}; - -MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( -/** -* Set properties on a user record. -* -* @example -* ```js -* mixpanel.people.set('gender', 'm'); -* -* // or set multiple properties at once -* mixpanel.people.set({ -* 'Company': 'Acme', -* 'Plan': 'Premium', -* 'Upgrade date': new Date() -* }); -* // properties can be strings, integers, dates, or lists -* ``` -* -* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. -* @param {*} [to] A value to set on the given property name -* @param {Function} [callback] If provided, the callback will be called after tracking the event. -*/ -function(prop, to, callback) { - var data = this.set_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - // make sure that the referrer info has been updated and saved - if (this._get_config('save_referrer')) { - this._mixpanel['persistence'].update_referrer_info(document.referrer); - } - - // update $set object with default people properties - data[SET_ACTION] = _.extend( - {}, - _.info.people_properties(), - data[SET_ACTION] - ); - return this._send_request(data, callback); -}); - -MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( -/** -* Set properties on a user record, only if they do not yet exist. -* This will not overwrite previous people property values, unlike -* people.set(). -* -* @example -* ```js -* mixpanel.people.set_once('First Login Date', new Date()); -* -* // or set multiple properties at once -* mixpanel.people.set_once({ -* 'First Login Date': new Date(), -* 'Starting Plan': 'Premium' -* }); -* -* // properties can be strings, integers or dates -* ``` -* -* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. -* @param {*} [to] A value to set on the given property name -* @param {Function} [callback] If provided, the callback will be called after tracking the event. -*/ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - return this._send_request(data, callback); -}); - -MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -7109,12 +6911,17 @@ MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, callback) { +MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -7141,7 +6948,16 @@ MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, by, callback) { +MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -7155,7 +6971,6 @@ function(prop, by, callback) { } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -7167,9 +6982,8 @@ function(prop, by, callback) { data[ADD_ACTION] = $add; return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -7190,15 +7004,20 @@ MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -7211,15 +7030,20 @@ MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -7247,15 +7071,20 @@ MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, values, callback) { +MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -7277,9 +7106,15 @@ MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ -function(amount, properties, callback) { // eslint-disable-line no-unused-vars +MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); -}); +}; /** * Permanently clear all revenue report transactions from the @@ -7493,428 +7328,1390 @@ MixpanelPeople.prototype['toString'] = MixpanelPeople.prototype.toString; /* eslint camelcase: "off" */ -/* - * Constants +/* + * Constants + */ +/** @const */ var SET_QUEUE_KEY = '__mps'; +/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; +/** @const */ var UNSET_QUEUE_KEY = '__mpus'; +/** @const */ var ADD_QUEUE_KEY = '__mpa'; +/** @const */ var APPEND_QUEUE_KEY = '__mpap'; +/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; +/** @const */ var UNION_QUEUE_KEY = '__mpu'; +// This key is deprecated, but we want to check for it to see whether aliasing is allowed. +/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; +/** @const */ var ALIAS_ID_KEY = '__alias'; +/** @const */ var EVENT_TIMERS_KEY = '__timers'; +/** @const */ var RESERVED_PROPERTIES = [ + SET_QUEUE_KEY, + SET_ONCE_QUEUE_KEY, + UNSET_QUEUE_KEY, + ADD_QUEUE_KEY, + APPEND_QUEUE_KEY, + REMOVE_QUEUE_KEY, + UNION_QUEUE_KEY, + PEOPLE_DISTINCT_ID_KEY, + ALIAS_ID_KEY, + EVENT_TIMERS_KEY +]; + +// the store while persistence is off: nothing is read or written +/** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} +}; + +/** + * Mixpanel Persistence Object + * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() + */ +var MixpanelPersistence = function(config, options) { + this['props'] = {}; + this.campaign_params_saved = false; + + if (config['persistence_name']) { + this.name = 'mp_' + config['persistence_name']; + } else { + this.name = 'mp_' + config['token'] + '_mixpanel'; + } + + var storage_type = config['persistence']; + if (storage_type !== 'cookie' && storage_type !== 'localStorage') { + console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); + config['persistence'] = 'cookie'; + } + this.storage_type = config['persistence']; + + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } +}; + +MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; + } else { + this.backend = _.cookie; + } + this.storage = this.backend; +}; + +MixpanelPersistence.prototype.properties = function() { + var p = {}; + + this.load(); + + // Filter out reserved properties + _.each(this['props'], function(v, k) { + if (!_.include(RESERVED_PROPERTIES, k)) { + p[k] = v; + } + }); + return p; +}; + +MixpanelPersistence.prototype.load = function() { + var entry = this.storage.parse(this.name); + + if (entry) { + this['props'] = _.extend({}, entry); + } +}; + +MixpanelPersistence.prototype.upgrade = function() { + var old_cookie, + old_localstorage; + + // if transferring from cookie to localStorage or vice-versa, copy existing + // super properties over to new storage mode + if (this.backend === _.localStorage) { + old_cookie = _.cookie.parse(this.name); + + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + + if (old_cookie) { + this.register_once(old_cookie); + } + } else if (this.backend === _.cookie) { + old_localstorage = _.localStorage.parse(this.name); + + _.localStorage.remove(this.name); + + if (old_localstorage) { + this.register_once(old_localstorage); + } + } +}; + +MixpanelPersistence.prototype.save = function() { + this.storage.set( + this.name, + JSONStringify(this['props']), + this.expire_days, + this.cross_subdomain, + this.secure, + this.cross_site, + this.cookie_domain + ); +}; + +MixpanelPersistence.prototype.load_prop = function(key) { + this.load(); + return this['props'][key]; +}; + +MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } + // remove both domain and subdomain cookies + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); +}; + +// removes the storage entry and deletes all loaded data +// forced name for tests +MixpanelPersistence.prototype.clear = function() { + this.remove(); + this['props'] = {}; +}; + +/** +* @param {Object} props +* @param {*=} default_value +* @param {number=} days +*/ +MixpanelPersistence.prototype.register_once = function(props, default_value, days) { + if (_.isObject(props)) { + if (typeof(default_value) === 'undefined') { default_value = 'None'; } + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + + _.each(props, function(val, prop) { + if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { + this['props'][prop] = val; + } + }, this); + + this.save(); + + return true; + } + return false; +}; + +/** +* @param {Object} props +* @param {number=} days +*/ +MixpanelPersistence.prototype.register = function(props, days) { + if (_.isObject(props)) { + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + _.extend(this['props'], props); + this.save(); + + return true; + } + return false; +}; + +MixpanelPersistence.prototype.unregister = function(prop) { + this.load(); + if (prop in this['props']) { + delete this['props'][prop]; + this.save(); + } +}; + +MixpanelPersistence.prototype.update_search_keyword = function(referrer) { + this.register(_.info.searchInfo(referrer)); +}; + +// EXPORTED METHOD, we test this directly. +MixpanelPersistence.prototype.update_referrer_info = function(referrer) { + // If referrer doesn't exist, we want to note the fact that it was type-in traffic. + this.register_once({ + '$initial_referrer': referrer || '$direct', + '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' + }, ''); +}; + +MixpanelPersistence.prototype.get_referrer_info = function() { + return _.strip_empty_properties({ + '$initial_referrer': this['props']['$initial_referrer'], + '$initial_referring_domain': this['props']['$initial_referring_domain'] + }); +}; + +MixpanelPersistence.prototype.update_config = function(config) { + this.default_expiry = this.expire_days = config['cookie_expiration']; + this.set_disabled(config['disable_persistence']); + this.set_cookie_domain(config['cookie_domain']); + this.set_cross_site(config['cross_site_cookie']); + this.set_cross_subdomain(config['cross_subdomain_cookie']); + this.set_secure(config['secure_cookie']); +}; + +/** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ +MixpanelPersistence.prototype.set_disabled = function(disabled) { + this.disabled = disabled; + this._update_storage(); +}; + +/** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ +MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); +}; + +/** + * Read and write storage again, saving the props in memory to it. + */ +MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); +}; + +/** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ +MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); +}; + +MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; + this.remove(); + } else { + this.storage = this.backend; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { + if (cookie_domain !== this.cookie_domain) { + this.remove(); + this.cookie_domain = cookie_domain; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_site = function(cross_site) { + if (cross_site !== this.cross_site) { + this.cross_site = cross_site; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { + if (cross_subdomain !== this.cross_subdomain) { + this.cross_subdomain = cross_subdomain; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.get_cross_subdomain = function() { + return this.cross_subdomain; +}; + +MixpanelPersistence.prototype.set_secure = function(secure) { + if (secure !== this.secure) { + this.secure = secure ? true : false; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { + var q_key = this._get_queue_key(queue), + q_data = data[queue], + set_q = this._get_or_create_queue(SET_ACTION), + set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), + unset_q = this._get_or_create_queue(UNSET_ACTION), + add_q = this._get_or_create_queue(ADD_ACTION), + union_q = this._get_or_create_queue(UNION_ACTION), + remove_q = this._get_or_create_queue(REMOVE_ACTION, []), + append_q = this._get_or_create_queue(APPEND_ACTION, []); + + if (q_key === SET_QUEUE_KEY) { + // Update the set queue - we can override any existing values + _.extend(set_q, q_data); + // if there was a pending increment, override it + // with the set. + this._pop_from_people_queue(ADD_ACTION, q_data); + // if there was a pending union, override it + // with the set. + this._pop_from_people_queue(UNION_ACTION, q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === SET_ONCE_QUEUE_KEY) { + // only queue the data if there is not already a set_once call for it. + _.each(q_data, function(v, k) { + if (!(k in set_once_q)) { + set_once_q[k] = v; + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNSET_QUEUE_KEY) { + _.each(q_data, function(prop) { + + // undo previously-queued actions on this key + _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { + if (prop in enqueued_obj) { + delete enqueued_obj[prop]; + } + }); + _.each(append_q, function(append_obj) { + if (prop in append_obj) { + delete append_obj[prop]; + } + }); + + unset_q[prop] = true; + + }); + } else if (q_key === ADD_QUEUE_KEY) { + _.each(q_data, function(v, k) { + // If it exists in the set queue, increment + // the value + if (k in set_q) { + set_q[k] += v; + } else { + // If it doesn't exist, update the add + // queue + if (!(k in add_q)) { + add_q[k] = 0; + } + add_q[k] += v; + } + }, this); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNION_QUEUE_KEY) { + _.each(q_data, function(v, k) { + if (_.isArray(v)) { + if (!(k in union_q)) { + union_q[k] = []; + } + // Prevent duplicate values + _.each(v, function(item) { + if (!_.include(union_q[k], item)) { + union_q[k].push(item); + } + }); + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === REMOVE_QUEUE_KEY) { + remove_q.push(q_data); + this._pop_from_people_queue(APPEND_ACTION, q_data); + } else if (q_key === APPEND_QUEUE_KEY) { + append_q.push(q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } + + console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); + console.log(data); + + this.save(); +}; + +MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { + var q = this['props'][this._get_queue_key(queue)]; + if (!_.isUndefined(q)) { + _.each(data, function(v, k) { + if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { + // list actions: only remove if both k+v match + // e.g. remove should not override append in a case like + // append({foo: 'bar'}); remove({foo: 'qux'}) + _.each(q, function(queued_action) { + if (queued_action[k] === v) { + delete queued_action[k]; + } + }); + } else { + delete q[k]; + } + }, this); + } +}; + +MixpanelPersistence.prototype.load_queue = function(queue) { + return this.load_prop(this._get_queue_key(queue)); +}; + +MixpanelPersistence.prototype._get_queue_key = function(queue) { + if (queue === SET_ACTION) { + return SET_QUEUE_KEY; + } else if (queue === SET_ONCE_ACTION) { + return SET_ONCE_QUEUE_KEY; + } else if (queue === UNSET_ACTION) { + return UNSET_QUEUE_KEY; + } else if (queue === ADD_ACTION) { + return ADD_QUEUE_KEY; + } else if (queue === APPEND_ACTION) { + return APPEND_QUEUE_KEY; + } else if (queue === REMOVE_ACTION) { + return REMOVE_QUEUE_KEY; + } else if (queue === UNION_ACTION) { + return UNION_QUEUE_KEY; + } else { + console.error('Invalid queue:', queue); + } +}; + +MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { + var key = this._get_queue_key(queue); + default_val = _.isUndefined(default_val) ? {} : default_val; + return this['props'][key] || (this['props'][key] = default_val); +}; + +MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + timers[event_name] = timestamp; + this['props'][EVENT_TIMERS_KEY] = timers; + this.save(); +}; + +MixpanelPersistence.prototype.remove_event_timer = function(event_name) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + var timestamp = timers[event_name]; + if (!_.isUndefined(timestamp)) { + delete this['props'][EVENT_TIMERS_KEY][event_name]; + this.save(); + } + return timestamp; +}; + +/** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + + +/** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; +/** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + +/** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + +/** @const */ var DECISION_NONE = 'none'; +/** @const */ var DECISION_OPTED_IN = 'opted_in'; +/** @const */ var DECISION_OPTED_OUT = 'opted_out'; +// Do Not Track counts as an objection +/** @const */ var DECISION_OBJECTED = 'objected'; + +/** @const */ var STATE_FULL = 'full'; +/** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; +/** @const */ var STATE_BLOCKED = 'blocked'; + +/** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} +}; + +/** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ +/** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} +}; + +/** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ +function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; +} + +/** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ +function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; +} + +/** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + +/** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ +function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; +} + +/** + * GDPR utils + * + * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection + * and privacy for all individuals within the European Union. It addresses the export of personal + * data outside the EU. The GDPR aims primarily to give control back to citizens and residents + * over their personal data and to simplify the regulatory environment for international business + * by unifying the regulation within the EU. + * + * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. + * These functions are used internally by the SDK and are not intended to be publicly exposed. + */ + + +/** + * A function used to track a Mixpanel event (e.g. MixpanelLib.track) + * @callback trackFunction + * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. + * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. + * @param {Function} [callback] If provided, the callback function will be called after tracking the event. + */ + +/** Public **/ + +var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; + +/** + * Opt the user in to data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function optIn(token, options) { + _optInOut(true, token, options); +} + +/** + * Opt the user out of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not + */ +function optOut(token, options) { + _optInOut(false, token, options); +} + +/** + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ +function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; +} + +/** + * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function clearOptInOut(token, options) { + options = options || {}; + _getStorage(options).remove( + _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain + ); +} + +/** Private **/ + +/** + * Get storage util + * @param {Object} [options] + * @param {string} [options.persistenceType] + * @returns {object} either _.cookie or _.localstorage + */ +function _getStorage(options) { + options = options || {}; + return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; +} + +/** + * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the name of the cookie for the given opt type + */ +function _getStorageKey(token, options) { + options = options || {}; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; +} + +/** + * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the value of the cookie for the given opt type + */ +function readOptInOutFlag(token, options) { + return _getStorage(options).get(_getStorageKey(token, options)); +} + +/** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ +function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); +} + +/** + * Check whether the user has set the DNT/doNotTrack setting to true in their browser + * @param {Object} [options] + * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests + * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false + * @returns {boolean} whether the DNT setting is true + */ +function hasDoNotTrackFlagOn(options) { + if (options && options.ignoreDnt) { + return false; + } + var win$1 = (options && options.window) || win; + var nav = win$1['navigator'] || {}; + var hasDntOn = false; + + _.each([ + nav['doNotTrack'], // standard + nav['msDoNotTrack'], + win$1['doNotTrack'] + ], function(dntValue) { + if (_.includes([true, 1, '1', 'yes'], dntValue)) { + hasDntOn = true; + } + }); + + return hasDntOn; +} + +/** + * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type + * @param {boolean} optValue - whether to opt the user in or out for the given opt type + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function _optInOut(optValue, token, options) { + if (!_.isString(token) || !token.length) { + console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + return; + } + + options = options || {}; + + _getStorage(options).set( + _getStorageKey(token, options), + optValue ? 1 : 0, + _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, + !!options.crossSubdomainCookie, + !!options.secureCookie, + !!options.crossSiteCookie, + options.cookieDomain + ); + + if (options.track && optValue) { // only track event if opting in (optValue=true) + options.track(options.trackEventName || '$opt_in', options.trackProperties, { + 'send_immediately': true + }); + } +} + +/** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. */ -/** @const */ var SET_QUEUE_KEY = '__mps'; -/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; -/** @const */ var UNSET_QUEUE_KEY = '__mpus'; -/** @const */ var ADD_QUEUE_KEY = '__mpa'; -/** @const */ var APPEND_QUEUE_KEY = '__mpap'; -/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; -/** @const */ var UNION_QUEUE_KEY = '__mpu'; -// This key is deprecated, but we want to check for it to see whether aliasing is allowed. -/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; -/** @const */ var ALIAS_ID_KEY = '__alias'; -/** @const */ var EVENT_TIMERS_KEY = '__timers'; -/** @const */ var RESERVED_PROPERTIES = [ - SET_QUEUE_KEY, - SET_ONCE_QUEUE_KEY, - UNSET_QUEUE_KEY, - ADD_QUEUE_KEY, - APPEND_QUEUE_KEY, - REMOVE_QUEUE_KEY, - UNION_QUEUE_KEY, - PEOPLE_DISTINCT_ID_KEY, - ALIAS_ID_KEY, - EVENT_TIMERS_KEY -]; + /** - * Mixpanel Persistence Object * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges */ -var MixpanelPersistence = function(config) { - this['props'] = {}; - this.campaign_params_saved = false; - - if (config['persistence_name']) { - this.name = 'mp_' + config['persistence_name']; - } else { - this.name = 'mp_' + config['token'] + '_mixpanel'; - } +var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; +}; - var storage_type = config['persistence']; - if (storage_type !== 'cookie' && storage_type !== 'localStorage') { - console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; +/** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ +OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; - } else { - this.storage = _.cookie; + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); }; -MixpanelPersistence.prototype.properties = function() { - var p = {}; - - this.load(); - - // Filter out reserved properties - _.each(this['props'], function(v, k) { - if (!_.include(RESERVED_PROPERTIES, k)) { - p[k] = v; - } - }); - return p; +// opt_out_tracking_by_default applies only without consent_mode, which replaces it +OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); }; -MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } +/** + * @returns {string} + */ +OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; +}; - var entry = this.storage.parse(this.name); +/** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; +}; - if (entry) { - this['props'] = _.extend({}, entry); - } +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -MixpanelPersistence.prototype.upgrade = function() { - var old_cookie, - old_localstorage; +/** + * @param {Object} [options] opt_in_tracking() options + */ +OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); +}; - // if transferring from cookie to localStorage or vice-versa, copy existing - // super properties over to new storage mode - if (this.storage === _.localStorage) { - old_cookie = _.cookie.parse(this.name); +/** + * @param {Object} [options] opt_out_tracking() options + */ +OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); - _.cookie.remove(this.name); - _.cookie.remove(this.name, true); + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } - if (old_cookie) { - this.register_once(old_cookie); - } - } else if (this.storage === _.cookie) { - old_localstorage = _.localStorage.parse(this.name); + this._writeFlag(optOut, options); + this._updatePersistence(options); +}; - _.localStorage.remove(this.name); +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); +}; - if (old_localstorage) { - this.register_once(old_localstorage); - } +/** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ +OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); } }; -MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - - this.storage.set( - this.name, - JSONStringify(this['props']), - this.expire_days, - this.cross_subdomain, - this.secure, - this.cross_site, - this.cookie_domain - ); -}; +/** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ +OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); -MixpanelPersistence.prototype.load_prop = function(key) { - this.load(); - return this['props'][key]; -}; + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } -MixpanelPersistence.prototype.remove = function() { - // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); }; -// removes the storage entry and deletes all loaded data -// forced name for tests -MixpanelPersistence.prototype.clear = function() { - this.remove(); - this['props'] = {}; +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ +OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); }; /** -* @param {Object} props -* @param {*=} default_value -* @param {number=} days -*/ -MixpanelPersistence.prototype.register_once = function(props, default_value, days) { - if (_.isObject(props)) { - if (typeof(default_value) === 'undefined') { default_value = 'None'; } - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ +OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); - this.load(); + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } - _.each(props, function(val, prop) { - if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { - this['props'][prop] = val; - } - }, this); + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); +}; - this.save(); +/** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ - return true; - } - return false; -}; /** -* @param {Object} props -* @param {number=} days -*/ -MixpanelPersistence.prototype.register = function(props, days) { - if (_.isObject(props)) { - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ +var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; +}; - this.load(); - _.extend(this['props'], props); - this.save(); +// delete what an earlier page stored without consent +ConsentDecisions.prototype.init = function() { + this._reconcile(); +}; - return true; +/** + * @returns {string} + */ +ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; } - return false; + return this.appliedState; }; -MixpanelPersistence.prototype.unregister = function(prop) { - this.load(); - if (prop in this['props']) { - delete this['props'][prop]; - this.save(); - } +/** + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; }; -MixpanelPersistence.prototype.update_search_keyword = function(referrer) { - this.register(_.info.searchInfo(referrer)); +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -// EXPORTED METHOD, we test this directly. -MixpanelPersistence.prototype.update_referrer_info = function(referrer) { - // If referrer doesn't exist, we want to note the fact that it was type-in traffic. - this.register_once({ - '$initial_referrer': referrer || '$direct', - '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' - }, ''); +/** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ +ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); }; -MixpanelPersistence.prototype.get_referrer_info = function() { - return _.strip_empty_properties({ - '$initial_referrer': this['props']['$initial_referrer'], - '$initial_referring_domain': this['props']['$initial_referring_domain'] - }); +ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); }; -MixpanelPersistence.prototype.update_config = function(config) { - this.default_expiry = this.expire_days = config['cookie_expiration']; - this.set_disabled(config['disable_persistence']); - this.set_cookie_domain(config['cookie_domain']); - this.set_cross_site(config['cross_site_cookie']); - this.set_cross_subdomain(config['cross_subdomain_cookie']); - this.set_secure(config['secure_cookie']); +ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); }; -MixpanelPersistence.prototype.set_disabled = function(disabled) { - this.disabled = disabled; - if (this.disabled) { - this.remove(); - } else { - this.save(); +/** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ +ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } +}; + +ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; }; -MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { - if (cookie_domain !== this.cookie_domain) { - this.remove(); - this.cookie_domain = cookie_domain; - this.save(); +/** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ +ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); } }; -MixpanelPersistence.prototype.set_cross_site = function(cross_site) { - if (cross_site !== this.cross_site) { - this.cross_site = cross_site; - this.remove(); - this.save(); +/** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ +ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; } + this._writeDecisionKey(this._decisionKey(), flag); }; -MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { - if (cross_subdomain !== this.cross_subdomain) { - this.cross_subdomain = cross_subdomain; - this.remove(); - this.save(); +/** + * @param {string} key + * @param {string|null} value null to remove it + */ +ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); } }; -MixpanelPersistence.prototype.get_cross_subdomain = function() { - return this.cross_subdomain; +// the store the persistence uses, chosen without the localStorage support probe, which writes a key +ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); }; -MixpanelPersistence.prototype.set_secure = function(secure) { - if (secure !== this.secure) { - this.secure = secure ? true : false; - this.remove(); - this.save(); - } +ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; }; -MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { - var q_key = this._get_queue_key(queue), - q_data = data[queue], - set_q = this._get_or_create_queue(SET_ACTION), - set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), - unset_q = this._get_or_create_queue(UNSET_ACTION), - add_q = this._get_or_create_queue(ADD_ACTION), - union_q = this._get_or_create_queue(UNION_ACTION), - remove_q = this._get_or_create_queue(REMOVE_ACTION, []), - append_q = this._get_or_create_queue(APPEND_ACTION, []); +ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); +}; - if (q_key === SET_QUEUE_KEY) { - // Update the set queue - we can override any existing values - _.extend(set_q, q_data); - // if there was a pending increment, override it - // with the set. - this._pop_from_people_queue(ADD_ACTION, q_data); - // if there was a pending union, override it - // with the set. - this._pop_from_people_queue(UNION_ACTION, q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === SET_ONCE_QUEUE_KEY) { - // only queue the data if there is not already a set_once call for it. - _.each(q_data, function(v, k) { - if (!(k in set_once_q)) { - set_once_q[k] = v; - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNSET_QUEUE_KEY) { - _.each(q_data, function(prop) { +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ +ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); +}; - // undo previously-queued actions on this key - _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { - if (prop in enqueued_obj) { - delete enqueued_obj[prop]; - } - }); - _.each(append_q, function(append_obj) { - if (prop in append_obj) { - delete append_obj[prop]; - } - }); +/** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ +ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); +}; - unset_q[prop] = true; +/** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + +/** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ +function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; }); - } else if (q_key === ADD_QUEUE_KEY) { - _.each(q_data, function(v, k) { - // If it exists in the set queue, increment - // the value - if (k in set_q) { - set_q[k] += v; - } else { - // If it doesn't exist, update the add - // queue - if (!(k in add_q)) { - add_q[k] = 0; - } - add_q[k] += v; - } - }, this); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNION_QUEUE_KEY) { - _.each(q_data, function(v, k) { - if (_.isArray(v)) { - if (!(k in union_q)) { - union_q[k] = []; - } - // Prevent duplicate values - _.each(v, function(item) { - if (!_.include(union_q[k], item)) { - union_q[k].push(item); - } - }); - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === REMOVE_QUEUE_KEY) { - remove_q.push(q_data); - this._pop_from_people_queue(APPEND_ACTION, q_data); - } else if (q_key === APPEND_QUEUE_KEY) { - append_q.push(q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); + if (same) { + answers[capability] = answer; + } + }); + return answers; +} + +/** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ +var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; +}; + +/** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ +ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; } + return CONSENT_STATES[this.state()][capability]; +}; - console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); - console.log(data); +/** + * @returns {string} + */ +ConsentManager.prototype.state = function() { + return this.decisions.state(); +}; - this.save(); +/** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ +ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; }; -MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { - var q = this['props'][this._get_queue_key(queue)]; - if (!_.isUndefined(q)) { - _.each(data, function(v, k) { - if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { - // list actions: only remove if both k+v match - // e.g. remove should not override append in a case like - // append({foo: 'bar'}); remove({foo: 'qux'}) - _.each(q, function(queued_action) { - if (queued_action[k] === v) { - delete queued_action[k]; - } - }); - } else { - delete q[k]; - } - }, this); - } +/** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ +ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; }; -MixpanelPersistence.prototype.load_queue = function(queue) { - return this.load_prop(this._get_queue_key(queue)); +/** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ +ConsentManager.prototype.init = function() { + this.decisions.init(); }; -MixpanelPersistence.prototype._get_queue_key = function(queue) { - if (queue === SET_ACTION) { - return SET_QUEUE_KEY; - } else if (queue === SET_ONCE_ACTION) { - return SET_ONCE_QUEUE_KEY; - } else if (queue === UNSET_ACTION) { - return UNSET_QUEUE_KEY; - } else if (queue === ADD_ACTION) { - return ADD_QUEUE_KEY; - } else if (queue === APPEND_ACTION) { - return APPEND_QUEUE_KEY; - } else if (queue === REMOVE_ACTION) { - return REMOVE_QUEUE_KEY; - } else if (queue === UNION_ACTION) { - return UNION_QUEUE_KEY; - } else { - console.error('Invalid queue:', queue); - } +/** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); }; -MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { - var key = this._get_queue_key(queue); - default_val = _.isUndefined(default_val) ? {} : default_val; - return this['props'][key] || (this['props'][key] = default_val); +/** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); }; -MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - timers[event_name] = timestamp; - this['props'][EVENT_TIMERS_KEY] = timers; - this.save(); +/** + * @param {Object} [options] opt_in_tracking() options + */ +ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); }; -MixpanelPersistence.prototype.remove_event_timer = function(event_name) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - var timestamp = timers[event_name]; - if (!_.isUndefined(timestamp)) { - delete this['props'][EVENT_TIMERS_KEY][event_name]; - this.save(); - } - return timestamp; +/** + * @param {Object} [options] opt_out_tracking() options + */ +ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); +}; + +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); }; /* eslint camelcase: "off" */ @@ -8035,6 +8832,7 @@ var DEFAULT_CONFIG = { 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -8101,26 +8899,9 @@ var create_mplib = function(token, config, name) { instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -8215,6 +8996,19 @@ MixpanelLib.prototype._init = function(token, config, name) { 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -8222,6 +9016,7 @@ MixpanelLib.prototype._init = function(token, config, name) { getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -8239,64 +9034,16 @@ MixpanelLib.prototype._init = function(token, config, name) { }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && win.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - win.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - win.addEventListener('visibilitychange', function() { - if (document$1['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - var uuid = _.UUID(); - if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -8306,12 +9053,52 @@ MixpanelLib.prototype._init = function(token, config, name) { setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); +}; + +MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } +}; + +// the services that store or send on their own; at init, and again on an opt-in under 'require_consent' +MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -8323,21 +9110,174 @@ MixpanelLib.prototype._init = function(token, config, name) { } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } +}; - this.autocapture = new Autocapture(this); - this.autocapture.init(); +/** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ +MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); +}; + +/** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ +MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); +}; + +/** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ +MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); +}; + +MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); +}; + +MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + consentGate: this._consent, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + + if (sendBeacon && win.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + win.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + win.addEventListener('visibilitychange', function() { + if (document$1['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } + } + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { + this.start_batch_senders(); + } +}; + +MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); }; /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ +MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); +}; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -8368,9 +9308,12 @@ MixpanelLib.prototype.get_tab_id = function () { return this.tab_id || null; }; -MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { +MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); -}); +}; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -8460,7 +9403,7 @@ MixpanelLib.prototype._dom_loaded = function() { this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -8522,6 +9465,15 @@ MixpanelLib.prototype._prepare_callback = function(callback, data) { MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -8679,6 +9631,10 @@ MixpanelLib.prototype._send_request = function(url, data, options, callback) { }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -8816,48 +9772,6 @@ MixpanelLib.prototype.get_batcher_configs = function() { return this._batcher_configs; }; -MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } -}; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -8995,7 +9909,6 @@ MixpanelLib.prototype._track_or_batch = function(options, callback) { return request_enqueued_or_initiated && truncated_data; }; -MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -9020,7 +9933,17 @@ MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(event_name, properties, options, callback) { +MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -9032,10 +9955,6 @@ function(event_name, properties, options, callback) { } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -9126,9 +10045,8 @@ function(event_name, properties, options, callback) { } return ret; -}); +}; -MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -9144,7 +10062,13 @@ MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ -function(group_key, group_ids, callback) { +MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -9152,9 +10076,8 @@ function(group_key, group_ids, callback) { prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); -}); +}; -MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -9167,7 +10090,13 @@ MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -9181,9 +10110,8 @@ function(group_key, group_id, callback) { } } return this['people'].union(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -9196,7 +10124,13 @@ MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -9210,9 +10144,8 @@ function(group_key, group_id, callback) { } } return this['people'].remove(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -9226,7 +10159,7 @@ MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(event_name, properties, groups, callback) { +MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -9234,7 +10167,7 @@ function(event_name, properties, groups, callback) { } }); return this.track(event_name, tracking_props, callback); -}); +}; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -9261,13 +10194,12 @@ MixpanelLib.prototype.get_group = function (group_key, group_id) { var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; -MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -9313,7 +10245,7 @@ MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(properties, options) { +MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -9337,7 +10269,7 @@ function(properties, options) { } return this.track(event_name, event_properties); -}); +}; /** * Track clicks on a set of document elements. Selector must be a @@ -9600,6 +10532,10 @@ MixpanelLib.prototype._register_single = function(prop, value) { * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -9612,6 +10548,12 @@ MixpanelLib.prototype.identify = function( // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -9676,11 +10618,11 @@ MixpanelLib.prototype.reset = function() { this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -9742,6 +10684,11 @@ MixpanelLib.prototype.get_distinct_id = function() { * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -9871,6 +10818,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -9922,6 +10874,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -10050,105 +11007,42 @@ MixpanelLib.prototype._event_is_disabled = function(event_name) { _.include(this.__disabled_events, event_name); }; -// perform some housekeeping around GDPR opt-in/out state -MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } +/** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ +MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ -MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; +MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; -// call a base gdpr function after constructing the appropriate token and options args -MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; +// delete the identified user's profile and charges, which the opt-out about to happen would block +MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); }; /** @@ -10170,6 +11064,10 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -10184,12 +11082,7 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -10207,6 +11100,10 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -10219,19 +11116,7 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -10243,13 +11128,15 @@ MixpanelLib.prototype.opt_out_tracking = function(options) { * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -10261,13 +11148,16 @@ MixpanelLib.prototype.has_opted_in_tracking = function(options) { * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -10286,6 +11176,11 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -10297,12 +11192,7 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -10366,6 +11256,7 @@ MixpanelLibProto['toString'] = MixpanelLibProto.toStri MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; +MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/dist/mixpanel-recorder.js b/dist/mixpanel-recorder.js index 8c6674d6..4cfeca9c 100644 --- a/dist/mixpanel-recorder.js +++ b/dist/mixpanel-recorder.js @@ -27,7 +27,7 @@ } var Config = { - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; var RECORDER_GLOBAL_NAME = '__mp_recorder'; @@ -20763,11 +20763,13 @@ /** * @type {import('./wrapper').StorageWrapper} */ - var IDBStorageWrapper = function (dbName, storeName, versionData) { + var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -20778,25 +20780,47 @@ var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -20896,196 +20920,6 @@ storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME] }; - /** - * GDPR utils - * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. - * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. - */ - - - /** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ - - /** Public **/ - - var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; - - /** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ - function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); - } - return optedOut; - } - - /** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); - } - - /** Private **/ - - /** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage - */ - function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; - } - - /** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type - */ - function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; - } - - /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type - */ - function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); - } - - /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read - */ - function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; - } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; - } - - /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true - */ - function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; - } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; - - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; - } - }); - - return hasDntOn; - } - - /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out - */ - function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; - - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console$1.error('Unexpected error when checking tracking opt-out status: ' + err); - } - - if (!optedOut) { - return method.apply(this, arguments); - } - - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { - callback(0); - } - - return; - }; - } - var logger$5 = console_with_prefix('lock'); /** @@ -21318,6 +21152,7 @@ }); } this.reportError = options.errorReporter || _.bind(logger$4.error, logger$4); + this.consentGate = options.consentGate; this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios @@ -21369,7 +21204,7 @@ 'payload': item }; - if (!this.usePersistence) { + if (!this._persists()) { this.memQueue.push(queueEntry); return PromisePolyfill.resolve(true); } else { @@ -21377,7 +21212,20 @@ } }; + /** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ + RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); + }; + RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -21477,7 +21325,7 @@ }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -21565,7 +21413,7 @@ */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -21620,11 +21468,14 @@ RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); }, this)) - .then(function () { - return true; - }) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -21669,7 +21520,8 @@ sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -22940,6 +22792,8 @@ /** * @typedef {Object} SessionRecordingOptions * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib + * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks + * before it stores or sends * @property {String} [options.replayId] - unique uuid for a single replay * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length @@ -22970,6 +22824,7 @@ */ var SessionRecording = function(options) { this._mixpanel = options.mixpanelInstance; + this.consentGate = options.consentGate; this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC; this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC; this._onBatchSent = options.onBatchSent || NOOP_FUNC; @@ -22996,7 +22851,7 @@ // disable persistence if localStorage is not supported // request-queue will automatically disable persistence if indexedDB fails to initialize - var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence'); + var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence(); // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId; @@ -23010,6 +22865,7 @@ sharedLockStorage: options.sharedLockStorage, usePersistence: usePersistence, stopAllBatchingFunc: this.stopRecording.bind(this), + consentGate: this.consentGate, // increased throttle and shared lock timeout because recording events are very high frequency. // this will minimize the amount of lock contention between enqueued events. @@ -23065,13 +22921,6 @@ return this._mixpanel.get_config(configVar); }; - // Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which - // reaches into this class instance and expects the snake case version of the function. - // eslint-disable-next-line camelcase - SessionRecording.prototype.get_config = function(configVar) { - return this.getConfig(configVar); - }; - SessionRecording.prototype.startRecording = function (shouldStopBatcher) { if (this._rrwebRecord === null) { this.reportError('rrweb record function not provided. '); @@ -23246,19 +23095,15 @@ /** - * Flushes the current batch of events to the server, but passes an opt-out callback to make sure - * we stop recording and dump any queued events if the user has opted out. + * Flushes the current batch of events to the server, or stops recording if consent stops the calls. */ SessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) { - var onOptOut = function (code) { - // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out - if (code === 0) { - this.stopRecording(); - cb({error: 'Tracking has been opted out, stopping recording.'}); - } - }.bind(this); - - this._flushEvents(data, options, cb, onOptOut); + if (!this.consentGate.allowsApiCalls()) { + this.stopRecording(); + cb({error: 'Tracking has been opted out, stopping recording.'}); + return; + } + this._flushEvents(data, options, cb); }; /** @@ -23314,7 +23159,12 @@ return this.getConfig('api_routes')['record']; }; + // consent can be withdrawn while the batch is compressed, so it is checked again before sending SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) { + if (!this.consentGate.allowsApiCalls()) { + callback(0); + return; + } var onSuccess = function (response, responseBody) { // Update batch specific props only if the request was successful to guarantee ordering. // RequestBatcher will always flush the next batch after the previous one succeeds. @@ -23351,7 +23201,7 @@ }); }; - SessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) { + SessionRecording.prototype._flushEvents = function(data, options, callback) { var numEvents = data.length; if (numEvents > 0) { @@ -23418,7 +23268,7 @@ sendUncompressed(); } } - }); + }; SessionRecording.prototype.reportError = function(msg, err) { @@ -23473,9 +23323,10 @@ */ SessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) { return function(text, element) { - // prevent visual artifacts from random whitespace + // whitespace-only text has nothing to mask, and dropping it would join adjacent words + // (e.g. a space text node between two inline elements) if (!text.trim().length) { - return ''; + return text; } var shouldMask = true; @@ -23503,11 +23354,12 @@ this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA); this.errorReporter = options.errorReporter; this.mixpanelInstance = options.mixpanelInstance; + this.consentGate = options.consentGate; this.sharedLockStorage = options.sharedLockStorage; }; RecordingRegistry.prototype.isPersistenceEnabled = function() { - return !this.mixpanelInstance.get_config('disable_persistence'); + return this.consentGate.allowsPersistence(); }; RecordingRegistry.prototype.handleError = function (err) { @@ -23518,6 +23370,7 @@ * @param {import('./session-recording').SerializedRecording} serializedRecording */ RecordingRegistry.prototype.setActiveRecording = function (serializedRecording) { + // a recording that resumes after consent stops storage writes nothing if (!this.isPersistenceEnabled()) { return PromisePolyfill.resolve(); } @@ -23554,13 +23407,10 @@ }; RecordingRegistry.prototype.clearActiveRecording = function () { - if (this.isPersistenceEnabled()) { - // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. - // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. - return this.markActiveRecordingExpired(); - } else { - return this.deleteActiveRecording(); - } + // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. + // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. + // without persistence the entry is left as it is, and its unsent events wait for a load that allows them. + return this.markActiveRecordingExpired(); }; RecordingRegistry.prototype.markActiveRecordingExpired = function () { @@ -23574,16 +23424,6 @@ .catch(this.handleError.bind(this)); }; - RecordingRegistry.prototype.deleteActiveRecording = function () { - // avoid initializing IDB if this registry instance hasn't already written a recording - if (this.idb.isInitialized()) { - return this.idb.removeItem(this.mixpanelInstance.get_tab_id()) - .catch(this.handleError.bind(this)); - } else { - return PromisePolyfill.resolve(); - } - }; - /** * Flush any inactive recordings from the registry to minimize data loss. * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch. @@ -23606,6 +23446,7 @@ .map(function (serializedRecording) { var sessionRecording = SessionRecording.deserialize(serializedRecording, { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, sharedLockStorage: this.sharedLockStorage }); return sessionRecording.unloadPersistedData() @@ -23621,6 +23462,79 @@ .catch(this.handleError.bind(this)); }; + /** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + + /** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ + function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console$1.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; + } + + /** + * The consent gate the recorder bundle builds when it starts, and hands to its services. The core + * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name, + * the bundle being built separately. A core without it only knows the opt-out, through + * has_opted_out_tracking(). + * @param {Object} mixpanelInstance + * @returns {ConsentGate} + */ + function consentGateFor(mixpanelInstance) { + return buildConsentGate( + function(capability) { + var consentAllows = mixpanelInstance['_consent_allows']; + if (typeof consentAllows === 'function') { + return !!consentAllows.call(mixpanelInstance, capability); + } + return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking(); + }, + function(key) { + return mixpanelInstance.get_config(key); + } + ); + } + var logger = console_with_prefix('recorder'); /** @@ -23631,12 +23545,14 @@ this.mixpanelInstance = mixpanelInstance; this.rrwebRecord = rrwebRecord || record; this.sharedLockStorage = sharedLockStorage; + this.consentGate = consentGateFor(mixpanelInstance); /** * @member {import('./registry').RecordingRegistry} */ this.recordingRegistry = new RecordingRegistry({ mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, errorReporter: logger.error, sharedLockStorage: sharedLockStorage }); @@ -23673,6 +23589,7 @@ */ var sessionRecordingOptions = { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, onBatchSent: onBatchSent, onIdleTimeout: onIdleTimeout, onMaxLengthReached: onMaxLengthReached, diff --git a/dist/mixpanel-recorder.min.js b/dist/mixpanel-recorder.min.js index d8223c8c..5b43c1d9 100644 --- a/dist/mixpanel-recorder.min.js +++ b/dist/mixpanel-recorder.min.js @@ -1,2 +1,2 @@ -(function(){"use strict";var H;if(typeof window=="undefined"){var zs={hostname:""};H={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:zs,referrer:""},screen:{width:0,height:0},location:zs,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else H=window;var Si={LIB_VERSION:"2.84.0"},Rc="__mp_recorder";function Ws(r,i){(i==null||i>r.length)&&(i=r.length);for(var o=0,e=new Array(i);o=0)&&(o[t]=r[t]);return o}function Jt(r,i){return Jt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Jt(r,i)}function M(r){"@swc/helpers - typeof";return r&&typeof Symbol!="undefined"&&r.constructor===Symbol?"symbol":typeof r}function Ac(r,i){if(r){if(typeof r=="string")return Ws(r,i);var o=Object.prototype.toString.call(r).slice(8,-1);if(o==="Object"&&r.constructor&&(o=r.constructor.name),o==="Map"||o==="Set")return Array.from(o);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return Ws(r,i)}}function Zt(r){var i=typeof Map=="function"?new Map:void 0;return Zt=function(e){if(e===null||!Ec(e))return e;if(typeof e!="function")throw new TypeError("Super expression must either be null or a function");if(typeof i!="undefined"){if(i.has(e))return i.get(e);i.set(e,t)}function t(){return Nr(e,arguments,Ci(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),Jt(t,e)},Zt(r)}function Gs(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(i){}return(Gs=function(){return!!r})()}function I(r,i){var o=typeof Symbol!="undefined"&&r[Symbol.iterator]||r["@@iterator"];if(o)return(o=o.call(r)).next.bind(o);if(Array.isArray(r)||(o=Ac(r))||i){o&&(r=o);var e=0;return function(){return e>=r.length?{done:!0}:{done:!1,value:r[e++]}}}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 rt(r,i){var o,e,t,n,s={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return n={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(n[Symbol.iterator]=function(){return this}),n;function a(f){return function(l){return u([f,l])}}function u(f){if(o)throw new TypeError("Generator is already executing.");for(;s;)try{if(o=1,e&&(t=f[0]&2?e.return:f[0]?e.throw||((t=e.return)&&t.call(e),0):e.next)&&!(t=t.call(e,f[1])).done)return t;switch(e=0,t&&(f=[f[0]&2,t.value]),f[0]){case 0:case 1:t=f;break;case 4:return s.label++,{value:f[1],done:!1};case 5:s.label++,e=f[1],f=[0];continue;case 7:f=s.ops.pop(),s.trys.pop();continue;default:if(t=s.trys,!(t=t.length>0&&t[t.length-1])&&(f[0]===6||f[0]===2)){s=0;continue}if(f[0]===3&&(!t||f[1]>t[0]&&f[1]=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}};throw new TypeError(i?"Object is not iterable.":"Symbol.iterator is not defined.")}var Mc=Object.defineProperty,$c=function(r,i,o){return i in r?Mc(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},O=function(r,i,o){return $c(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},qs,kc=Object.defineProperty,_c=function(r,i,o){return i in r?kc(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},Vs=function(r,i,o){return _c(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},he=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(he||{}),Hs={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Ys={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Lr={},Pc=function(){return!!globalThis.Zone};function Oi(r){if(Lr[r])return Lr[r];var i=globalThis[r],o=i.prototype,e=r in Hs?Hs[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Ys?Ys[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!Pc())return Lr[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Lr[r]=f:o}catch(l){return o}}var Ri={};function je(r,i,o){var e,t=r+"."+String(o);if(Ri[t])return Ri[t].call(i);var n=Oi(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(Ri[t]=s,s.call(i)):i[o]}var xi={};function Js(r,i,o){var e=r+"."+String(o);if(xi[e])return xi[e].bind(i);var t=Oi(r),n=t[o];return typeof n!="function"?i[o]:(xi[e]=n,n.bind(i))}function Tc(r){return je("Node",r,"childNodes")}function Nc(r){return je("Node",r,"parentNode")}function Lc(r){return je("Node",r,"parentElement")}function Dc(r){return je("Node",r,"textContent")}function Fc(r,i){return Js("Node",r,"contains")(i)}function Bc(r){return Js("Node",r,"getRootNode")()}function Uc(r){return!r||!("host"in r)?null:je("ShadowRoot",r,"host")}function zc(r){return r.styleSheets}function Wc(r){return!r||!("shadowRoot"in r)?null:je("Element",r,"shadowRoot")}function jc(r,i){return je("Element",r,"querySelector")(i)}function Gc(r,i){return je("Element",r,"querySelectorAll")(i)}function qc(){return Oi("MutationObserver").constructor}function Vc(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var ve={childNodes:Tc,parentNode:Nc,parentElement:Lc,textContent:Dc,contains:Fc,getRootNode:Bc,host:Uc,styleSheets:zc,shadowRoot:Wc,querySelector:jc,querySelectorAll:Gc,mutationObserver:qc,patch:Vc};function Zs(r){return r.nodeType===r.ELEMENT_NODE}function Kt(r){var i=r&&"host"in r&&"mode"in r&&ve.host(r)||null;return!!(i&&"shadowRoot"in i&&ve.shadowRoot(i)===r)}function Xt(r){return Object.prototype.toString.call(r)==="[object ShadowRoot]"}function Hc(r){return r.includes(" background-clip: text;")&&!r.includes(" -webkit-background-clip: text;")&&(r=r.replace(/\sbackground-clip:\s*text;/g," -webkit-background-clip: text; background-clip: text;")),r}function Yc(r){var i=r.cssText;if(i.split('"').length<3)return i;var o=["@import","url("+JSON.stringify(r.href)+")"];return r.layerName===""?o.push("layer"):r.layerName&&o.push("layer("+r.layerName+")"),r.supportsText&&o.push("supports("+r.supportsText+")"),r.media.length&&o.push(r.media.mediaText),o.join(" ")+";"}function Ei(r){try{var i=r.rules||r.cssRules;if(!i)return null;var o=r.href;!o&&r.ownerNode&&r.ownerNode.ownerDocument&&(o=r.ownerNode.ownerDocument.location.href);var e=Array.from(i,function(t){return Ks(t,o)}).join("");return Hc(e)}catch(t){return null}}function Ks(r,i){if(Zc(r)){var o;try{o=Ei(r.styleSheet)||Yc(r)}catch(t){o=r.cssText}return r.styleSheet.href?Dr(o,r.styleSheet.href):o}else{var e=r.cssText;return Kc(r)&&r.selectorText.includes(":")&&(e=Jc(e)),i?Dr(e,i):e}}function Jc(r){var i=/(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;return r.replace(i,"$1\\$2")}function Zc(r){return"styleSheet"in r}function Kc(r){return"selectorText"in r}var Xs=(function(){function r(){Vs(this,"idNodeMap",new Map),Vs(this,"nodeMetaMap",new WeakMap)}var i=r.prototype;return i.getId=function(e){var t;if(!e)return-1;var n=(t=this.getMeta(e))==null?void 0:t.id;return n!=null?n:-1},i.getNode=function(e){return this.idNodeMap.get(e)||null},i.getIds=function(){return Array.from(this.idNodeMap.keys())},i.getMeta=function(e){return this.nodeMetaMap.get(e)||null},i.removeNodeFromMap=function(e,t){var n=this;t===void 0&&(t=!1);var s=this.getId(e);this.idNodeMap.delete(s),t&&this.nodeMetaMap.delete(e),e.childNodes&&e.childNodes.forEach(function(a){return n.removeNodeFromMap(a,t)})},i.has=function(e){return this.idNodeMap.has(e)},i.hasNode=function(e){return this.nodeMetaMap.has(e)},i.add=function(e,t){var n=t.id;this.idNodeMap.set(n,e),this.nodeMetaMap.set(e,t)},i.replace=function(e,t){var n=this.getNode(e);if(n){var s=this.nodeMetaMap.get(n);s&&this.nodeMetaMap.set(t,s)}this.idNodeMap.set(e,t)},i.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},r})();function Xc(){return new Xs}function Qt(r){var i=r.element,o=r.maskInputOptions,e=r.tagName,t=r.type,n=r.value,s=r.maskInputFn,a=n||"",u=t&&nt(t);return(o[e.toLowerCase()]||u&&o[u])&&(s?a=s(a,i):a="*".repeat(a.length)),a}function nt(r){return r.toLowerCase()}var Qs="__rrweb_original__";function Qc(r){var i=r.getContext("2d");if(!i)return!0;for(var o=50,e=0;e-1?i=r.split("/").slice(0,3).join("/"):i=r.split("/")[0],i=i.split("?")[0],i}var th=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,rh=/^(?:[a-z+]+:)?\/\//i,nh=/^www\..*/i,ih=/^(data:)([^,]*),(.*)/i;function Dr(r,i){return(r||"").replace(th,function(o,e,t,n,s,a){var u=t||s||a,f=e||n||"";if(!u)return o;if(rh.test(u)||nh.test(u)||ih.test(u))return"url("+f+u+f+")";if(u[0]==="/")return"url("+f+(eh(i)+u)+f+")";var l=i.split("/"),c=u.split("/");l.pop();for(var h=I(c),v;!(v=h()).done;){var p=v.value;p!=="."&&(p===".."?l.pop():l.push(p))}return"url("+f+l.join("/")+f+")"})}function Fr(r,i){return i===void 0&&(i=!1),i?r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,""):r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,"").replace(/0px/g,"0")}function oh(r,i,o){o===void 0&&(o=!1);var e=Array.from(i.childNodes),t=[],n=0;if(e.length>1&&r&&typeof r=="string"){for(var s=Fr(r,o),a=s.length/r.length,u=1;u2&&v[0]===""&&e[u-1].textContent!=="")p=s.indexOf(h,1);else if(v.length===1){if(h=h.substring(0,h.length-1),v=s.split(h),v.length<=1)return t.push(r),t;c=l+1}else c===f.length-1&&(p=s.indexOf(h));if(v.length>=2&&c>l){var m=e[u-1].textContent;if(m&&typeof m=="string"){var d=Fr(m).length;p=s.indexOf(h,d)}p===-1&&(p=v[0].length)}if(p!==-1){for(var g=Math.floor(p/a);g>0&&g50*e.length)return t.push(r),t;var w=Fr(r.substring(0,g),o);if(w.length===p){t.push(r.substring(0,g)),r=r.substring(g),s=s.substring(p);break}else w.length=i.length);){var n=e(lh);if(n.slice(-1)===",")n=Ot(r,n.substring(0,n.length-1)),t.push(n);else{var s="";n=Ot(r,n);for(var a=!1;;){var u=i.charAt(o);if(u===""){t.push((n+s).trim());break}else if(a)u===")"&&(a=!1);else if(u===","){o+=1,t.push((n+s).trim());break}else u==="("&&(a=!0);s+=u,o+=1}}}return t.join(", ")}var na=new WeakMap;function Ot(r,i){return!i||i.trim()===""?i:Ai(r,i)}function dh(r){return!!(r.tagName==="svg"||r.ownerSVGElement)}function Ai(r,i){var o=na.get(r);if(o||(o=r.createElement("a"),na.set(r,o)),!i)i="";else if(i.startsWith("blob:")||i.startsWith("data:"))return i;return o.setAttribute("href",i),o.href}function ia(r,i,o,e){return e&&(o==="src"||o==="href"&&!(i==="use"&&e[0]==="#")||o==="xlink:href"&&e[0]!=="#"||o==="background"&&(i==="table"||i==="td"||i==="th")?Ot(r,e):o==="srcset"?hh(r,e):o==="style"?Dr(e,Ai(r)):i==="object"&&o==="data"?Ot(r,e):e)}function oa(r,i,o){return(r==="video"||r==="audio")&&i==="autoplay"}function ph(r,i,o){try{if(typeof i=="string"){if(r.classList.contains(i))return!0}else for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}if(o)return r.matches(o)}catch(n){}return!1}function Br(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return o?Br(ve.parentNode(r),i,o):!1;for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return o?Br(ve.parentNode(r),i,o):!1}function sa(r,i,o,e){var t;if(Zs(r)){if(t=r,!ve.childNodes(t).length)return!1}else{if(ve.parentElement(r)===null)return!1;t=ve.parentElement(r)}try{if(typeof i=="string"){if(e){if(t.closest("."+i))return!0}else if(t.classList.contains(i))return!0}else if(Br(t,i,e))return!0;if(o){if(e){if(t.closest(o))return!0}else if(t.matches(o))return!0}}catch(n){}return!1}function vh(r,i,o){var e=r.contentWindow;if(e){var t=!1,n;try{n=e.document.readyState}catch(u){return}if(n!=="complete"){var s=setTimeout(function(){t||(i(),t=!0)},o);r.addEventListener("load",function(){clearTimeout(s),t=!0,i()});return}var a="about:blank";if(e.location.href!==a||r.src===a||r.src==="")return setTimeout(i,0),r.addEventListener("load",i);r.addEventListener("load",i)}}function mh(r,i,o){var e=!1,t;try{t=r.sheet}catch(s){return}if(!t){var n=setTimeout(function(){e||(i(),e=!0)},o);r.addEventListener("load",function(){clearTimeout(n),e=!0,i()})}}function gh(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.needsMask,a=i.inlineStylesheet,u=i.maskInputOptions,f=u===void 0?{}:u,l=i.maskTextFn,c=i.maskInputFn,h=i.dataURLOptions,v=h===void 0?{}:h,p=i.inlineImages,m=i.recordCanvas,d=i.keepIframeSrcFn,g=i.newlyAddedElement,w=g===void 0?!1:g,b=i.cssCaptured,S=b===void 0?!1:b,C=yh(o,e);switch(r.nodeType){case r.DOCUMENT_NODE:return r.compatMode!=="CSS1Compat"?{type:he.Document,childNodes:[],compatMode:r.compatMode}:{type:he.Document,childNodes:[]};case r.DOCUMENT_TYPE_NODE:return{type:he.DocumentType,name:r.name,publicId:r.publicId,systemId:r.systemId,rootId:C};case r.ELEMENT_NODE:return bh(r,{doc:o,blockClass:t,blockSelector:n,inlineStylesheet:a,maskInputOptions:f,maskInputFn:c,dataURLOptions:v,inlineImages:p,recordCanvas:m,keepIframeSrcFn:d,newlyAddedElement:w,rootId:C});case r.TEXT_NODE:return wh(r,{doc:o,needsMask:s,maskTextFn:l,rootId:C,cssCaptured:S});case r.CDATA_SECTION_NODE:return{type:he.CDATA,textContent:"",rootId:C};case r.COMMENT_NODE:return{type:he.Comment,textContent:ve.textContent(r)||"",rootId:C};default:return!1}}function yh(r,i){if(i.hasNode(r)){var o=i.getId(r);return o===1?void 0:o}}function wh(r,i){var o=i.needsMask,e=i.maskTextFn,t=i.rootId,n=i.cssCaptured,s=ve.parentNode(r),a=s&&s.tagName,u="",f=a==="STYLE"?!0:void 0,l=a==="SCRIPT"?!0:void 0;return l?u="SCRIPT_PLACEHOLDER":n||(u=ve.textContent(r),f&&u&&(u=Dr(u,Ai(i.doc)))),!f&&!l&&u&&o&&(u=e?e(u,ve.parentElement(r)):u.replace(/[\S]/g,"*")),{type:he.Text,textContent:u||"",rootId:t}}function bh(r,i){for(var o=i.doc,e=i.blockClass,t=i.blockSelector,n=i.inlineStylesheet,s=i.maskInputOptions,a=s===void 0?{}:s,u=i.maskInputFn,f=i.dataURLOptions,l=f===void 0?{}:f,c=i.inlineImages,h=i.recordCanvas,v=i.keepIframeSrcFn,p=i.newlyAddedElement,m=p===void 0?!1:p,d=i.rootId,g=ph(r,e,t),w=fh(r),b={},S=r.attributes.length,C=0;C1&&(k=sh(k,r)),b._cssText=k)}if(w==="input"||w==="textarea"||w==="select"){var N=r.value,ae=r.checked;b.type!=="radio"&&b.type!=="checkbox"&&b.type!=="submit"&&b.type!=="button"&&N?b.value=Qt({element:r,type:er(r),tagName:w,value:N,maskInputOptions:a,maskInputFn:u}):ae&&(b.checked=ae)}if((w==="input"||w==="textarea")&&b.placeholder&&(b.placeholder=Qt({element:r,type:er(r),tagName:w,value:b.placeholder,maskInputOptions:a,maskInputFn:u})),w==="option"&&(r.selected&&!a.select?b.selected=!0:delete b.selected),w==="dialog"&&r.open&&(b.rr_open_mode=r.matches("dialog:modal")?"modal":"non-modal"),w==="canvas"&&h){if(r.__context==="2d")Qc(r)||(b.rr_dataURL=r.toDataURL(l.type,l.quality));else if(!("__context"in r)){var _=r.toDataURL(l.type,l.quality),L=o.createElement("canvas");L.width=r.width,L.height=r.height;var oe=L.toDataURL(l.type,l.quality);_!==oe&&(b.rr_dataURL=_)}}if(w==="img"&&c){It||(It=o.createElement("canvas"),ra=It.getContext("2d"));var z=r,Ce=z.currentSrc||z.getAttribute("src")||"",be=z.crossOrigin,pe=function(){z.removeEventListener("load",pe);try{It.width=z.naturalWidth,It.height=z.naturalHeight,ra.drawImage(z,0,0),b.rr_dataURL=It.toDataURL(l.type,l.quality)}catch(Re){if(z.crossOrigin!=="anonymous"){z.crossOrigin="anonymous",z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe);return}else console.warn("Cannot inline img src="+Ce+"! Error: "+Re)}z.crossOrigin==="anonymous"&&(be?b.crossOrigin=be:z.removeAttribute("crossorigin"))};z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe)}if(w==="audio"||w==="video"){var ie=b;ie.rr_mediaState=r.paused?"paused":"played",ie.rr_mediaCurrentTime=r.currentTime,ie.rr_mediaPlaybackRate=r.playbackRate,ie.rr_mediaMuted=r.muted,ie.rr_mediaLoop=r.loop,ie.rr_mediaVolume=r.volume}if(m||(r.scrollLeft&&(b.rr_scrollLeft=r.scrollLeft),r.scrollTop&&(b.rr_scrollTop=r.scrollTop)),g){var de=r.getBoundingClientRect(),dt=de.width,Ne=de.height;b={class:b.class,rr_width:""+dt+"px",rr_height:""+Ne+"px"}}w==="iframe"&&!v(b.src)&&(r.contentDocument||(b.rr_src=b.src),delete b.src);var pt;try{customElements.get(w)&&(pt=!0)}catch(Re){}return{type:he.Element,tagName:w,attributes:b,childNodes:[],isSVG:dh(r)||void 0,needBlock:g,rootId:d,isCustom:pt}}function Y(r){return r==null?"":r.toLowerCase()}function Sh(r,i){if(i.comment&&r.type===he.Comment)return!0;if(r.type===he.Element){if(i.script&&(r.tagName==="script"||r.tagName==="link"&&(r.attributes.rel==="preload"&&r.attributes.as==="script"||r.attributes.rel==="modulepreload")||r.tagName==="link"&&r.attributes.rel==="prefetch"&&typeof r.attributes.href=="string"&&ea(r.attributes.href)==="js"))return!0;if(i.headFavicon&&(r.tagName==="link"&&r.attributes.rel==="shortcut icon"||r.tagName==="meta"&&(Y(r.attributes.name).match(/^msapplication-tile(image|color)$/)||Y(r.attributes.name)==="application-name"||Y(r.attributes.rel)==="icon"||Y(r.attributes.rel)==="apple-touch-icon"||Y(r.attributes.rel)==="shortcut icon")))return!0;if(r.tagName==="meta"){if(i.headMetaDescKeywords&&Y(r.attributes.name).match(/^description|keywords$/))return!0;if(i.headMetaSocial&&(Y(r.attributes.property).match(/^(og|twitter|fb):/)||Y(r.attributes.name).match(/^(og|twitter):/)||Y(r.attributes.name)==="pinterest"))return!0;if(i.headMetaRobots&&(Y(r.attributes.name)==="robots"||Y(r.attributes.name)==="googlebot"||Y(r.attributes.name)==="bingbot"))return!0;if(i.headMetaHttpEquiv&&r.attributes["http-equiv"]!==void 0)return!0;if(i.headMetaAuthorship&&(Y(r.attributes.name)==="author"||Y(r.attributes.name)==="generator"||Y(r.attributes.name)==="framework"||Y(r.attributes.name)==="publisher"||Y(r.attributes.name)==="progid"||Y(r.attributes.property).match(/^article:/)||Y(r.attributes.property).match(/^product:/)))return!0;if(i.headMetaVerification&&(Y(r.attributes.name)==="google-site-verification"||Y(r.attributes.name)==="yandex-verification"||Y(r.attributes.name)==="csrf-token"||Y(r.attributes.name)==="p:domain_verify"||Y(r.attributes.name)==="verify-v1"||Y(r.attributes.name)==="verification"||Y(r.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function Rt(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.maskTextClass,a=i.maskTextSelector,u=i.skipChild,f=u===void 0?!1:u,l=i.inlineStylesheet,c=l===void 0?!0:l,h=i.maskInputOptions,v=h===void 0?{}:h,p=i.maskTextFn,m=i.maskInputFn,d=i.slimDOMOptions,g=i.dataURLOptions,w=g===void 0?{}:g,b=i.inlineImages,S=b===void 0?!1:b,C=i.recordCanvas,R=C===void 0?!1:C,E=i.onSerialize,x=i.onIframeLoad,k=i.iframeLoadTimeout,N=k===void 0?5e3:k,ae=i.onStylesheetLoad,_=i.stylesheetLoadTimeout,L=_===void 0?5e3:_,oe=i.keepIframeSrcFn,z=oe===void 0?function(){return!1}:oe,Ce=i.newlyAddedElement,be=Ce===void 0?!1:Ce,pe=i.cssCaptured,ie=pe===void 0?!1:pe,de=i.needsMask,dt=i.preserveWhiteSpace,Ne=dt===void 0?!0:dt;if(!de){var pt=de===void 0;de=sa(r,s,a,pt)}var Re=gh(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,dataURLOptions:w,inlineImages:S,recordCanvas:R,keepIframeSrcFn:z,newlyAddedElement:be,cssCaptured:ie});if(!Re)return console.warn(r,"not serialized"),null;var Qe;e.hasNode(r)?Qe=e.getId(r):Sh(Re,d)||!Ne&&Re.type===he.Text&&!Re.textContent.replace(/^\s+|\s+$/gm,"").length?Qe=tr:Qe=ta();var j=Object.assign(Re,{id:Qe});if(e.add(r,j),Qe===tr)return null;E&&E(r);var qt=!f;if(j.type===he.Element){qt=qt&&!j.needBlock,delete j.needBlock;var Vt=ve.shadowRoot(r);Vt&&Xt(Vt)&&(j.isShadowHost=!0)}if((j.type===he.Document||j.type===he.Element)&&qt){d.headWhitespace&&j.type===he.Element&&j.tagName==="head"&&(Ne=!1);var et={doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:f,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:L,keepIframeSrcFn:z,cssCaptured:!1};if(!(j.type===he.Element&&j.tagName==="textarea"&&j.attributes.value!==void 0)){j.type===he.Element&&j.attributes._cssText!==void 0&&typeof j.attributes._cssText=="string"&&(et.cssCaptured=!0);for(var mi=I(Array.from(ve.childNodes(r))),Ht;!(Ht=mi()).done;){var gi=Ht.value,yi=Rt(gi,et);yi&&j.childNodes.push(yi)}}var Pr=null;if(Zs(r)&&(Pr=ve.shadowRoot(r)))for(var vt=I(Array.from(ve.childNodes(Pr))),mt;!(mt=vt()).done;){var gt=mt.value,yt=Rt(gt,et);yt&&(Xt(Pr)&&(yt.isShadow=!0),j.childNodes.push(yt))}}var wt=ve.parentNode(r);return wt&&Kt(wt)&&Xt(wt)&&(j.isShadow=!0),j.type===he.Element&&j.tagName==="iframe"&&vh(r,function(){var ze=r.contentDocument;if(ze&&x){var Yt=Rt(ze,{doc:ze,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:L,keepIframeSrcFn:z});Yt&&x(r,Yt)}},N),j.type===he.Element&&j.tagName==="link"&&typeof j.attributes.rel=="string"&&(j.attributes.rel==="stylesheet"||j.attributes.rel==="preload"&&typeof j.attributes.href=="string"&&ea(j.attributes.href)==="css")&&mh(r,function(){if(ae){var ze=Rt(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:L,keepIframeSrcFn:z});ze&&ae(r,ze)}},L),j}function Ch(r,i){var o=i||{},e=o.mirror,t=e===void 0?new Xs:e,n=o.blockClass,s=n===void 0?"rr-block":n,a=o.blockSelector,u=a===void 0?null:a,f=o.maskTextClass,l=f===void 0?"rr-mask":f,c=o.maskTextSelector,h=c===void 0?null:c,v=o.inlineStylesheet,p=v===void 0?!0:v,m=o.inlineImages,d=m===void 0?!1:m,g=o.recordCanvas,w=g===void 0?!1:g,b=o.maskAllInputs,S=b===void 0?!1:b,C=o.maskTextFn,R=o.maskInputFn,E=o.slimDOM,x=E===void 0?!1:E,k=o.dataURLOptions,N=o.preserveWhiteSpace,ae=o.onSerialize,_=o.onIframeLoad,L=o.iframeLoadTimeout,oe=o.onStylesheetLoad,z=o.stylesheetLoadTimeout,Ce=o.keepIframeSrcFn,be=Ce===void 0?function(){return!1}:Ce,pe=S===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:S===!1?{password:!0}:S,ie=x===!0||x==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:x==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:x===!1?{}:x;return Rt(r,{doc:r,mirror:t,blockClass:s,blockSelector:u,maskTextClass:l,maskTextSelector:h,skipChild:!1,inlineStylesheet:p,maskInputOptions:pe,maskTextFn:C,maskInputFn:R,slimDOMOptions:ie,dataURLOptions:k,inlineImages:d,recordCanvas:w,preserveWhiteSpace:N,onSerialize:ae,onIframeLoad:_,iframeLoadTimeout:L,onStylesheetLoad:oe,stylesheetLoadTimeout:z,keepIframeSrcFn:be,newlyAddedElement:!1})}function Ih(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function Oh(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Mi={exports:{}},K=String,aa=function(){return{isColorSupported:!1,reset:K,bold:K,dim:K,italic:K,underline:K,inverse:K,hidden:K,strikethrough:K,black:K,red:K,green:K,yellow:K,blue:K,magenta:K,cyan:K,white:K,gray:K,bgBlack:K,bgRed:K,bgGreen:K,bgYellow:K,bgBlue:K,bgMagenta:K,bgCyan:K,bgWhite:K}};Mi.exports=aa(),Mi.exports.createColors=aa;var Rh=Mi.exports,xh={},Eh=Object.freeze(Object.defineProperty({__proto__:null,default:xh},Symbol.toStringTag,{value:"Module"})),ue=Oh(Eh),ua=Rh,fa=ue,$i=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ua.isColorSupported),fa&&t&&(s=fa(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ua.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Zt(Error)),ki=$i;$i.default=$i;var Ge={};Ge.isClean=Symbol("isClean"),Ge.my=Symbol("my");var la={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Ah(r){return r[0].toUpperCase()+r.slice(1)}var _i=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),ca=_i;_i.default=_i;var Mh=ca;function Pi(r,i){var o=new Mh(i);o.stringify(r)}var Ur=Pi;Pi.default=Pi;var zr=Ge.isClean,$h=Ge.my,kh=ki,_h=ca,Ph=Ur;function Ti(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Ti(s,o)}):(n==="object"&&t!==null&&(t=Ti(t)),o[e]=t)}return o}var Ni=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[zr]=!1,this[$h]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Ti(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new kh(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[zr]){this[zr]=!1;for(var e=this;e=e.parent;)e[zr]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=Di(e),Fh(e))return this.mapFile=e,Bh(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,ha))return da.fromSourceMap(t).toString();if(A(t,da))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Uh(Di(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),pa=Fi;Fi.default=Fi;var Wh=ue.SourceMapConsumer,jh=ue.SourceMapGenerator,va=ue.fileURLToPath,Gr=ue.pathToFileURL,Bi=ue.isAbsolute,Ui=ue.resolve,Gh=Dh.nanoid,zi=ue,ma=ki,qh=pa,Wi=Symbol("fromOffsetCache"),Vh=!!(Wh&&jh),ga=!!(Ui&&Bi),qr=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!ga||/^\w+:\/\//.test(e.from)||Bi(e.from)?this.file=e.from:this.file=Ui(e.from)),ga&&Vh){var t=new qh(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new ma(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new ma(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(Gr&&(a.input.url=Gr(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[Wi])n=this[Wi];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Ui(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;Bi(u.source)?l=Gr(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Gr(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(va)c.file=va(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Jh&&Yh&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Hr.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Hr({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new Hr({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?Yr(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=Yr(ba(n,this.mapOpts.annotation)));var s=wa(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Hh(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(Ca){var n=Ca(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;Sa==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),Ia=Zh,Kh=Wr,ji=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Kh),Jr=ji;ji.default=ji;var Oa=Ge.isClean,Ra=Ge.my,xa=jr,Ea=Jr,Xh=Wr,Aa,Gi,qi,Ma;function $a(r){return r.map(function(i){return i.nodes&&(i.nodes=$a(i.nodes)),delete i.source,i})}function ka(r){if(r[Oa]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ka(e)}}var Le=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Xh);Le.registerParse=function(r){Aa=r},Le.registerRule=function(r){Gi=r},Le.registerAtRule=function(r){qi=r},Le.registerRoot=function(r){Ma=r};var it=Le;Le.default=Le,Le.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,qi.prototype):r.type==="rule"?Object.setPrototypeOf(r,Gi.prototype):r.type==="decl"?Object.setPrototypeOf(r,xa.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ea.prototype):r.type==="root"&&Object.setPrototypeOf(r,Ma.prototype),r[Ra]=!0,r.nodes&&r.nodes.forEach(function(i){Le.rebuild(i)})};var Qh=it,_a,Pa,rr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new _a(new Pa,this,t);return n.stringify()},i})(Qh);rr.registerLazyResult=function(r){_a=r},rr.registerProcessor=function(r){Pa=r};var Vi=rr;rr.default=rr;var Ta={},Na=function(i){Ta[i]||(Ta[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Hi=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),La=Hi;Hi.default=Hi;var ed=La,Yi=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new ed(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ji=Yi;Yi.default=Yi;var Zi=39,Da=34,Zr=92,Fa=47,Kr=10,nr=32,Xr=12,Qr=9,en=13,td=91,rd=93,nd=40,id=41,od=123,sd=125,ad=59,ud=42,fd=58,ld=64,tn=/[\t\n\f\r "#'()/;[\\\]{}]/g,rn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,cd=/.[\r\n"'(/\\]/,Ba=/[\da-f]/i,hd=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Kr:case nr:case Qr:case en:case Xr:{s=d;do s+=1,n=e.charCodeAt(s);while(n===nr||n===Kr||n===Qr||n===en||n===Xr);p=["space",e.slice(d,s)],d=s-1;break}case td:case rd:case od:case sd:case fd:case ad:case id:{var N=String.fromCharCode(n);p=[N,N,d];break}case nd:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==Zi&&v!==Da&&v!==nr&&v!==Kr&&v!==Qr&&v!==Xr&&v!==en){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Zr;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||cd.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case Zi:case Da:{a=n===Zi?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Zr;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case ld:{tn.lastIndex=d+1,tn.test(e),tn.lastIndex===0?s=e.length-1:s=tn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Zr:{for(s=d,f=!0;e.charCodeAt(s+1)===Zr;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Fa&&n!==nr&&n!==Kr&&n!==Qr&&n!==en&&n!==Xr&&(s+=1,Ba.test(e.charAt(s)))){for(;Ba.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===nr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Fa&&e.charCodeAt(d+1)===ud?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(rn.lastIndex=d+1,rn.test(e),rn.lastIndex===0?s=e.length-1:s=rn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Ua=it,nn=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Wa(new ja,this,t);return n.stringify()},i})(za);xt.registerLazyResult=function(r){Wa=r},xt.registerProcessor=function(r){ja=r};var ir=xt;xt.default=xt,za.registerRoot(xt);var or={comma:function(i){return or.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return or.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},Ga=or;or.default=or;var qa=it,dd=Ga,on=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return dd.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(qa),Xi=on;on.default=on,qa.registerRule(on);var pd=jr,vd=hd,md=Jr,gd=Ki,yd=ir,Va=Xi,Ha={empty:!0,space:!0};function wd(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var bd=(function(){function r(o){this.input=o,this.root=new yd,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new gd;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new md;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=vd(this.input)},i.decl=function(e,t){var n=new pd;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||wd(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Va;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!Td[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Nd[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return Tr(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!sr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return sr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=Ed;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new xd(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(sr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Ae];)a[Ae]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||$d("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(sr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ou.isColorSupported),su&&t&&(s=su(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ou.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Zt(Error)),so=oo;oo.default=oo;var qe={};qe.isClean=Symbol("isClean"),qe.my=Symbol("my");var au={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function bp(r){return r[0].toUpperCase()+r.slice(1)}var ao=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),uu=ao;ao.default=ao;var Sp=uu;function uo(r,i){var o=new Sp(i);o.stringify(r)}var an=uo;uo.default=uo;var un=qe.isClean,Cp=qe.my,Ip=so,Op=uu,Rp=an;function fo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return fo(s,o)}):(n==="object"&&t!==null&&(t=fo(t)),o[e]=t)}return o}var lo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[un]=!1,this[Cp]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=fo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new Ip(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[un]){this[un]=!1;for(var e=this;e=e.parent;)e[un]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ho(e),$p(e))return this.mapFile=e,kp(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,fu))return lu.fromSourceMap(t).toString();if(A(t,lu))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=_p(ho(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),cu=po;po.default=po;var Tp=fe.SourceMapConsumer,Np=fe.SourceMapGenerator,hu=fe.fileURLToPath,cn=fe.pathToFileURL,vo=fe.isAbsolute,mo=fe.resolve,Lp=Mp.nanoid,go=fe,du=so,Dp=cu,yo=Symbol("fromOffsetCache"),Fp=!!(Tp&&Np),pu=!!(mo&&vo),hn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!pu||/^\w+:\/\//.test(e.from)||vo(e.from)?this.file=e.from:this.file=mo(e.from)),pu&&Fp){var t=new Dp(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new du(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new du(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(cn&&(a.input.url=cn(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[yo])n=this[yo];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:mo(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;vo(u.source)?l=cn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||cn(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(hu)c.file=hu(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),zp&&Up&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=pn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new pn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new pn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?vn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=vn(gu(n,this.mapOpts.annotation)));var s=mu(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Bp(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(wu){var n=wu(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;yu==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),bu=Wp,jp=fn,wo=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(jp),mn=wo;wo.default=wo;var Su=qe.isClean,Cu=qe.my,Iu=ln,Ou=mn,Gp=fn,Ru,bo,So,xu;function Eu(r){return r.map(function(i){return i.nodes&&(i.nodes=Eu(i.nodes)),delete i.source,i})}function Au(r){if(r[Su]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;Au(e)}}var De=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Gp);De.registerParse=function(r){Ru=r},De.registerRule=function(r){bo=r},De.registerAtRule=function(r){So=r},De.registerRoot=function(r){xu=r};var ot=De;De.default=De,De.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,So.prototype):r.type==="rule"?Object.setPrototypeOf(r,bo.prototype):r.type==="decl"?Object.setPrototypeOf(r,Iu.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ou.prototype):r.type==="root"&&Object.setPrototypeOf(r,xu.prototype),r[Cu]=!0,r.nodes&&r.nodes.forEach(function(i){De.rebuild(i)})};var qp=ot,Mu,$u,fr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new Mu(new $u,this,t);return n.stringify()},i})(qp);fr.registerLazyResult=function(r){Mu=r},fr.registerProcessor=function(r){$u=r};var Co=fr;fr.default=fr;var ku={},_u=function(i){ku[i]||(ku[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Io=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),Pu=Io;Io.default=Io;var Vp=Pu,Oo=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Vp(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ro=Oo;Oo.default=Oo;var xo=39,Tu=34,gn=92,Nu=47,yn=10,lr=32,wn=12,bn=9,Sn=13,Hp=91,Yp=93,Jp=40,Zp=41,Kp=123,Xp=125,Qp=59,ev=42,tv=58,rv=64,Cn=/[\t\n\f\r "#'()/;[\\\]{}]/g,In=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,nv=/.[\r\n"'(/\\]/,Lu=/[\da-f]/i,iv=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case yn:case lr:case bn:case Sn:case wn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===lr||n===yn||n===bn||n===Sn||n===wn);p=["space",e.slice(d,s)],d=s-1;break}case Hp:case Yp:case Kp:case Xp:case tv:case Qp:case Zp:{var N=String.fromCharCode(n);p=[N,N,d];break}case Jp:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==xo&&v!==Tu&&v!==lr&&v!==yn&&v!==bn&&v!==wn&&v!==Sn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===gn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||nv.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case xo:case Tu:{a=n===xo?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===gn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case rv:{Cn.lastIndex=d+1,Cn.test(e),Cn.lastIndex===0?s=e.length-1:s=Cn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case gn:{for(s=d,f=!0;e.charCodeAt(s+1)===gn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Nu&&n!==lr&&n!==yn&&n!==bn&&n!==Sn&&n!==wn&&(s+=1,Lu.test(e.charAt(s)))){for(;Lu.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===lr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Nu&&e.charCodeAt(d+1)===ev?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(In.lastIndex=d+1,In.test(e),In.lastIndex===0?s=e.length-1:s=In.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Du=ot,On=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Bu(new Uu,this,t);return n.stringify()},i})(Fu);Mt.registerLazyResult=function(r){Bu=r},Mt.registerProcessor=function(r){Uu=r};var cr=Mt;Mt.default=Mt,Fu.registerRoot(Mt);var hr={comma:function(i){return hr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return hr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},zu=hr;hr.default=hr;var Wu=ot,ov=zu,Rn=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return ov.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Wu),Ao=Rn;Rn.default=Rn,Wu.registerRule(Rn);var sv=ln,av=iv,uv=mn,fv=Eo,lv=cr,ju=Ao,Gu={empty:!0,space:!0};function cv(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var hv=(function(){function r(o){this.input=o,this.root=new lv,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new fv;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new uv;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=av(this.input)},i.decl=function(e,t){var n=new sv;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||cv(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new ju;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!xv[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Ev[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return Tr(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!dr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return dr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=wv;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new yv(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(dr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Me];)a[Me]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Cv("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(dr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndexi?(e&&(clearTimeout(e),e=null),t=u,r.apply(l,s)):!e&&o.trailing!==!1&&(e=setTimeout(function(){t=o.leading===!1?0:Date.now(),e=null,r.apply(l,s)},f))}}function An(r,i,o,e,t){t===void 0&&(t=window);var n=t.Object.getOwnPropertyDescriptor(r,i);return t.Object.defineProperty(r,i,e?o:{set:function(a){var u=this;setTimeout(function(){o.set.call(u,a)},0),n&&n.set&&n.set.call(this,a)}}),function(){return An(r,i,n||{},!0)}}var Mn=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(Mn=function(){return new Date().getTime()});function af(r){var i,o,e,t,n=r.document;return{left:n.scrollingElement?n.scrollingElement.scrollLeft:r.pageXOffset!==void 0?r.pageXOffset:n.documentElement.scrollLeft||(n==null?void 0:n.body)&&((i=D.parentElement(n.body))==null?void 0:i.scrollLeft)||((o=n==null?void 0:n.body)==null?void 0:o.scrollLeft)||0,top:n.scrollingElement?n.scrollingElement.scrollTop:r.pageYOffset!==void 0?r.pageYOffset:(n==null?void 0:n.documentElement.scrollTop)||(n==null?void 0:n.body)&&((e=D.parentElement(n.body))==null?void 0:e.scrollTop)||((t=n==null?void 0:n.body)==null?void 0:t.scrollTop)||0}}function uf(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function ff(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function lf(r){if(!r)return null;var i=r.nodeType===r.ELEMENT_NODE?r:D.parentElement(r);return i}function ge(r,i,o,e){if(!r)return!1;var t=lf(r);if(!t)return!1;try{if(typeof i=="string"){if(t.classList.contains(i)||e&&t.closest("."+i)!==null)return!0}else if(Br(t,i,e))return!0}catch(n){}return!!(o&&(t.matches(o)||e&&t.closest(o)!==null))}function ym(r,i){return i.getId(r)!==-1}function Do(r,i,o){return r.tagName==="TITLE"&&o.headTitleMutations?!0:i.getId(r)===tr}function cf(r,i){if(Kt(r))return!1;var o=i.getId(r);if(!i.has(o))return!0;var e=D.parentNode(r);return e&&e.nodeType===r.DOCUMENT_NODE?!1:e?cf(e,i):!0}function Fo(r){return!!r.changedTouches}function wm(r){r===void 0&&(r=window),"NodeList"in r&&!r.NodeList.prototype.forEach&&(r.NodeList.prototype.forEach=Array.prototype.forEach),"DOMTokenList"in r&&!r.DOMTokenList.prototype.forEach&&(r.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function hf(r,i){return!!(r.nodeName==="IFRAME"&&i.getMeta(r))}function df(r,i){return!!(r.nodeName==="LINK"&&r.nodeType===r.ELEMENT_NODE&&r.getAttribute&&r.getAttribute("rel")==="stylesheet"&&i.getMeta(r))}function Bo(r){return r?A(r,om)&&"shadowRoot"in r?!!r.shadowRoot:!!D.shadowRoot(r):!1}var bm=(function(){function r(){O(this,"id",1),O(this,"styleIDMap",new WeakMap),O(this,"idStyleMap",new Map)}var i=r.prototype;return i.getId=function(e){var t;return(t=this.styleIDMap.get(e))!=null?t:-1},i.has=function(e){return this.styleIDMap.has(e)},i.add=function(e,t){if(this.has(e))return this.getId(e);var n;return t===void 0?n=this.id++:n=t,this.styleIDMap.set(e,n),this.idStyleMap.set(n,e),n},i.getStyle=function(e){return this.idStyleMap.get(e)||null},i.reset=function(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1},i.generateId=function(){return this.id++},i.remove=function(e){var t=this.styleIDMap.get(e);return t!==void 0?(this.styleIDMap.delete(e),this.idStyleMap.delete(t),!0):!1},r})();function pf(r){var i,o=null;return"getRootNode"in r&&((i=D.getRootNode(r))==null?void 0:i.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&D.host(D.getRootNode(r))&&(o=D.host(D.getRootNode(r))),o}function Sm(r){for(var i=r,o;o=pf(i);)i=o;return i}function Cm(r){var i=r.ownerDocument;if(!i)return!1;var o=Sm(r);return D.contains(i,o)}function vf(r){var i=r.ownerDocument;return i?D.contains(i,r)||Cm(r):!1}var B=(function(r){return r[r.DomContentLoaded=0]="DomContentLoaded",r[r.Load=1]="Load",r[r.FullSnapshot=2]="FullSnapshot",r[r.IncrementalSnapshot=3]="IncrementalSnapshot",r[r.Meta=4]="Meta",r[r.Custom=5]="Custom",r[r.Plugin=6]="Plugin",r})(B||{}),P=(function(r){return r[r.Mutation=0]="Mutation",r[r.MouseMove=1]="MouseMove",r[r.MouseInteraction=2]="MouseInteraction",r[r.Scroll=3]="Scroll",r[r.ViewportResize=4]="ViewportResize",r[r.Input=5]="Input",r[r.TouchMove=6]="TouchMove",r[r.MediaInteraction=7]="MediaInteraction",r[r.StyleSheetRule=8]="StyleSheetRule",r[r.CanvasMutation=9]="CanvasMutation",r[r.Font=10]="Font",r[r.Log=11]="Log",r[r.Drag=12]="Drag",r[r.StyleDeclaration=13]="StyleDeclaration",r[r.Selection=14]="Selection",r[r.AdoptedStyleSheet=15]="AdoptedStyleSheet",r[r.CustomElement=16]="CustomElement",r})(P||{}),we=(function(r){return r[r.MouseUp=0]="MouseUp",r[r.MouseDown=1]="MouseDown",r[r.Click=2]="Click",r[r.ContextMenu=3]="ContextMenu",r[r.DblClick=4]="DblClick",r[r.Focus=5]="Focus",r[r.Blur=6]="Blur",r[r.TouchStart=7]="TouchStart",r[r.TouchMove_Departed=8]="TouchMove_Departed",r[r.TouchEnd=9]="TouchEnd",r[r.TouchCancel=10]="TouchCancel",r})(we||{}),Fe=(function(r){return r[r.Mouse=0]="Mouse",r[r.Pen=1]="Pen",r[r.Touch=2]="Touch",r})(Fe||{}),Pt=(function(r){return r[r["2D"]=0]="2D",r[r.WebGL=1]="WebGL",r[r.WebGL2=2]="WebGL2",r})(Pt||{}),Tt=(function(r){return r[r.Play=0]="Play",r[r.Pause=1]="Pause",r[r.Seeked=2]="Seeked",r[r.VolumeChange=3]="VolumeChange",r[r.RateChange=4]="RateChange",r})(Tt||{}),mf=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(mf||{});function gf(r){return"__ln"in r}var Im=(function(){function r(){O(this,"length",0),O(this,"head",null),O(this,"tail",null)}var i=r.prototype;return i.get=function(e){if(e>=this.length)throw new Error("Position outside of list range");for(var t=this.head,n=0;n=0;i--){var o=$e[i];o.getDoc()===r&&$e.splice(i,1)}}function $m(r){var i=r.mousemoveCb,o=r.sampling,e=r.doc,t=r.mirror;if(o.mousemove===!1)return function(){};var n=typeof o.mousemove=="number"?o.mousemove:50,s=typeof o.mousemoveCallback=="number"?o.mousemoveCallback:500,a=[],u,f=mr(U(function(h){var v=Date.now()-u;i(a.map(function(p){return p.timeOffset-=v,p}),h),a=[],u=null}),s),l=U(mr(U(function(h){var v=yr(h),p=Fo(h)?h.changedTouches[0]:h,m=p.clientX,d=p.clientY;u||(u=Mn()),a.push({x:m,y:d,id:t.getId(v),timeOffset:Mn()-u}),f(typeof DragEvent!="undefined"&&A(h,DragEvent)?P.Drag:A(h,MouseEvent)?P.MouseMove:P.TouchMove)}),n,{trailing:!1})),c=[me("mousemove",l,e),me("touchmove",l,e),me("drag",l,e)];return U(function(){c.forEach(function(h){return h()})})}function km(r){var i=r.mouseInteractionCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling;if(s.mouseInteraction===!1)return function(){};var a=s.mouseInteraction===!0||s.mouseInteraction===void 0?{}:s.mouseInteraction,u=[],f=null,l=function(c){return function(h){var v=yr(h);if(!ge(v,t,n,!0)){var p=null,m=c;if("pointerType"in h){switch(h.pointerType){case"mouse":p=Fe.Mouse;break;case"touch":p=Fe.Touch;break;case"pen":p=Fe.Pen;break}p===Fe.Touch?we[c]===we.MouseDown?m="TouchStart":we[c]===we.MouseUp&&(m="TouchEnd"):Fe.Pen}else Fo(h)&&(p=Fe.Touch);p!==null?(f=p,(m.startsWith("Touch")&&p===Fe.Touch||m.startsWith("Mouse")&&p===Fe.Mouse)&&(p=null)):we[c]===we.Click&&(p=f,f=null);var d=Fo(h)?h.changedTouches[0]:h;if(d){var g=e.getId(v),w=d.clientX,b=d.clientY;U(i)(T({type:we[m],id:g,x:w,y:b},p!==null&&{pointerType:p}))}}}};return Object.keys(we).filter(function(c){return Number.isNaN(Number(c))&&!c.endsWith("_Departed")&&a[c]!==!1}).forEach(function(c){var h=nt(c),v=l(c);if(window.PointerEvent)switch(we[c]){case we.MouseDown:case we.MouseUp:h=h.replace("mouse","pointer");break;case we.TouchStart:case we.TouchEnd:return}u.push(me(h,v,o))}),U(function(){u.forEach(function(c){return c()})})}function If(r){var i=r.scrollCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling,a=U(mr(U(function(u){var f=yr(u);if(!(!f||ge(f,t,n,!0))){var l=e.getId(f);if(f===o&&o.defaultView){var c=af(o.defaultView);i({id:l,x:c.left,y:c.top})}else i({id:l,x:f.scrollLeft,y:f.scrollTop})}}),s.scroll||100));return me("scroll",a,o)}function _m(r,i){var o=r.viewportResizeCb,e=i.win,t=-1,n=-1,s=U(mr(U(function(){var a=uf(),u=ff();(t!==a||n!==u)&&(o({width:Number(u),height:Number(a)}),t=a,n=u)}),200));return me("resize",s,e)}var Pm=["INPUT","TEXTAREA","SELECT"],Of=new WeakMap;function Tm(r){var i=r.inputCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.ignoreClass,a=r.ignoreSelector,u=r.maskInputOptions,f=r.maskInputFn,l=r.sampling,c=r.userTriggeredOnInput;function h(S){var C=yr(S),R=S.isTrusted,E=C&&C.tagName;if(C&&E==="OPTION"&&(C=D.parentElement(C)),!(!C||!E||Pm.indexOf(E)<0||ge(C,t,n,!0))&&!(C.classList.contains(s)||a&&C.matches(a))){var x=C.value,k=!1,N=er(C)||"";N==="radio"||N==="checkbox"?k=C.checked:(u[E.toLowerCase()]||u[N])&&(x=Qt({element:C,maskInputOptions:u,tagName:E,type:N,value:x,maskInputFn:f})),v(C,c?{text:x,isChecked:k,userTriggered:R}:{text:x,isChecked:k});var ae=C.name;N==="radio"&&ae&&k&&o.querySelectorAll('input[type="radio"][name="'+ae+'"]').forEach(function(_){if(_!==C){var L=_.value;v(_,c?{text:L,isChecked:!k,userTriggered:!1}:{text:L,isChecked:!k})}})}}function v(S,C){var R=Of.get(S);if(!R||R.text!==C.text||R.isChecked!==C.isChecked){Of.set(S,C);var E=e.getId(S);U(i)(T({},C,{id:E}))}}var p=l.input==="last"?["change"]:["input","change"],m=p.map(function(S){return me(S,U(h),o)}),d=o.defaultView;if(!d)return function(){m.forEach(function(S){return S()})};var g=d.Object.getOwnPropertyDescriptor(d.HTMLInputElement.prototype,"value"),w=[[d.HTMLInputElement.prototype,"value"],[d.HTMLInputElement.prototype,"checked"],[d.HTMLSelectElement.prototype,"value"],[d.HTMLTextAreaElement.prototype,"value"],[d.HTMLSelectElement.prototype,"selectedIndex"],[d.HTMLOptionElement.prototype,"selected"]];if(g&&g.set){var b;(b=m).push.apply(b,[].concat(w.map(function(S){return An(S[0],S[1],{set:function(){U(h)({target:this,isTrusted:!1})}},!1,d)})))}return U(function(){m.forEach(function(S){return S()})})}function $n(r){var i=[];function o(e,t){if(kn("CSSGroupingRule")&&A(e.parentRule,CSSGroupingRule)||kn("CSSMediaRule")&&A(e.parentRule,CSSMediaRule)||kn("CSSSupportsRule")&&A(e.parentRule,CSSSupportsRule)||kn("CSSConditionRule")&&A(e.parentRule,CSSConditionRule)){var n=Array.from(e.parentRule.cssRules),s=n.indexOf(e);t.unshift(s)}else if(e.parentStyleSheet){var a=Array.from(e.parentStyleSheet.cssRules),u=a.indexOf(e);t.unshift(u)}return t}return o(r,i)}function He(r,i,o){var e,t;return r?(r.ownerNode?e=i.getId(r.ownerNode):t=o.getId(r),{styleId:t,id:e}):{}}function Nm(r,i){var o=r.styleSheetRuleCb,e=r.mirror,t=r.stylesheetManager,n=i.win;if(!n.CSSStyleSheet||!n.CSSStyleSheet.prototype)return function(){};var s=n.CSSStyleSheet.prototype.insertRule;n.CSSStyleSheet.prototype.insertRule=new Proxy(s,{apply:U(function(h,v,p){var m=p[0],d=p[1],g=He(v,e,t.styleMirror),w=g.id,b=g.styleId;return(w&&w!==-1||b&&b!==-1)&&o({id:w,styleId:b,adds:[{rule:m,index:d}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.addRule=function(h,v,p){p===void 0&&(p=this.cssRules.length);var m=h+" { "+v+" }";return n.CSSStyleSheet.prototype.insertRule.apply(this,[m,p])};var a=n.CSSStyleSheet.prototype.deleteRule;n.CSSStyleSheet.prototype.deleteRule=new Proxy(a,{apply:U(function(h,v,p){var m=p[0],d=He(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,removes:[{index:m}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.removeRule=function(h){return n.CSSStyleSheet.prototype.deleteRule.apply(this,[h])};var u;n.CSSStyleSheet.prototype.replace&&(u=n.CSSStyleSheet.prototype.replace,n.CSSStyleSheet.prototype.replace=new Proxy(u,{apply:U(function(h,v,p){var m=p[0],d=He(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replace:m}),h.apply(v,p)})}));var f;n.CSSStyleSheet.prototype.replaceSync&&(f=n.CSSStyleSheet.prototype.replaceSync,n.CSSStyleSheet.prototype.replaceSync=new Proxy(f,{apply:U(function(h,v,p){var m=p[0],d=He(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replaceSync:m}),h.apply(v,p)})}));var l={};_n("CSSGroupingRule")?l.CSSGroupingRule=n.CSSGroupingRule:(_n("CSSMediaRule")&&(l.CSSMediaRule=n.CSSMediaRule),_n("CSSConditionRule")&&(l.CSSConditionRule=n.CSSConditionRule),_n("CSSSupportsRule")&&(l.CSSSupportsRule=n.CSSSupportsRule));var c={};return Object.entries(l).forEach(function(h){var v=h[0],p=h[1];c[v]={insertRule:p.prototype.insertRule,deleteRule:p.prototype.deleteRule},p.prototype.insertRule=new Proxy(c[v].insertRule,{apply:U(function(m,d,g){var w=g[0],b=g[1],S=He(d.parentStyleSheet,e,t.styleMirror),C=S.id,R=S.styleId;return(C&&C!==-1||R&&R!==-1)&&o({id:C,styleId:R,adds:[{rule:w,index:[].concat($n(d),[b||0])}]}),m.apply(d,g)})}),p.prototype.deleteRule=new Proxy(c[v].deleteRule,{apply:U(function(m,d,g){var w=g[0],b=He(d.parentStyleSheet,e,t.styleMirror),S=b.id,C=b.styleId;return(S&&S!==-1||C&&C!==-1)&&o({id:S,styleId:C,removes:[{index:[].concat($n(d),[w])}]}),m.apply(d,g)})})}),U(function(){n.CSSStyleSheet.prototype.insertRule=s,n.CSSStyleSheet.prototype.deleteRule=a,u&&(n.CSSStyleSheet.prototype.replace=u),f&&(n.CSSStyleSheet.prototype.replaceSync=f),Object.entries(l).forEach(function(h){var v=h[0],p=h[1];p.prototype.insertRule=c[v].insertRule,p.prototype.deleteRule=c[v].deleteRule})})}function Rf(r,i){var o=r.mirror,e=r.stylesheetManager,t,n,s,a=null;i.nodeName==="#document"?a=o.getId(i):a=o.getId(D.host(i));var u=i.nodeName==="#document"?(t=i.defaultView)==null?void 0:t.Document:(s=(n=i.ownerDocument)==null?void 0:n.defaultView)==null?void 0:s.ShadowRoot,f=u!=null&&u.prototype?Object.getOwnPropertyDescriptor(u==null?void 0:u.prototype,"adoptedStyleSheets"):void 0;return a===null||a===-1||!u||!f?function(){}:(Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:function(){var c;return(c=f.get)==null?void 0:c.call(this)},set:function(c){var h,v=(h=f.set)==null?void 0:h.call(this,c);if(a!==null&&a!==-1)try{e.adoptStyleSheets(c,a)}catch(p){}return v}}),U(function(){Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:f.get,set:f.set})}))}function Lm(r,i){var o=r.styleDeclarationCb,e=r.mirror,t=r.ignoreCSSAttributes,n=r.stylesheetManager,s=i.win,a=s.CSSStyleDeclaration.prototype.setProperty;s.CSSStyleDeclaration.prototype.setProperty=new Proxy(a,{apply:U(function(f,l,c){var h,v=c[0],p=c[1],m=c[2];if(t.has(v))return a.apply(l,[v,p,m]);var d=He((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,set:{property:v,value:p,priority:m},index:$n(l.parentRule)}),f.apply(l,c)})});var u=s.CSSStyleDeclaration.prototype.removeProperty;return s.CSSStyleDeclaration.prototype.removeProperty=new Proxy(u,{apply:U(function(f,l,c){var h,v=c[0];if(t.has(v))return u.apply(l,[v]);var p=He((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),m=p.id,d=p.styleId;return(m&&m!==-1||d&&d!==-1)&&o({id:m,styleId:d,remove:{property:v},index:$n(l.parentRule)}),f.apply(l,c)})}),U(function(){s.CSSStyleDeclaration.prototype.setProperty=a,s.CSSStyleDeclaration.prototype.removeProperty=u})}function Dm(r){var i=r.mediaInteractionCb,o=r.blockClass,e=r.blockSelector,t=r.mirror,n=r.sampling,s=r.doc,a=U(function(f){return mr(U(function(l){var c=yr(l);if(!(!c||ge(c,o,e,!0))){var h=c.currentTime,v=c.volume,p=c.muted,m=c.playbackRate,d=c.loop;i({type:f,id:t.getId(c),currentTime:h,volume:v,muted:p,playbackRate:m,loop:d})}}),n.media||500)}),u=[me("play",a(Tt.Play),s),me("pause",a(Tt.Pause),s),me("seeked",a(Tt.Seeked),s),me("volumechange",a(Tt.VolumeChange),s),me("ratechange",a(Tt.RateChange),s)];return U(function(){u.forEach(function(f){return f()})})}function Fm(r){var i=r.fontCb,o=r.doc,e=o.defaultView;if(!e)return function(){};var t=[],n=new WeakMap,s=e.FontFace;e.FontFace=function(f,l,c){var h=new s(f,l,c);return n.set(h,{family:f,buffer:typeof l!="string",descriptors:c,fontSource:typeof l=="string"?l:JSON.stringify(Array.from(new Uint8Array(l)))}),h};var a=st(o.fonts,"add",function(u){return function(f){return setTimeout(U(function(){var l=n.get(f);l&&(i(l),n.delete(f))}),0),u.apply(this,[f])}});return t.push(function(){e.FontFace=s}),t.push(a),U(function(){t.forEach(function(u){return u()})})}function Bm(r){var i=r.doc,o=r.mirror,e=r.blockClass,t=r.blockSelector,n=r.selectionCb,s=!0,a=U(function(){var u=i.getSelection();if(!(!u||s&&(u!=null&&u.isCollapsed))){s=u.isCollapsed||!1;for(var f=[],l=u.rangeCount||0,c=0;c0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))},i.handleMessage=function(e){var t=e;if(!(t.data.type!=="rrweb"||t.origin!==t.data.origin)){var n=e.source;if(n){var s=this.crossOriginIframeMap.get(e.source);if(s){var a=this.transformCrossOriginEvent(s,t.data.event);a&&this.wrappedEmit(a,t.data.isCheckout)}}}},i.transformCrossOriginEvent=function(e,t){var n=this,s;switch(t.type){case B.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(t.data.node,e);var a=t.data.node.id;return this.crossOriginIframeRootIdMap.set(e,a),this.patchRootIdOnNode(t.data.node,a),{timestamp:t.timestamp,type:B.IncrementalSnapshot,data:{source:P.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:t.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case B.Meta:case B.Load:case B.DomContentLoaded:return!1;case B.Plugin:return t;case B.Custom:return this.replaceIds(t.data.payload,e,["id","parentId","previousId","nextId"]),t;case B.IncrementalSnapshot:switch(t.data.source){case P.Mutation:return t.data.adds.forEach(function(u){n.replaceIds(u,e,["parentId","nextId","previousId"]),n.replaceIdOnNode(u.node,e);var f=n.crossOriginIframeRootIdMap.get(e);f&&n.patchRootIdOnNode(u.node,f)}),t.data.removes.forEach(function(u){n.replaceIds(u,e,["parentId","id"])}),t.data.attributes.forEach(function(u){n.replaceIds(u,e,["id"])}),t.data.texts.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case P.Drag:case P.TouchMove:case P.MouseMove:return t.data.positions.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case P.ViewportResize:return!1;case P.MediaInteraction:case P.MouseInteraction:case P.Scroll:case P.CanvasMutation:case P.Input:return this.replaceIds(t.data,e,["id"]),t;case P.StyleSheetRule:case P.StyleDeclaration:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleId"]),t;case P.Font:return t;case P.Selection:return t.data.ranges.forEach(function(u){n.replaceIds(u,e,["start","end"])}),t;case P.AdoptedStyleSheet:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleIds"]),(s=t.data.styles)==null||s.forEach(function(u){n.replaceStyleIds(u,e,["styleId"])}),t}}return!1},i.replace=function(e,t,n,s){for(var a=I(s),u;!(u=a()).done;){var f=u.value;!Array.isArray(t[f])&&typeof t[f]!="number"||(Array.isArray(t[f])?t[f]=e.getIds(n,t[f]):t[f]=e.getId(n,t[f]))}return t},i.replaceIds=function(e,t,n){return this.replace(this.crossOriginIframeMirror,e,t,n)},i.replaceStyleIds=function(e,t,n){return this.replace(this.crossOriginIframeStyleMirror,e,t,n)},i.replaceIdOnNode=function(e,t){var n=this;this.replaceIds(e,t,["id","rootId"]),"childNodes"in e&&e.childNodes.forEach(function(s){n.replaceIdOnNode(s,t)})},i.patchRootIdOnNode=function(e,t){var n=this;e.type!==mf.Document&&!e.rootId&&(e.rootId=t),"childNodes"in e&&e.childNodes.forEach(function(s){n.patchRootIdOnNode(s,t)})},r})(),Gm=(function(){function r(o){O(this,"shadowDoms",new WeakSet),O(this,"mutationCb"),O(this,"scrollCb"),O(this,"bypassOptions"),O(this,"mirror"),O(this,"restoreHandlers",[]),this.mutationCb=o.mutationCb,this.scrollCb=o.scrollCb,this.bypassOptions=o.bypassOptions,this.mirror=o.mirror,this.init()}var i=r.prototype;return i.init=function(){this.reset(),this.patchAttachShadow(Element,document)},i.addShadowRoot=function(e,t){var n=this;if(Xt(e)&&!this.shadowDoms.has(e)){this.shadowDoms.add(e);var s=Cf(T({},this.bypassOptions,{doc:t,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(function(){return s.disconnect()}),this.restoreHandlers.push(If(T({},this.bypassOptions,{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(function(){e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&n.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,n.mirror.getId(D.host(e))),n.restoreHandlers.push(Rf({mirror:n.mirror,stylesheetManager:n.bypassOptions.stylesheetManager},e))},0)}},i.observeAttachShadow=function(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)},i.patchAttachShadow=function(e,t){var n=this;this.restoreHandlers.push(st(e.prototype,"attachShadow",function(s){return function(a){var u=s.call(this,a),f=D.shadowRoot(this);return f&&vf(this)&&n.addShadowRoot(f,t),u}}))},i.reset=function(){this.restoreHandlers.forEach(function(e){try{e()}catch(t){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet},r})(),Nt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",qm=typeof Uint8Array=="undefined"?[]:new Uint8Array(256),Pn=0;Pn>2],n+=Nt[(o[e]&3)<<4|o[e+1]>>4],n+=Nt[(o[e+1]&15)<<2|o[e+2]>>6],n+=Nt[o[e+2]&63];return t%3===2?n=n.substring(0,n.length-1)+"=":t%3===1&&(n=n.substring(0,n.length-2)+"=="),n},Ef=new Map;function Hm(r,i){var o=Ef.get(r);return o||(o=new Map,Ef.set(r,o)),o.has(i)||o.set(i,[]),o.get(i)}var Af=function(r,i,o){if(!(!r||!($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"))){var e=r.constructor.name,t=Hm(o,e),n=t.indexOf(r);return n===-1&&(n=t.length,t.push(r)),n}};function Tn(r,i,o){if(A(r,Array))return r.map(function(p){return Tn(p,i,o)});if(r===null)return r;if(A(r,Float32Array)||A(r,Float64Array)||A(r,Int32Array)||A(r,Uint32Array)||A(r,Uint8Array)||A(r,Uint16Array)||A(r,Int16Array)||A(r,Int8Array)||A(r,Uint8ClampedArray)){var e=r.constructor.name;return{rr_type:e,args:[Object.values(r)]}}else if(A(r,ArrayBuffer)){var t=r.constructor.name,n=Vm(r);return{rr_type:t,base64:n}}else if(A(r,DataView)){var s=r.constructor.name;return{rr_type:s,args:[Tn(r.buffer,i,o),r.byteOffset,r.byteLength]}}else if(A(r,HTMLImageElement)){var a=r.constructor.name,u=r.src;return{rr_type:a,src:u}}else if(A(r,HTMLCanvasElement)){var f="HTMLImageElement",l=r.toDataURL();return{rr_type:f,src:l}}else if(A(r,ImageData)){var c=r.constructor.name;return{rr_type:c,args:[Tn(r.data,i,o),r.width,r.height]}}else if($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"){var h=r.constructor.name,v=Af(r,i,o);return{rr_type:h,index:v}}return r}var Mf=function(r,i,o){return r.map(function(e){return Tn(e,i,o)})},$f=function(r,i){var o=["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"],e=o.filter(function(t){return typeof i[t]=="function"});return!!e.find(function(t){return A(r,i[t])})};function Ym(r,i,o,e){for(var t=function(){var f=u.value;try{if(typeof i.CanvasRenderingContext2D.prototype[f]!="function")return"continue";var l=st(i.CanvasRenderingContext2D.prototype,f,function(h){return function(){for(var v=this,p=arguments.length,m=new Array(p),d=0;d1?u-1:0),l=1;l0&&(a.styles=u),this.adoptedStyleSheetCb(a)}},i.reset=function(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet},i.cleanupStylesheetsForRemovedNode=function(e){var t=this;try{if(e.nodeType===Node.DOCUMENT_NODE){var n=e;if(n.adoptedStyleSheets)for(var s=I(n.adoptedStyleSheets),a;!(a=s()).done;){var u=a.value;this.styleMirror.remove(u)}}if(e.nodeName==="STYLE"){var f=e;f.sheet&&this.styleMirror.remove(f.sheet)}if(e.nodeName==="LINK"&&e.rel==="stylesheet"){var l=e;l.sheet&&this.styleMirror.remove(l.sheet)}e.childNodes&&e.childNodes.forEach(function(c){t.cleanupStylesheetsForRemovedNode(c)})}catch(c){}},i.trackStylesheetInLinkElement=function(e){},r})(),tg=(function(){function r(){O(this,"nodeMap",new WeakMap),O(this,"active",!1)}var i=r.prototype;return i.inOtherBuffer=function(e,t){var n=this.nodeMap.get(e);return n&&Array.from(n).some(function(s){return s!==t})},i.add=function(e,t){var n=this;this.active||(this.active=!0,requestAnimationFrame(function(){n.nodeMap=new WeakMap,n.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(t))},i.destroy=function(){},r})();function rg(r){try{var i=new URL(r).origin;return i!=="null"?i:null}catch(o){return null}}function ng(r){if(!Array.isArray(r)||r.length===0)throw new Error("[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.");for(var i=new Set,o=0;o0&&(vt=ng(de),vt.size===0&&(vt=void 0));var mt=ie?window.parent===window:!0,gt=!1;if(!mt)try{window.parent.document&&(gt=!1)}catch(W){gt=!0}if(mt&&!i)throw new Error("emit function is required");if(!mt&&!gt)return function(){};L!==void 0&&N.mousemove===void 0&&(N.mousemove=L),xe.reset();var yt=w===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:b!==void 0?b:{password:!0},wt=S===!0||S==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:S==="all",headMetaDescKeywords:S==="all",headTitleMutations:S==="all"}:S||{};wm();var ze,Yt=0,yc=function(W){for(var ye=I(et||[]),$;!($=ye()).done;){var J=$.value;J.eventProcessor&&(W=J.eventProcessor(W))}return x&&!gt&&(W=x(W)),W};se=function(W,ye){var $,J=W;if(J.timestamp=Mn(),($=$e[0])!=null&&$.isFrozen()&&J.type!==B.FullSnapshot&&!(J.type===B.IncrementalSnapshot&&J.data.source===P.Mutation)&&$e.forEach(function(pb){return pb.unfreeze()}),mt)i==null||i(yc(J),ye);else if(gt){var Ct={type:"rrweb",event:yc(J),origin:window.location.origin,isCheckout:ye};if(vt)for(var Us=I(vt),Oc;!(Oc=Us()).done;){var cb=Oc.value;window.parent.postMessage(Ct,cb)}else window.parent.postMessage(Ct,"*")}if(J.type===B.FullSnapshot)ze=J,Yt=0;else if(J.type===B.IncrementalSnapshot){if(J.data.source===P.Mutation&&J.data.isAttachIframe)return;Yt++;var hb=e&&Yt>=e,db=o&&J.timestamp-ze.timestamp>o;(hb||db)&&Nn(!0)}};for(var wi=function(W){se({type:B.IncrementalSnapshot,data:T({source:P.Mutation},W)})},wc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:P.Scroll},W)})},bc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:P.CanvasMutation},W)})},fb=function(W){return se({type:B.IncrementalSnapshot,data:T({source:P.AdoptedStyleSheet},W)})},bt=new eg({mutationCb:wi,adoptedStyleSheetCb:fb}),We=new jm({mirror:xe,mutationCb:wi,stylesheetManager:bt,recordCrossOriginIframes:ie,wrappedEmit:se}),lb=I(et||[]),Sc;!(Sc=lb()).done;){var Cc=Sc.value;Cc.getMirror&&Cc.getMirror({nodeMirror:xe,crossOriginIframeMirror:We.crossOriginIframeMirror,crossOriginIframeStyleMirror:We.crossOriginIframeStyleMirror})}var Fs=new tg;zo=new Qm({recordCanvas:be,mutationCb:bc,win:window,blockClass:n,blockSelector:a,mirror:xe,sampling:N.canvas,dataURLOptions:_});var bi=new Gm({mutationCb:wi,scrollCb:wc,bypassOptions:{blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskInputOptions:yt,dataURLOptions:_,maskTextFn:R,maskInputFn:C,recordCanvas:be,inlineImages:Vt,sampling:N,slimDOMOptions:wt,iframeManager:We,stylesheetManager:bt,canvasManager:zo,keepIframeSrcFn:Ht,processedNodeManager:Fs},mirror:xe});Nn=function(W){if(W===void 0&&(W=!1),!!z){se({type:B.Meta,data:{href:window.location.href,width:ff(),height:uf()}},W),bt.reset(),bi.init(),$e.forEach(function($){return $.lock()});var ye=Ch(document,{mirror:xe,blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskAllInputs:yt,maskTextFn:R,maskInputFn:C,slimDOM:wt,dataURLOptions:_,recordCanvas:be,inlineImages:Vt,onSerialize:function($){hf($,xe)&&We.addIframe($),df($,xe)&&bt.trackLinkElement($),Bo($)&&bi.addShadowRoot(D.shadowRoot($),document)},onIframeLoad:function($,J){We.attachIframe($,J),bi.observeAttachShadow($)},onStylesheetLoad:function($,J){bt.attachLinkElement($,J)},keepIframeSrcFn:Ht});if(!ye)return console.warn("Failed to snapshot the document");se({type:B.FullSnapshot,data:{node:ye,initialOffset:af(window)}},W),$e.forEach(function($){return $.unlock()}),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&bt.adoptStyleSheets(document.adoptedStyleSheets,xe.getId(document))}};try{var St=[],Ic=function(W){var ye;return U(Wm)({mutationCb:wi,mousemoveCb:function($,J){return se({type:B.IncrementalSnapshot,data:{source:J,positions:$}})},mouseInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.MouseInteraction},$)})},scrollCb:wc,viewportResizeCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.ViewportResize},$)})},inputCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.Input},$)})},mediaInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.MediaInteraction},$)})},styleSheetRuleCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.StyleSheetRule},$)})},styleDeclarationCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.StyleDeclaration},$)})},canvasMutationCb:bc,fontCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:P.Font},$)})},selectionCb:function($){se({type:B.IncrementalSnapshot,data:T({source:P.Selection},$)})},customElementCb:function($){se({type:B.IncrementalSnapshot,data:T({source:P.CustomElement},$)})},blockClass:n,ignoreClass:f,ignoreSelector:c,maskTextClass:v,maskTextSelector:m,maskInputOptions:yt,inlineStylesheet:g,sampling:N,recordDOM:z,recordCanvas:be,inlineImages:Vt,userTriggeredOnInput:Re,collectFonts:j,doc:W,maskInputFn:C,maskTextFn:R,keepIframeSrcFn:Ht,blockSelector:a,slimDOMOptions:wt,dataURLOptions:_,mirror:xe,iframeManager:We,stylesheetManager:bt,shadowDomManager:bi,processedNodeManager:Fs,canvasManager:zo,ignoreCSSAttributes:yi,plugins:((ye=et==null?void 0:et.filter(function($){return $.observer}))==null?void 0:ye.map(function($){return{observer:$.observer,options:$.options,callback:function(J){return se({type:B.Plugin,data:{plugin:$.name,payload:J}})}}}))||[]},E)};We.addLoadListener(function(W){try{var ye=W.contentDocument,$=Ic(ye);St.push($);var J=We.getObserverCleanup(W);We.setObserverCleanup(W,function(){if(J)try{J()}catch(Us){}try{$();var Ct=St.indexOf($);Ct!==-1&&St.splice(Ct,1),Mm(ye)}catch(Us){}})}catch(Ct){console.warn(Ct)}});var Bs=function(){Nn(),St.push(Ic(document)),Ln=!0};return document.readyState==="interactive"||document.readyState==="complete"?Bs():(St.push(me("DOMContentLoaded",function(){se({type:B.DomContentLoaded,data:{}}),Ne==="DOMContentLoaded"&&Bs()})),St.push(me("load",function(){se({type:B.Load,data:{}}),Ne==="load"&&Bs()},window))),function(){St.forEach(function(W){try{W()}catch($){var ye=String($).toLowerCase();ye.includes("cross-origin")||console.warn($)}}),Fs.destroy(),Ln=!1,Am()}}catch(W){console.warn(W)}}Ye.addCustomEvent=function(r,i){if(!Ln)throw new Error("please add custom event after start recording");se({type:B.Custom,data:{tag:r,payload:i}})},Ye.freezePage=function(){$e.forEach(function(r){return r.freeze()})},Ye.takeFullSnapshot=function(r){if(!Ln)throw new Error("please take full snapshot after start recording");Nn(r)},Ye.mirror=xe;var Nf;(function(r){r[r.NotStarted=0]="NotStarted",r[r.Running=1]="Running",r[r.Stopped=2]="Stopped"})(Nf||(Nf={})),Ye.addCustomEvent,Ye.freezePage,Ye.takeFullSnapshot;var Lf={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Df={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Dn={},ig=function(){return!!globalThis.Zone};function jo(r){if(Dn[r])return Dn[r];var i=globalThis[r],o=i.prototype,e=r in Lf?Lf[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Df?Df[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!ig())return Dn[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Dn[r]=f:o}catch(l){return o}}var Go={};function Je(r,i,o){var e,t=r+"."+String(o);if(Go[t])return Go[t].call(i);var n=jo(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(Go[t]=s,s.call(i)):i[o]}var qo={};function Ff(r,i,o){var e=r+"."+String(o);if(qo[e])return qo[e].bind(i);var t=jo(r),n=t[o];return typeof n!="function"?i[o]:(qo[e]=n,n.bind(i))}function og(r){return Je("Node",r,"childNodes")}function sg(r){return Je("Node",r,"parentNode")}function ag(r){return Je("Node",r,"parentElement")}function ug(r){return Je("Node",r,"textContent")}function fg(r,i){return Ff("Node",r,"contains")(i)}function lg(r){return Ff("Node",r,"getRootNode")()}function cg(r){return!r||!("host"in r)?null:Je("ShadowRoot",r,"host")}function hg(r){return r.styleSheets}function dg(r){return!r||!("shadowRoot"in r)?null:Je("Element",r,"shadowRoot")}function pg(r,i){return Je("Element",r,"querySelector")(i)}function vg(r,i){return Je("Element",r,"querySelectorAll")(i)}function mg(){return jo("MutationObserver").constructor}function gg(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var Bf={childNodes:og,parentNode:sg,parentElement:ag,textContent:ug,contains:fg,getRootNode:lg,host:cg,styleSheets:hg,shadowRoot:dg,querySelector:pg,querySelectorAll:vg,mutationObserver:mg,patch:gg};function Vo(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return Vo(Bf.parentNode(r),i);for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return Vo(Bf.parentNode(r),i)}function yg(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function wg(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Ho={exports:{}},Q=String,Uf=function(){return{isColorSupported:!1,reset:Q,bold:Q,dim:Q,italic:Q,underline:Q,inverse:Q,hidden:Q,strikethrough:Q,black:Q,red:Q,green:Q,yellow:Q,blue:Q,magenta:Q,cyan:Q,white:Q,gray:Q,bgBlack:Q,bgRed:Q,bgGreen:Q,bgYellow:Q,bgBlue:Q,bgMagenta:Q,bgCyan:Q,bgWhite:Q}};Ho.exports=Uf(),Ho.exports.createColors=Uf;var bg=Ho.exports,Sg={},Cg=Object.freeze(Object.defineProperty({__proto__:null,default:Sg},Symbol.toStringTag,{value:"Module"})),le=wg(Cg),zf=bg,Wf=le,Yo=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=zf.isColorSupported),Wf&&t&&(s=Wf(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=zf.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Zt(Error)),Jo=Yo;Yo.default=Yo;var Ze={};Ze.isClean=Symbol("isClean"),Ze.my=Symbol("my");var jf={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Ig(r){return r[0].toUpperCase()+r.slice(1)}var Zo=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),Gf=Zo;Zo.default=Zo;var Og=Gf;function Ko(r,i){var o=new Og(i);o.stringify(r)}var Fn=Ko;Ko.default=Ko;var Bn=Ze.isClean,Rg=Ze.my,xg=Jo,Eg=Gf,Ag=Fn;function Xo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Xo(s,o)}):(n==="object"&&t!==null&&(t=Xo(t)),o[e]=t)}return o}var Qo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[Bn]=!1,this[Rg]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Xo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new xg(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[Bn]){this[Bn]=!1;for(var e=this;e=e.parent;)e[Bn]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ts(e),Pg(e))return this.mapFile=e,Tg(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,qf))return Vf.fromSourceMap(t).toString();if(A(t,Vf))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Ng(ts(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),Hf=rs;rs.default=rs;var Dg=le.SourceMapConsumer,Fg=le.SourceMapGenerator,Yf=le.fileURLToPath,Wn=le.pathToFileURL,ns=le.isAbsolute,is=le.resolve,Bg=_g.nanoid,os=le,Jf=Jo,Ug=Hf,ss=Symbol("fromOffsetCache"),zg=!!(Dg&&Fg),Zf=!!(is&&ns),jn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!Zf||/^\w+:\/\//.test(e.from)||ns(e.from)?this.file=e.from:this.file=is(e.from)),Zf&&zg){var t=new Ug(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new Jf(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new Jf(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(Wn&&(a.input.url=Wn(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[ss])n=this[ss];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:is(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;ns(u.source)?l=Wn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Wn(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(Yf)c.file=Yf(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Gg&&jg&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=qn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new qn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new qn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?Vn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=Vn(Qf(n,this.mapOpts.annotation)));var s=Xf(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Wg(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(tl){var n=tl(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;el==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),rl=qg,Vg=Un,as=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Vg),Hn=as;as.default=as;var nl=Ze.isClean,il=Ze.my,ol=zn,sl=Hn,Hg=Un,al,us,fs,ul;function fl(r){return r.map(function(i){return i.nodes&&(i.nodes=fl(i.nodes)),delete i.source,i})}function ll(r){if(r[nl]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ll(e)}}var Be=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Hg);Be.registerParse=function(r){al=r},Be.registerRule=function(r){us=r},Be.registerAtRule=function(r){fs=r},Be.registerRoot=function(r){ul=r};var at=Be;Be.default=Be,Be.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,fs.prototype):r.type==="rule"?Object.setPrototypeOf(r,us.prototype):r.type==="decl"?Object.setPrototypeOf(r,ol.prototype):r.type==="comment"?Object.setPrototypeOf(r,sl.prototype):r.type==="root"&&Object.setPrototypeOf(r,ul.prototype),r[il]=!0,r.nodes&&r.nodes.forEach(function(i){Be.rebuild(i)})};var Yg=at,cl,hl,wr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new cl(new hl,this,t);return n.stringify()},i})(Yg);wr.registerLazyResult=function(r){cl=r},wr.registerProcessor=function(r){hl=r};var ls=wr;wr.default=wr;var dl={},pl=function(i){dl[i]||(dl[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},cs=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),vl=cs;cs.default=cs;var Jg=vl,hs=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Jg(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),ds=hs;hs.default=hs;var ps=39,ml=34,Yn=92,gl=47,Jn=10,br=32,Zn=12,Kn=9,Xn=13,Zg=91,Kg=93,Xg=40,Qg=41,ey=123,ty=125,ry=59,ny=42,iy=58,oy=64,Qn=/[\t\n\f\r "#'()/;[\\\]{}]/g,ei=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,sy=/.[\r\n"'(/\\]/,yl=/[\da-f]/i,ay=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Jn:case br:case Kn:case Xn:case Zn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===br||n===Jn||n===Kn||n===Xn||n===Zn);p=["space",e.slice(d,s)],d=s-1;break}case Zg:case Kg:case ey:case ty:case iy:case ry:case Qg:{var N=String.fromCharCode(n);p=[N,N,d];break}case Xg:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==ps&&v!==ml&&v!==br&&v!==Jn&&v!==Kn&&v!==Zn&&v!==Xn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Yn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||sy.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case ps:case ml:{a=n===ps?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Yn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case oy:{Qn.lastIndex=d+1,Qn.test(e),Qn.lastIndex===0?s=e.length-1:s=Qn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Yn:{for(s=d,f=!0;e.charCodeAt(s+1)===Yn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==gl&&n!==br&&n!==Jn&&n!==Kn&&n!==Xn&&n!==Zn&&(s+=1,yl.test(e.charAt(s)))){for(;yl.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===br&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===gl&&e.charCodeAt(d+1)===ny?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(ei.lastIndex=d+1,ei.test(e),ei.lastIndex===0?s=e.length-1:s=ei.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},wl=at,ti=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Sl(new Cl,this,t);return n.stringify()},i})(bl);Lt.registerLazyResult=function(r){Sl=r},Lt.registerProcessor=function(r){Cl=r};var Sr=Lt;Lt.default=Lt,bl.registerRoot(Lt);var Cr={comma:function(i){return Cr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return Cr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},Il=Cr;Cr.default=Cr;var Ol=at,uy=Il,ri=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return uy.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Ol),ms=ri;ri.default=ri,Ol.registerRule(ri);var fy=zn,ly=ay,cy=Hn,hy=vs,dy=Sr,Rl=ms,xl={empty:!0,space:!0};function py(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var vy=(function(){function r(o){this.input=o,this.root=new dy,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new hy;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new cy;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=ly(this.input)},i.decl=function(e,t){var n=new fy;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||py(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Rl;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!My[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!$y[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return Tr(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!Ir(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return Ir(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=Cy;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new Sy(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(Ir(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[ke];)a[ke]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Ry("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(Ir(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var t=e.replace(/^\s+/,"").replace(/\(eval code/g,"("),n=t.match(/ (\((.+):(\d+):(\d+)\)$)/);t=n?t.replace(n[0],""):t;var s=t.split(/\s+/).slice(1),a=this.extractLocation(n?n[1]:s.pop()),u=s.join(" ")||void 0,f=["eval",""].indexOf(a[0])>-1?void 0:a[0];return new Bt({functionName:u,fileName:f,lineNumber:a[1],columnNumber:a[2]})},this)},parseFFOrSafari:function(i){var o=i.stack.split("\n").filter(function(e){return!e.match(hw)},this);return o.map(function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new Bt({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),s=n&&n[1]?n[1]:void 0,a=this.extractLocation(e.replace(t,""));return new Bt({functionName:s,fileName:a[0],lineNumber:a[1],columnNumber:a[2]})},this)},parseOpera:function(i){return!i.stacktrace||i.message.indexOf("\n")>-1&&i.message.split("\n").length>i.stacktrace.split("\n").length?this.parseOpera9(i):i.stack?this.parseOpera11(i):this.parseOpera10(i)},parseOpera9:function(i){for(var o=/Line (\d+).*script (?:in )?(\S+)/i,e=i.message.split("\n"),t=[],n=2,s=e.length;n/,"$2").replace(/\([^)]*\)/g,"")||void 0;return new Bt({functionName:a,fileName:n[0],lineNumber:n[1],columnNumber:n[2]})},this)}};function dw(r){if(!r||!r.outerHTML)return"";for(var i="";r.parentElement;){var o=r.localName;if(!o)break;o=o.toLowerCase();var e=r.parentElement,t=[];if(e.children&&e.children.length>0)for(var n=0;n1&&(o+=":eq("+t.indexOf(r)+")"),i=o+(i?">"+i:""),r=e}return i}function Is(r){return Object.prototype.toString.call(r)==="[object Object]"}function Fl(r,i){if(i===0)return!0;for(var o=Object.keys(r),e=I(o),t;!(t=e()).done;){var n=t.value;if(Is(r[n])&&Fl(r[n],i-1))return!0}return!1}function Ut(r,i){var o={numOfKeysLimit:50,depthOfLimit:4};Object.assign(o,i);var e=[],t=[];return JSON.stringify(r,function(a,u){if(e.length>0){var f=e.indexOf(this);~f?e.splice(f+1):e.push(this),~f?t.splice(f,1/0,a):t.push(a),~e.indexOf(u)&&(e[0]===u?u="[Circular ~]":u="[Circular ~."+t.slice(0,e.indexOf(u)).join(".")+"]")}else e.push(u);if(u===null)return u;if(u===void 0)return"undefined";if(n(u))return s(u);if((typeof u=="undefined"?"undefined":M(u))==="bigint")return u.toString()+"n";if(A(u,Event)){var l={};for(var c in u){var h=u[c];Array.isArray(h)?l[c]=dw(h.length?h[0]:null):l[c]=h}return l}else{if(A(u,Node))return A(u,HTMLElement)?u?u.outerHTML:"":u.nodeName;if(A(u,Error))return u.stack?u.stack+"\nEnd of stack for Error object":u.name+": "+u.message}return u});function n(a){return!!(Is(a)&&Object.keys(a).length>o.numOfKeysLimit||typeof a=="function"||Is(a)&&Fl(a,o.depthOfLimit))}function s(a){var u=a.toString();return o.stringLengthLimit&&u.length>o.stringLengthLimit&&(u=""+u.slice(0,o.stringLengthLimit)+"..."),u}}var Bl={level:["assert","clear","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],lengthThreshold:1e3,logger:"console"};function pw(r,i,o){var e=o?Object.assign({},Bl,o):Bl,t=e.logger;if(!t)return function(){};var n;typeof t=="string"?n=i[t]:n=t;var s=0,a=!1,u=[];if(e.level.includes("error")){var f=function(m){var d=m.message,g=m.error,w=Cs.parse(g).map(function(S){return S.toString()}),b=[Ut(d,e.stringifyOptions)];r({level:"error",trace:w,payload:b})};i.addEventListener("error",f),u.push(function(){i.removeEventListener("error",f)});var l=function(m){var d,g;A(m.reason,Error)?(d=m.reason,g=[Ut("Uncaught (in promise) "+d.name+": "+d.message,e.stringifyOptions)]):(d=new Error,g=[Ut("Uncaught (in promise)",e.stringifyOptions),Ut(m.reason,e.stringifyOptions)]);var w=Cs.parse(d).map(function(b){return b.toString()});r({level:"error",trace:w,payload:g})};i.addEventListener("unhandledrejection",l),u.push(function(){i.removeEventListener("unhandledrejection",l)})}for(var c=I(e.level),h;!(h=c()).done;){var v=h.value;u.push(p(n,v))}return function(){u.forEach(function(m){return m()})};function p(m,d){var g=this;return m[d]?lw(m,d,function(w){var b=g;return function(){for(var S=arguments.length,C=new Array(S),R=0;R0&&oi(xs,o))}catch(e){xr.call(new ql(o),e)}}}function xr(r){var i=this;i.triggered||(i.triggered=!0,i.def&&(i=i.def),i.msg=r,i.state=2,i.chain.length>0&&oi(xs,i))}function Gl(r,i,o,e){for(var t=0;t0&&(i[e]=o)}),i},y.truncate=function(r,i){var o;return typeof r=="string"?o=r.slice(0,i):y.isArray(r)?(o=[],y.each(r,function(e){o.push(y.truncate(e,i))})):y.isObject(r)?(o={},y.each(r,function(e,t){o[t]=y.truncate(e,i)})):o=r,o},y.JSONEncode=(function(){return function(r){var i=r,o=function(t){var n=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return n.lastIndex=0,n.test(t)?'"'+t.replace(n,function(a){var u=s[a];return typeof u=="string"?u:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'},e=function(t,n){var s="",a=" ",u=0,f="",l="",c=0,h=s,v=[],p=n[t];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(t)),typeof p){case"string":return o(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(s+=a,v=[],Er.apply(p)==="[object Array]"){for(c=p.length,u=0;u="0"&&i<="9";)p+=i,n();if(i===".")for(p+=".";n()&&i>="0"&&i<="9";)p+=i;if(i==="e"||i==="E")for(p+=i,n(),(i==="-"||i==="+")&&(p+=i,n());i>="0"&&i<="9";)p+=i,n();if(v=+p,!isFinite(v))t("Bad number");else return v},a=function(){var v,p,m="",d;if(i==='"')for(;n();){if(i==='"')return n(),m;if(i==="\\")if(n(),i==="u"){for(d=0,p=0;p<4&&(v=parseInt(n(),16),!!isFinite(v));p+=1)d=d*16+v;m+=String.fromCharCode(d)}else if(typeof o[i]=="string")m+=o[i];else break;else m+=i}t("Bad string")},u=function(){for(;i&&i<=" ";)n()},f=function(){switch(i){case"t":return n("t"),n("r"),n("u"),n("e"),!0;case"f":return n("f"),n("a"),n("l"),n("s"),n("e"),!1;case"n":return n("n"),n("u"),n("l"),n("l"),null}t('Unexpected "'+i+'"')},l,c=function(){var v=[];if(i==="["){if(n("["),u(),i==="]")return n("]"),v;for(;i;){if(v.push(l()),u(),i==="]")return n("]"),v;n(","),u()}}t("Bad array")},h=function(){var v,p={};if(i==="{"){if(n("{"),u(),i==="}")return n("}"),p;for(;i;){if(v=a(),u(),n(":"),Object.hasOwnProperty.call(p,v)&&t('Duplicate key "'+v+'"'),p[v]=l(),u(),i==="}")return n("}"),p;n(","),u()}}t("Bad object")};return l=function(){switch(u(),i){case"{":return h();case"[":return c();case'"':return a();case"-":return s();default:return i>="0"&&i<="9"?s():f()}},function(v){var p;return e=v,r=0,i=" ",p=l(),u(),i&&t("Syntax error"),p}})(),y.base64Encode=function(r){var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o,e,t,n,s,a,u,f,l=0,c=0,h="",v=[];if(!r)return r;r=y.utf8Encode(r);do o=r.charCodeAt(l++),e=r.charCodeAt(l++),t=r.charCodeAt(l++),f=o<<16|e<<8|t,n=f>>18&63,s=f>>12&63,a=f>>6&63,u=f&63,v[c++]=i.charAt(n)+i.charAt(s)+i.charAt(a)+i.charAt(u);while(l127&&s<2048?a=String.fromCharCode(s>>6|192,s&63|128):a=String.fromCharCode(s>>12|224,s>>6&63|128,s&63|128),a!==null&&(e>o&&(i+=r.substring(o,e)),i+=a,o=e=n+1)}return e>o&&(i+=r.substring(o,r.length)),i},y.UUID=function(){try{return H.crypto.randomUUID()}catch(o){for(var r=new Array(36),i=0;i<36;i++)r[i]=Math.floor(Math.random()*16);return r[14]=4,r[19]=r[19]&=-5,r[19]=r[19]|=8,r[8]=r[13]=r[18]=r[23]="-",y.map(r,function(e){return e.toString(16)}).join("")}};var Xl=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];y.isBlockedUA=function(r){var i;for(r=r.toLowerCase(),i=0;i=0}function e(t){if(!Se.getElementsByTagName)return[];var n=t.split(" "),s,a,u,f,l,c,h,v,p,m,d=[Se];for(c=0;c-1){a=s.split("#"),u=a[0];var g=a[1],w=Se.getElementById(g);if(!w||u&&w.nodeName.toLowerCase()!=u)return[];d=[w];continue}if(s.indexOf(".")>-1){a=s.split("."),u=a[0];var b=a[1];for(u||(u="*"),f=[],l=0,h=0;h-1};break;default:x=function(k){return k.getAttribute(C)}}for(d=[],m=0,h=0;h=3?i[2]:""},currentUrl:function(){return H.location.href},properties:function(r){return typeof r!="object"&&(r={}),y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Mr),$referrer:Se.referrer,$referring_domain:y.info.referringDomain(Se.referrer),$device:y.info.device(ft)}),{$current_url:y.info.currentUrl(),$browser_version:y.info.browserVersion(ft,zt.vendor,Mr),$screen_height:Yl.height,$screen_width:Yl.width,mp_lib:"web",$lib_version:Si.LIB_VERSION,$insert_id:_s(),time:y.timestamp()/1e3},y.strip_empty_properties(r))},people_properties:function(){return y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Mr)}),{$browser_version:y.info.browserVersion(ft,zt.vendor,Mr)})},mpPageViewProperties:function(){return y.strip_empty_properties({current_page_title:Se.title,current_domain:H.location.hostname,current_url_path:H.location.pathname,current_url_protocol:H.location.protocol,current_url_search:H.location.search})}};var Ew=function(r,i){var o=null,e=[];return function(t){var n=this;return e.push(t),o||(o=new F(function(s){setTimeout(function(){var a=r.apply(n,[e]);o=null,e=[],s(a)},i)})),o}},_s=function(r){var i=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return r?i.substring(0,r):i},Aw=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Mw=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,tc=function(r){var i=Mw,o=r.split("."),e=o[o.length-1];(e.length>4||e==="com"||e==="org")&&(i=Aw);var t=r.match(i);return t?t[0]:""},$w=function(){var r=H.navigator.onLine;return y.isUndefined(r)||r},Ps=function(){},rc=function(r,i){for(var o=!1,e=0;e=16.4&&t<16.6)};y.info=y.info,y.info.browser=y.info.browser,y.info.browserVersion=y.info.browserVersion,y.info.device=y.info.device,y.info.properties=y.info.properties,y.isBlockedUA=y.isBlockedUA,y.isEmptyObject=y.isEmptyObject,y.isObject=y.isObject,y.JSONDecode=y.JSONDecode,y.JSONEncode=y.JSONEncode,y.toArray=y.toArray,y.NPO=Xe;var _e=function(r,i,o){this.dbName=r,this.storeName=i,this.version=o.version,this.storeNamesInDb=o.storeNames,this.dbPromise=null};_e.prototype._openDb=function(){var r=this.dbName,i=this.version,o=this.storeNamesInDb;return new F(function(e,t){var n=H.indexedDB.open(r,i);n.onerror=function(){t(n.error)},n.onsuccess=function(){e(n.result)},n.onupgradeneeded=function(s){var a=s.target.result;o.forEach(function(u){a.objectStoreNames.contains(u)||a.createObjectStore(u)})}})},_e.prototype.init=function(){return H.indexedDB?(this.dbPromise||(this.dbPromise=this._openDb()),this.dbPromise.then(function(r){return r instanceof H.IDBDatabase?F.resolve():F.reject(r)})):F.reject("indexedDB is not supported in this browser")},_e.prototype.isInitialized=function(){return!!this.dbPromise},_e.prototype.makeTransaction=function(r,i){var o=this.storeName,e=function(t){return new F(function(n,s){var a=t.transaction(o,r);a.oncomplete=function(){n(a)},a.onabort=a.onerror=function(){s(a.error)},i(a.objectStore(o))})};return this.dbPromise.then(e).catch(function(t){return t&&t.name==="InvalidStateError"?(this.dbPromise=this._openDb(),this.dbPromise.then(e)):F.reject(t)}.bind(this))},_e.prototype.setItem=function(r,i){return this.makeTransaction("readwrite",function(o){o.put(i,r)})},_e.prototype.getItem=function(r){var i;return this.makeTransaction("readonly",function(o){i=o.get(r)}).then(function(){return i.result})},_e.prototype.removeItem=function(r){return this.makeTransaction("readwrite",function(i){i.delete(r)})},_e.prototype.getAll=function(){var r;return this.makeTransaction("readonly",function(i){r=i.getAll()}).then(function(){return r.result})};var nc="mixpanelBrowserDb",ic="mixpanelRecordingEvents",oc="mixpanelRecordingRegistry",sc={version:1,storeNames:[ic,oc]},_w="__mp_opt_in_out_";function Pw(r,i){if(Fw(i))return Oe.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'),!0;var o=ac(r,i)==="0";return o&&Oe.warn("You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data."),o}function Tw(r){return Bw(r,function(i){return this.get_config(i)})}function Nw(r){return r=r||{},r.persistenceType==="localStorage"?y.localStorage:y.cookie}function Lw(r,i){return i=i||{},(i.persistencePrefix||_w)+r}function ac(r,i){return Nw(i).get(Lw(r,i))}function Dw(r,i,o){if(i!=="localStorage")return i;var e=Wt($r())?"localStorage":"cookie",t=ac(r,{persistenceType:e,persistencePrefix:o})!==null;return t?e:e==="localStorage"?"cookie":"localStorage"}function Fw(r){if(r&&r.ignoreDnt)return!1;var i=r&&r.window||H,o=i.navigator||{},e=!1;return y.each([o.doNotTrack,o.msDoNotTrack,i.doNotTrack],function(t){y.includes([!0,1,"1","yes"],t)&&(e=!0)}),e}function Bw(r,i){return function(){var o=!1;try{var e=i.call(this,"token"),t=i.call(this,"ignore_dnt"),n=i.call(this,"opt_out_tracking_persistence_type"),s=i.call(this,"opt_out_tracking_cookie_prefix"),a=i.call(this,"window");e&&(o=Pw(e,{ignoreDnt:t,persistenceType:Dw(e,n,s),persistencePrefix:s,window:a}))}catch(f){Oe.error("Unexpected error when checking tracking opt-out status: "+f)}if(!o)return r.apply(this,arguments);var u=arguments[arguments.length-1];typeof u=="function"&&u(0)}}var Uw=lt("lock"),uc=function(r,i){i=i||{},this.storageKey=r,this.storage=i.storage||$r(),this.pollIntervalMS=i.pollIntervalMS||100,this.timeoutMS=i.timeoutMS||2e3,this.promiseImpl=i.promiseImpl||F};uc.prototype.withLock=function(r,i){var o=this.promiseImpl;return new o(y.bind(function(e,t){var n=i||new Date().getTime()+"|"+Math.random(),s=new Date().getTime(),a=this.storageKey,u=this.pollIntervalMS,f=this.timeoutMS,l=this.storage,c=a+":X",h=a+":Y",v=a+":Z",p=function(b){if(new Date().getTime()-s>f){Uw.error("Timeout waiting for mutex on "+a+"; clearing lock. ["+n+"]"),l.removeItem(v),l.removeItem(h),g();return}setTimeout(function(){try{b()}catch(S){t(S)}},u*(Math.random()+.1))},m=function(b,S){b()?S():p(function(){m(b,S)})},d=function(){var b=l.getItem(h);return b&&b!==n?!1:(l.setItem(h,n),l.getItem(h)===n?!0:(Wt(l,!0)||t(new Error("localStorage support dropped while acquiring lock")),!1))},g=function(){l.setItem(c,n),m(d,function(){if(l.getItem(c)===n){w();return}p(function(){if(l.getItem(h)!==n){g();return}m(function(){return!l.getItem(v)},w)})})},w=function(){l.setItem(v,"1");var b=function(){l.removeItem(v),l.getItem(h)===n&&l.removeItem(h),l.getItem(c)===n&&l.removeItem(c)};r().then(function(S){b(),e(S)}).catch(function(S){b(),t(S)})};try{if(Wt(l,!0))g();else throw new Error("localStorage support check failed")}catch(b){t(b)}},this))};var jt=function(r){this.storage=r||$r()};jt.prototype.init=function(){return this.storage?F.resolve():F.reject(new Error("localStorage is not available"))},jt.prototype.isInitialized=function(){return!0},jt.prototype.setItem=function(r,i){return new F(y.bind(function(o,e){try{this.storage.setItem(r,li(i))}catch(t){e(t)}o()},this))},jt.prototype.getItem=function(r){return new F(y.bind(function(i,o){var e;try{e=ci(this.storage.getItem(r))}catch(t){o(t)}i(e)},this))},jt.prototype.removeItem=function(r){return new F(y.bind(function(i,o){try{this.storage.removeItem(r)}catch(e){o(e)}i()},this))};var fc=lt("batch"),Pe=function(r,i){i=i||{},this.storageKey=r,this.usePersistence=i.usePersistence,this.usePersistence&&(this.queueStorage=i.queueStorage||new jt,this.lock=new uc(r,{storage:i.sharedLockStorage,timeoutMS:i.sharedLockTimeoutMS})),this.reportError=i.errorReporter||y.bind(fc.error,fc),this.pid=i.pid||null,this.memQueue=[],this.initialized=!1,i.enqueueThrottleMs?this.enqueuePersisted=Ew(y.bind(this._enqueuePersisted,this),i.enqueueThrottleMs):this.enqueuePersisted=y.bind(function(o){return this._enqueuePersisted([o])},this)};Pe.prototype.ensureInit=function(){return this.initialized||!this.usePersistence?F.resolve():this.queueStorage.init().then(y.bind(function(){this.initialized=!0},this)).catch(y.bind(function(r){this.reportError("Error initializing queue persistence. Disabling persistence",r),this.initialized=!0,this.usePersistence=!1},this))},Pe.prototype.enqueue=function(r,i){var o={id:_s(),flushAfter:new Date().getTime()+i*2,payload:r};return this.usePersistence?this.enqueuePersisted(o):(this.memQueue.push(o),F.resolve(!0))},Pe.prototype._enqueuePersisted=function(r){var i=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(o){return this.saveToStorage(o.concat(r))},this)).then(y.bind(function(o){return o&&(this.memQueue=this.memQueue.concat(r)),o},this)).catch(y.bind(function(o){return this.reportError("Error enqueueing items",o,r),!1},this))},this);return this.lock.withLock(i,this.pid).catch(y.bind(function(o){return this.reportError("Error acquiring storage lock",o),!1},this))},Pe.prototype.fillBatch=function(r){var i=this.memQueue.slice(0,r);return this.usePersistence&&i.lengthn.flushAfter&&!e[n.id]&&(n.orphaned=!0,i.push(n),i.length>=r))break}}return i},this)):F.resolve(i)};var lc=function(r,i){var o=[];return y.each(r,function(e){e.id&&!i[e.id]&&o.push(e)}),o};Pe.prototype.removeItemsByID=function(r){var i={};if(y.each(r,function(e){i[e]=!0}),this.memQueue=lc(this.memQueue,i),this.usePersistence){var o=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){return e=lc(e,i),this.saveToStorage(e)},this)).then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){for(var t=0;t5&&(this.reportError("[dupe] item ID sent too many times, not sending",{item:c,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[p]}),v=!1):this.reportError("[dupe] found item with no ID",{item:c}),v&&s.push(h)}a[c.id]=h},this),s.length<1)return this.requestInProgress=!1,this.resetFlush(),F.resolve();var u=y.bind(function(){return this.queue.removeItemsByID(y.map(t,function(c){return c.id})).then(y.bind(function(c){return y.each(t,y.bind(function(h){var v=h.id;v?(this.itemIdsSentSuccessfully[v]=this.itemIdsSentSuccessfully[v]||0,this.itemIdsSentSuccessfully[v]++,this.itemIdsSentSuccessfully[v]>5&&this.reportError("[dupe] item ID sent too many times",{item:h,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[v]})):this.reportError("[dupe] found item with no ID while removing",{item:h})},this)),c?(this.consecutiveRemovalFailures=0,this.flushOnlyOnInterval&&!n?(this.resetFlush(),F.resolve()):this.flush()):(++this.consecutiveRemovalFailures>5?(this.reportError("Too many queue failures; disabling batching system."),this.stopAllBatching()):this.resetFlush(),F.resolve())},this))},this),f=y.bind(function(c){this.requestInProgress=!1;try{if(r.unloading)return this.queue.updatePayloads(a);if(y.isObject(c)&&c.error==="timeout"&&new Date().getTime()-o>=i)return this.reportError("Network timeout; retrying"),this.flush();if(y.isObject(c)&&(c.httpStatusCode>=500||c.httpStatusCode===429||c.httpStatusCode<=0&&!$w()||c.error==="timeout")){var h=this.flushInterval*2;return c.retryAfter&&(h=parseInt(c.retryAfter,10)*1e3||h),h=Math.min(zw,h),this.reportError("Error; retry in "+h+" ms"),this.scheduleFlush(h),F.resolve()}else if(y.isObject(c)&&c.httpStatusCode===413)if(t.length>1){var v=Math.max(1,Math.floor(e/2));return this.batchSize=Math.min(this.batchSize,v,t.length-1),this.reportError("413 response; reducing batch size to "+this.batchSize),this.resetFlush(),F.resolve()}else return this.reportError("Single-event request too large; dropping",t),this.resetBatchSize(),u();else return u()}catch(p){this.reportError("Error handling API response",p),this.resetFlush()}},this),l={method:"POST",verbose:!0,ignore_json_errors:!0,timeout_ms:i};return r.unloading&&(l.transport="sendBeacon"),kr.log("MIXPANEL REQUEST:",s),this.sendRequestPromise(s,l).then(f)},this)).catch(y.bind(function(t){this.reportError("Error flushing request queue",t),this.resetFlush()},this))},Ee.prototype.reportError=function(r,i){if(kr.error.apply(kr.error,arguments),this.errorReporter)try{i instanceof Error||(i=new Error(r)),this.errorReporter(r,i)}catch(o){kr.error(o)}};var hc=function(r){var i=Date.now();return!r||i>r.maxExpires||i>r.idleExpires},Ww=250,jw=function(r,i){if(!y.isArray(r))return r&&i.critical("record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled."),[];for(var o=[],e=0;e=0;e-=1)if(i(r[e]))return r[e]}function pc(r,i,o){if(!(i in r)||typeof r[i]!="function")return function(){};var e=r[i],t=o(e);return r[i]=t,function(){r[i]=e}}var Ls=1024*1024;function vc(r){return!r||typeof r!="string"?r:r.length>Ls?(ct.error("Body truncated from "+r.length+" to "+Ls+" characters"),r.substring(0,Ls)+"... [truncated]"):r}function Xw(r,i,o){if(!i.PerformanceObserver)return ct.error("PerformanceObserver not supported"),function(){};if(o.recordInitialRequests){var e=i.performance.getEntries().filter(function(n){return Zw(n)||Ns(n)&&o.initiatorTypes.includes(n.initiatorType)});r({requests:e.map(function(n){return{url:n.name,initiatorType:n.initiatorType,status:"responseStatus"in n?n.responseStatus:void 0,startTime:Math.round(n.startTime),endTime:Math.round(n.responseEnd),timeOrigin:di(i)}}),isInitial:!0})}var t=new i.PerformanceObserver(function(n){var s=n.getEntries().filter(function(a){return Ns(a)&&o.initiatorTypes.includes(a.initiatorType)&&a.initiatorType!=="xmlhttprequest"&&a.initiatorType!=="fetch"});r({requests:s.map(function(a){return{url:a.name,initiatorType:a.initiatorType,status:"responseStatus"in a?a.responseStatus:void 0,startTime:Math.round(a.startTime),endTime:Math.round(a.responseEnd),timeOrigin:di(i)}})})});return t.observe({entryTypes:["navigation","resource"]}),function(){t.disconnect()}}function pi(r,i,o){return!i[r]||i[r].length===0?!1:i[r].includes(o.toLowerCase())}function vi(r,i,o){return!i[r]||i[r].length===0?!1:rc(o,i[r])}function mc(r){if(r==null)return null;var i;if(typeof r=="string")i=r;else if(r instanceof Document)i=r.textContent;else if(r instanceof FormData)i=y.HTTPBuildQuery(r);else if(y.isObject(r))try{i=JSON.stringify(r)}catch(o){return"Failed to stringify response object"}else return"Cannot read body of type "+typeof r;return vc(i)}function gc(r){return new Promise(function(i){var o=setTimeout(function(){i("Timeout while trying to read body")},500);try{r.clone().text().then(function(e){clearTimeout(o),i(vc(e))},function(e){clearTimeout(o),i("Failed to read body: "+String(e))})}catch(e){clearTimeout(o),i("Failed to read body: "+String(e))}})}function Ds(r,i,o,e,t,n){if(n===void 0&&(n=0),n>10)return ct.error("Cannot find performance entry"),Promise.resolve(null);var s=r.performance.getEntriesByName(o),a=Kw(s,function(u){return Ns(u)&&u.initiatorType===i&&(!e||u.startTime>=e)&&(!t||u.startTime<=t)});return a?Promise.resolve(a):new Promise(function(u){setTimeout(u,50*n)}).then(function(){return Ds(r,i,o,e,t,n+1)})}function Qw(r,i,o){if(!o.initiatorTypes.includes("xmlhttprequest"))return function(){};var e=pc(i.XMLHttpRequest.prototype,"open",function(t){return function(n,s,a,u,f){a===void 0&&(a=!0);var l=this,c=new Request(s,{method:n}),h={},v,p,m={},d=l.setRequestHeader.bind(l);l.setRequestHeader=function(w,b){return pi("request",o.recordHeaders,w)&&(m[w]=b),d(w,b)},h.requestHeaders=m;var g=l.send.bind(l);l.send=function(w){return vi("request",o.recordBodyUrls,c.url)&&(h.requestBody=mc(w)),v=i.performance.now(),g(w)},l.addEventListener("readystatechange",function(){if(l.readyState===l.DONE){p=i.performance.now();var w={},b=l.getAllResponseHeaders();if(b){var S=b.trim().split(/[\r\n]+/);S.forEach(function(C){if(C){var R=C.indexOf(": ");if(R!==-1){var E=C.substring(0,R),x=C.substring(R+2);E&&pi("response",o.recordHeaders,E)&&(w[E]=x)}}})}h.responseHeaders=w,vi("response",o.recordBodyUrls,c.url)&&(h.responseBody=mc(l.response)),Ds(i,"xmlhttprequest",c.url,v,p).then(function(C){if(!C){ct.error("Failed to get performance entry for XHR request to "+c.url);return}var R={url:C.name,method:c.method,initiatorType:C.initiatorType,status:l.status,startTime:Math.round(C.startTime),endTime:Math.round(C.responseEnd),timeOrigin:di(i),requestHeaders:h.requestHeaders,requestBody:h.requestBody,responseHeaders:h.responseHeaders,responseBody:h.responseBody};r({requests:[R]})}).catch(function(C){ct.error("Error recording XHR request to "+c.url+": "+String(C))})}}),t.call(l,n,s,a,u,f)}});return function(){e()}}function eb(r,i){if(typeof Request!="undefined"&&r instanceof Request){var o=r.clone();return i?new Request(o,i):o}return new Request(r,i)}function tb(r,i,o){if(!o.initiatorTypes.includes("fetch"))return function(){};var e=pc(i,"fetch",function(t){return function(){var n=eb(arguments[0],arguments[1]),s,a={},u,f,l,c=Promise.resolve(void 0),h,v=new Promise(function(m){h=m});try{var p={};n.headers.forEach(function(m,d){pi("request",o.recordHeaders,d)&&(p[d]=m)}),a.requestHeaders=p,vi("request",o.recordBodyUrls,n.url)&&(c=gc(n).then(function(m){a.requestBody=m})),u=i.performance.now(),l=t.apply(i,arguments).then(function(m){s=m,f=i.performance.now();var d={};return s.headers.forEach(function(g,w){pi("response",o.recordHeaders,w)&&(d[w]=g)}),a.responseHeaders=d,vi("response",o.recordBodyUrls,n.url)?gc(s).then(function(g){a.responseBody=g,h()}):h(),s})}catch(m){l=Promise.reject(m)}return Promise.all([c,v,l]).then(function(){return Ds(i,"fetch",n.url,u,f)}).then(function(m){if(!m){ct.error("Failed to get performance entry for fetch request to "+n.url);return}var d={url:m.name,method:n.method,initiatorType:m.initiatorType,status:s?s.status:void 0,startTime:Math.round(m.startTime),endTime:Math.round(m.responseEnd),timeOrigin:di(i),requestHeaders:a.requestHeaders,requestBody:a.requestBody,responseHeaders:a.responseHeaders,responseBody:a.responseBody};r({requests:[d]})}).catch(function(m){ct.error("Error recording fetch request to "+n.url+": "+String(m))}),l}});return function(){e()}}function rb(r,i,o){if(!("performance"in i))return function(){};var e=Object.assign({},Ts.recordHeaders,o.recordHeaders||{}),t=Object.assign({},Ts.recordBodyUrls,o.recordBodyUrls||{});o=Object.assign({},o,{recordHeaders:e,recordBodyUrls:t});var n=Object.assign({},Ts,o),s=function(l){var c=l.requests.filter(function(h){var v=rc(h.url,n.ignoreRequestUrls||[]);return!v&&!n.ignoreRequestFn(h)});(c.length>0||l.isInitial)&&r(Object.assign({},l,{requests:c}))},a=Xw(s,i,n),u=Qw(s,i,n),f=tb(s,i,n);return function(){a(),u(),f()}}var nb="rrweb/network@1.mp",ib=function(r){return{name:nb,observer:rb,options:r}},ht=lt("recorder"),ob=H.CompressionStream,sb={batch_size:1e3,batch_flush_interval_ms:10*1e3,batch_request_timeout_ms:90*1e3,batch_autostart:!0},ab=new Set([P.MouseMove,P.MouseInteraction,P.Scroll,P.ViewportResize,P.Input,P.TouchMove,P.MediaInteraction,P.Drag,P.Selection]);function ub(r){return r.type===B.IncrementalSnapshot&&ab.has(r.data.source)}var ce=function(r){this._mixpanel=r.mixpanelInstance,this._onIdleTimeout=r.onIdleTimeout||Ps,this._onMaxLengthReached=r.onMaxLengthReached||Ps,this._onBatchSent=r.onBatchSent||Ps,this._rrwebRecord=r.rrwebRecord||null,this._stopRecording=null,this.replayId=r.replayId,this.batchStartUrl=r.batchStartUrl||null,this.replayStartUrl=r.replayStartUrl||null,this.idleExpires=r.idleExpires||null,this.maxExpires=r.maxExpires||null,this.replayStartTime=r.replayStartTime||null,this.lastEventTimestamp=r.lastEventTimestamp||null,this.seqNo=r.seqNo||0,this.idleTimeoutId=null,this.maxTimeoutId=null,this.recordMaxMs=si,this.recordMinMs=0,this._recordMinMsCheckStart=null;var i=Wt(r.sharedLockStorage||$r(),!0)&&!this.getConfig("disable_persistence");this.batcherKey="__mprec_"+this.getConfig("name")+"_"+this.getConfig("token")+"_"+this.replayId,this.queueStorage=new _e(nc,ic,sc),this.batcher=new Ee(this.batcherKey,{errorReporter:this.reportError.bind(this),flushOnlyOnInterval:!0,libConfig:sb,sendRequestFunc:this.flushEventsWithOptOut.bind(this),queueStorage:this.queueStorage,sharedLockStorage:r.sharedLockStorage,usePersistence:i,stopAllBatchingFunc:this.stopRecording.bind(this),enqueueThrottleMs:Ww,sharedLockTimeoutMS:10*1e3})};ce.prototype.getUserIdInfo=function(){if(this.finalFlushUserIdInfo)return this.finalFlushUserIdInfo;var r={distinct_id:String(this._mixpanel.get_distinct_id())},i=this._mixpanel.get_property("$device_id");i&&(r.$device_id=i);var o=this._mixpanel.get_property("$user_id");return o&&(r.$user_id=o),r},ce.prototype.unloadPersistedData=function(){return this.batcher.stop(),this.queueStorage.init().catch(function(){this.reportError("Error initializing IndexedDB storage for unloading persisted data.")}.bind(this)).then(function(){return this.getDurationMs()si&&(this.recordMaxMs=si,ht.critical("record_max_ms cannot be greater than "+si+"ms. Capping value.")),this.maxExpires||(this.maxExpires=new Date().getTime()+this.recordMaxMs),this.recordMinMs=this._getRecordMinMs(),this.replayStartTime||(this.replayStartTime=new Date().getTime(),this.batchStartUrl=y.info.currentUrl(),this.replayStartUrl=y.info.currentUrl()),r||this.recordMinMs>0?(this.batcher.stop(),this._recordMinMsCheckStart=null):this.batcher.start();var i=function(){clearTimeout(this.idleTimeoutId);var f=this.getConfig("record_idle_timeout_ms");this.idleTimeoutId=setTimeout(this._onIdleTimeout,f),this.idleExpires=new Date().getTime()+f}.bind(this);i();var o=this.getConfig("record_block_selector");(o===""||o===null)&&(o=void 0);var e=Hw(this._mixpanel),t=[];if(this.getConfig("record_network")){var n=this.getConfig("record_network_options")||{},s=(n.ignoreRequestUrls||[]).slice();s.push(this._getApiRoute()),n.ignoreRequestUrls=s,t.push(ib(n))}this.getConfig("record_console")&&t.push(mw({stringifyOptions:{stringLengthLimit:1e3,numOfKeysLimit:50,depthOfLimit:2}}));var a=jw(this.getConfig("record_allowed_iframe_origins"),ht);try{this._stopRecording=this._rrwebRecord({emit:function(f){if(this.idleExpires&&this.idleExpires=this.recordMinMs&&this.batcher.start(),i()),this.__enqueuePromise=this.batcher.enqueue(f),(this.lastEventTimestamp===null||f.timestamp>this.lastEventTimestamp)&&(this.lastEventTimestamp=f.timestamp)}.bind(this),blockClass:this.getConfig("record_block_class"),blockSelector:o,collectFonts:this.getConfig("record_collect_fonts"),dataURLOptions:{type:"image/webp",quality:.6},maskAllInputs:!0,maskTextSelector:"*",maskInputFn:this._getMaskFn(Yw,e),maskTextFn:this._getMaskFn(Jw,e),recordCrossOriginIframes:a.length>0,allowedIframeOrigins:a,recordCanvas:this.getConfig("record_canvas"),sampling:{canvas:15},plugins:t})}catch(f){this.reportError("Unexpected error when starting rrweb recording.",f)}if(typeof this._stopRecording!="function"){this.reportError("rrweb failed to start, skipping this recording."),this._stopRecording=null,this.stopRecording();return}var u=this.maxExpires-new Date().getTime();this.maxTimeoutId=setTimeout(this._onMaxLengthReached.bind(this),u)},ce.prototype.stopRecording=function(r){if(this.finalFlushUserIdInfo=this.getUserIdInfo(),!this.isRrwebStopped()){try{this._stopRecording()}catch(o){this.reportError("Error with rrweb stopRecording",o)}this._stopRecording=null}var i;return this.batcher.stopped?i=this.batcher.clear():r||(i=this.batcher.flush()),this.batcher.stop(),clearTimeout(this.idleTimeoutId),clearTimeout(this.maxTimeoutId),i},ce.prototype.isRrwebStopped=function(){return this._stopRecording===null},ce.prototype.flushEventsWithOptOut=function(r,i,o){var e=function(t){t===0&&(this.stopRecording(),o({error:"Tracking has been opted out, stopping recording."}))}.bind(this);this._flushEvents(r,i,o,e)},ce.prototype.serialize=function(){var r;try{r=this._mixpanel.get_tab_id()}catch(i){this.reportError("Error getting tab ID for serialization ",i),r=null}return{replayId:this.replayId,seqNo:this.seqNo,replayStartTime:this.replayStartTime,batchStartUrl:this.batchStartUrl,replayStartUrl:this.replayStartUrl,lastEventTimestamp:this.lastEventTimestamp,idleExpires:this.idleExpires,maxExpires:this.maxExpires,tabId:r}},ce.deserialize=function(r,i){var o=new ce(y.extend({},i,{replayId:r.replayId,batchStartUrl:r.batchStartUrl,replayStartUrl:r.replayStartUrl,idleExpires:r.idleExpires,maxExpires:r.maxExpires,replayStartTime:r.replayStartTime,lastEventTimestamp:r.lastEventTimestamp,seqNo:r.seqNo,sharedLockStorage:i.sharedLockStorage}));return o},ce.prototype._getApiRoute=function(){return this.getConfig("api_routes").record},ce.prototype._sendRequest=function(r,i,o,e){var t=function(s,a){s.status===200&&this.replayId===r&&(this.seqNo++,this.batchStartUrl=y.info.currentUrl()),this._onBatchSent(),e({status:0,httpStatusCode:s.status,responseBody:a,retryAfter:s.headers.get("Retry-After")})}.bind(this),n=this._mixpanel.get_api_host&&this._mixpanel.get_api_host("record")||this.getConfig("api_host");H.fetch(n+"/"+this._getApiRoute()+"?"+new URLSearchParams(i),{method:"POST",headers:{Authorization:"Basic "+btoa(this.getConfig("token")+":"),"Content-Type":"application/octet-stream"},body:o}).then(function(s){s.json().then(function(a){t(s,a)}).catch(function(a){e({error:a})})}).catch(function(s){e({error:s,httpStatusCode:0})})},ce.prototype._flushEvents=Tw(function(r,i,o){var e=r.length;if(e>0){for(var t=this.replayId,n=1/0,s=-1/0,a=!1,u=0;uEs?(ht.critical("record_min_ms cannot be greater than "+Es+"ms. Capping value."),Es):r},ce.prototype._getMaskFn=function(r,i){return function(o,e){if(!o.trim().length)return"";var t=!0;try{t=r(e,i)}catch(s){this.reportError("Error checking if text should be masked, defaulting to masked",s)}if(t){var n=Math.min(o.length,1e4);return"*".repeat(n)}else return o}.bind(this)};var Ue=function(r){this.idb=new _e(nc,oc,sc),this.errorReporter=r.errorReporter,this.mixpanelInstance=r.mixpanelInstance,this.sharedLockStorage=r.sharedLockStorage};Ue.prototype.isPersistenceEnabled=function(){return!this.mixpanelInstance.get_config("disable_persistence")},Ue.prototype.handleError=function(r){this.errorReporter("IndexedDB error: ",r)},Ue.prototype.setActiveRecording=function(r){if(!this.isPersistenceEnabled())return F.resolve();var i=r.tabId;return i?this.idb.init().then(function(){return this.idb.setItem(i,r)}.bind(this)).catch(this.handleError.bind(this)):(console.warn("No tab ID is set, cannot persist recording metadata."),F.resolve())},Ue.prototype.getActiveRecording=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getItem(this.mixpanelInstance.get_tab_id())}.bind(this)).then(function(r){return hc(r)?null:r}.bind(this)).catch(this.handleError.bind(this)):F.resolve(null)},Ue.prototype.clearActiveRecording=function(){return this.isPersistenceEnabled()?this.markActiveRecordingExpired():this.deleteActiveRecording()},Ue.prototype.markActiveRecordingExpired=function(){return this.getActiveRecording().then(function(r){if(r)return r.maxExpires=0,this.setActiveRecording(r)}.bind(this)).catch(this.handleError.bind(this))},Ue.prototype.deleteActiveRecording=function(){return this.idb.isInitialized()?this.idb.removeItem(this.mixpanelInstance.get_tab_id()).catch(this.handleError.bind(this)):F.resolve()},Ue.prototype.flushInactiveRecordings=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getAll()}.bind(this)).then(function(r){var i=r.filter(function(o){return hc(o)}).map(function(o){var e=ce.deserialize(o,{mixpanelInstance:this.mixpanelInstance,sharedLockStorage:this.sharedLockStorage});return e.unloadPersistedData().then(function(){return this.idb.removeItem(o.tabId)}.bind(this)).catch(this.handleError.bind(this))}.bind(this));return F.all(i)}.bind(this)).catch(this.handleError.bind(this)):F.resolve([])};var _r=lt("recorder"),Te=function(r,i,o){this.mixpanelInstance=r,this.rrwebRecord=i||Ye,this.sharedLockStorage=o,this.recordingRegistry=new Ue({mixpanelInstance:this.mixpanelInstance,errorReporter:_r.error,sharedLockStorage:o}),this._flushInactivePromise=this.recordingRegistry.flushInactiveRecordings(),this.activeRecording=null,this.stopRecordingInProgress=!1};Te.prototype.startRecording=function(r){if(r=r||{},this.activeRecording&&!this.activeRecording.isRrwebStopped()){_r.log("Recording already in progress, skipping startRecording.");return}var i=function(){_r.log("Idle timeout reached, restarting recording."),this.resetRecording()}.bind(this),o=function(){_r.log("Max recording length reached, stopping recording."),this.resetRecording()}.bind(this),e=function(){this.recordingRegistry.setActiveRecording(this.activeRecording.serialize()),this.__flushPromise=this.activeRecording.batcher._flushPromise}.bind(this),t={mixpanelInstance:this.mixpanelInstance,onBatchSent:e,onIdleTimeout:i,onMaxLengthReached:o,replayId:y.UUID(),rrwebRecord:this.rrwebRecord,sharedLockStorage:this.sharedLockStorage};return r.activeSerializedRecording?this.activeRecording=ce.deserialize(r.activeSerializedRecording,t):this.activeRecording=new ce(t),this.activeRecording.startRecording(r.shouldStopBatcher),this.recordingRegistry.setActiveRecording(this.activeRecording.serialize())},Te.prototype.stopRecording=function(){return this.stopRecordingInProgress=!0,this._stopCurrentRecording(!1,!0).then(function(){return this.recordingRegistry.clearActiveRecording()}.bind(this)).then(function(){this.stopRecordingInProgress=!1}.bind(this))},Te.prototype.pauseRecording=function(){return this._stopCurrentRecording(!1)},Te.prototype._stopCurrentRecording=function(r,i){if(this.activeRecording){var o=this.activeRecording.stopRecording(r);return i&&(this.activeRecording=null),o}return F.resolve()},Te.prototype.resumeRecording=function(r){return this.activeRecording&&this.activeRecording.isRrwebStopped()?(this.activeRecording.startRecording(!1),F.resolve(null)):this.recordingRegistry.getActiveRecording().then(function(i){return i&&!this.stopRecordingInProgress?this.startRecording({activeSerializedRecording:i}):r?this.startRecording({shouldStopBatcher:!1}):(_r.log("No resumable recording found."),null)}.bind(this))},Te.prototype.resetRecording=function(){this.stopRecording(),this.startRecording({shouldStopBatcher:!0})},Te.prototype.isRecording=function(){return this.activeRecording&&!this.activeRecording.isRrwebStopped()},Te.prototype.getActiveReplayId=function(){return this.isRecording()?this.activeRecording.replayId:null},Object.defineProperty(Te.prototype,"replayId",{get:function(){return this.getActiveReplayId()}}),H[Rc]=Te})(); +(function(){"use strict";var H;if(typeof window=="undefined"){var zs={hostname:""};H={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:zs,referrer:""},screen:{width:0,height:0},location:zs,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else H=window;var Si={LIB_VERSION:"2.85.0-rc1"},Oc="__mp_recorder";function Ws(r,i){(i==null||i>r.length)&&(i=r.length);for(var o=0,e=new Array(i);o=0)&&(o[t]=r[t]);return o}function Yt(r,i){return Yt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Yt(r,i)}function M(r){"@swc/helpers - typeof";return r&&typeof Symbol!="undefined"&&r.constructor===Symbol?"symbol":typeof r}function Ec(r,i){if(r){if(typeof r=="string")return Ws(r,i);var o=Object.prototype.toString.call(r).slice(8,-1);if(o==="Object"&&r.constructor&&(o=r.constructor.name),o==="Map"||o==="Set")return Array.from(o);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return Ws(r,i)}}function Jt(r){var i=typeof Map=="function"?new Map:void 0;return Jt=function(e){if(e===null||!xc(e))return e;if(typeof e!="function")throw new TypeError("Super expression must either be null or a function");if(typeof i!="undefined"){if(i.has(e))return i.get(e);i.set(e,t)}function t(){return Tr(e,arguments,Ci(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),Yt(t,e)},Jt(r)}function js(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(i){}return(js=function(){return!!r})()}function I(r,i){var o=typeof Symbol!="undefined"&&r[Symbol.iterator]||r["@@iterator"];if(o)return(o=o.call(r)).next.bind(o);if(Array.isArray(r)||(o=Ec(r))||i){o&&(r=o);var e=0;return function(){return e>=r.length?{done:!0}:{done:!1,value:r[e++]}}}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 rt(r,i){var o,e,t,n,s={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return n={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(n[Symbol.iterator]=function(){return this}),n;function a(f){return function(l){return u([f,l])}}function u(f){if(o)throw new TypeError("Generator is already executing.");for(;s;)try{if(o=1,e&&(t=f[0]&2?e.return:f[0]?e.throw||((t=e.return)&&t.call(e),0):e.next)&&!(t=t.call(e,f[1])).done)return t;switch(e=0,t&&(f=[f[0]&2,t.value]),f[0]){case 0:case 1:t=f;break;case 4:return s.label++,{value:f[1],done:!1};case 5:s.label++,e=f[1],f=[0];continue;case 7:f=s.ops.pop(),s.trys.pop();continue;default:if(t=s.trys,!(t=t.length>0&&t[t.length-1])&&(f[0]===6||f[0]===2)){s=0;continue}if(f[0]===3&&(!t||f[1]>t[0]&&f[1]=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}};throw new TypeError(i?"Object is not iterable.":"Symbol.iterator is not defined.")}var Ac=Object.defineProperty,Mc=function(r,i,o){return i in r?Ac(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},O=function(r,i,o){return Mc(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},qs,$c=Object.defineProperty,kc=function(r,i,o){return i in r?$c(r,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[i]=o},Vs=function(r,i,o){return kc(r,(typeof i=="undefined"?"undefined":M(i))!=="symbol"?i+"":i,o)},he=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(he||{}),Hs={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Ys={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Nr={},Pc=function(){return!!globalThis.Zone};function Oi(r){if(Nr[r])return Nr[r];var i=globalThis[r],o=i.prototype,e=r in Hs?Hs[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Ys?Ys[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!Pc())return Nr[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Nr[r]=f:o}catch(l){return o}}var Ri={};function We(r,i,o){var e,t=r+"."+String(o);if(Ri[t])return Ri[t].call(i);var n=Oi(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(Ri[t]=s,s.call(i)):i[o]}var xi={};function Js(r,i,o){var e=r+"."+String(o);if(xi[e])return xi[e].bind(i);var t=Oi(r),n=t[o];return typeof n!="function"?i[o]:(xi[e]=n,n.bind(i))}function _c(r){return We("Node",r,"childNodes")}function Tc(r){return We("Node",r,"parentNode")}function Nc(r){return We("Node",r,"parentElement")}function Lc(r){return We("Node",r,"textContent")}function Dc(r,i){return Js("Node",r,"contains")(i)}function Fc(r){return Js("Node",r,"getRootNode")()}function Bc(r){return!r||!("host"in r)?null:We("ShadowRoot",r,"host")}function Uc(r){return r.styleSheets}function zc(r){return!r||!("shadowRoot"in r)?null:We("Element",r,"shadowRoot")}function Wc(r,i){return We("Element",r,"querySelector")(i)}function Gc(r,i){return We("Element",r,"querySelectorAll")(i)}function jc(){return Oi("MutationObserver").constructor}function qc(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var ve={childNodes:_c,parentNode:Tc,parentElement:Nc,textContent:Lc,contains:Dc,getRootNode:Fc,host:Bc,styleSheets:Uc,shadowRoot:zc,querySelector:Wc,querySelectorAll:Gc,mutationObserver:jc,patch:qc};function Zs(r){return r.nodeType===r.ELEMENT_NODE}function Zt(r){var i=r&&"host"in r&&"mode"in r&&ve.host(r)||null;return!!(i&&"shadowRoot"in i&&ve.shadowRoot(i)===r)}function Kt(r){return Object.prototype.toString.call(r)==="[object ShadowRoot]"}function Vc(r){return r.includes(" background-clip: text;")&&!r.includes(" -webkit-background-clip: text;")&&(r=r.replace(/\sbackground-clip:\s*text;/g," -webkit-background-clip: text; background-clip: text;")),r}function Hc(r){var i=r.cssText;if(i.split('"').length<3)return i;var o=["@import","url("+JSON.stringify(r.href)+")"];return r.layerName===""?o.push("layer"):r.layerName&&o.push("layer("+r.layerName+")"),r.supportsText&&o.push("supports("+r.supportsText+")"),r.media.length&&o.push(r.media.mediaText),o.join(" ")+";"}function Ei(r){try{var i=r.rules||r.cssRules;if(!i)return null;var o=r.href;!o&&r.ownerNode&&r.ownerNode.ownerDocument&&(o=r.ownerNode.ownerDocument.location.href);var e=Array.from(i,function(t){return Ks(t,o)}).join("");return Vc(e)}catch(t){return null}}function Ks(r,i){if(Jc(r)){var o;try{o=Ei(r.styleSheet)||Hc(r)}catch(t){o=r.cssText}return r.styleSheet.href?Lr(o,r.styleSheet.href):o}else{var e=r.cssText;return Zc(r)&&r.selectorText.includes(":")&&(e=Yc(e)),i?Lr(e,i):e}}function Yc(r){var i=/(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;return r.replace(i,"$1\\$2")}function Jc(r){return"styleSheet"in r}function Zc(r){return"selectorText"in r}var Xs=(function(){function r(){Vs(this,"idNodeMap",new Map),Vs(this,"nodeMetaMap",new WeakMap)}var i=r.prototype;return i.getId=function(e){var t;if(!e)return-1;var n=(t=this.getMeta(e))==null?void 0:t.id;return n!=null?n:-1},i.getNode=function(e){return this.idNodeMap.get(e)||null},i.getIds=function(){return Array.from(this.idNodeMap.keys())},i.getMeta=function(e){return this.nodeMetaMap.get(e)||null},i.removeNodeFromMap=function(e,t){var n=this;t===void 0&&(t=!1);var s=this.getId(e);this.idNodeMap.delete(s),t&&this.nodeMetaMap.delete(e),e.childNodes&&e.childNodes.forEach(function(a){return n.removeNodeFromMap(a,t)})},i.has=function(e){return this.idNodeMap.has(e)},i.hasNode=function(e){return this.nodeMetaMap.has(e)},i.add=function(e,t){var n=t.id;this.idNodeMap.set(n,e),this.nodeMetaMap.set(e,t)},i.replace=function(e,t){var n=this.getNode(e);if(n){var s=this.nodeMetaMap.get(n);s&&this.nodeMetaMap.set(t,s)}this.idNodeMap.set(e,t)},i.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},r})();function Kc(){return new Xs}function Xt(r){var i=r.element,o=r.maskInputOptions,e=r.tagName,t=r.type,n=r.value,s=r.maskInputFn,a=n||"",u=t&&nt(t);return(o[e.toLowerCase()]||u&&o[u])&&(s?a=s(a,i):a="*".repeat(a.length)),a}function nt(r){return r.toLowerCase()}var Qs="__rrweb_original__";function Xc(r){var i=r.getContext("2d");if(!i)return!0;for(var o=50,e=0;e-1?i=r.split("/").slice(0,3).join("/"):i=r.split("/")[0],i=i.split("?")[0],i}var eh=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,th=/^(?:[a-z+]+:)?\/\//i,rh=/^www\..*/i,nh=/^(data:)([^,]*),(.*)/i;function Lr(r,i){return(r||"").replace(eh,function(o,e,t,n,s,a){var u=t||s||a,f=e||n||"";if(!u)return o;if(th.test(u)||rh.test(u)||nh.test(u))return"url("+f+u+f+")";if(u[0]==="/")return"url("+f+(Qc(i)+u)+f+")";var l=i.split("/"),c=u.split("/");l.pop();for(var h=I(c),v;!(v=h()).done;){var p=v.value;p!=="."&&(p===".."?l.pop():l.push(p))}return"url("+f+l.join("/")+f+")"})}function Dr(r,i){return i===void 0&&(i=!1),i?r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,""):r.replace(/(\/\*[^*]*\*\/)|[\s;]/g,"").replace(/0px/g,"0")}function ih(r,i,o){o===void 0&&(o=!1);var e=Array.from(i.childNodes),t=[],n=0;if(e.length>1&&r&&typeof r=="string"){for(var s=Dr(r,o),a=s.length/r.length,u=1;u2&&v[0]===""&&e[u-1].textContent!=="")p=s.indexOf(h,1);else if(v.length===1){if(h=h.substring(0,h.length-1),v=s.split(h),v.length<=1)return t.push(r),t;c=l+1}else c===f.length-1&&(p=s.indexOf(h));if(v.length>=2&&c>l){var m=e[u-1].textContent;if(m&&typeof m=="string"){var d=Dr(m).length;p=s.indexOf(h,d)}p===-1&&(p=v[0].length)}if(p!==-1){for(var g=Math.floor(p/a);g>0&&g50*e.length)return t.push(r),t;var w=Dr(r.substring(0,g),o);if(w.length===p){t.push(r.substring(0,g)),r=r.substring(g),s=s.substring(p);break}else w.length=i.length);){var n=e(fh);if(n.slice(-1)===",")n=Ot(r,n.substring(0,n.length-1)),t.push(n);else{var s="";n=Ot(r,n);for(var a=!1;;){var u=i.charAt(o);if(u===""){t.push((n+s).trim());break}else if(a)u===")"&&(a=!1);else if(u===","){o+=1,t.push((n+s).trim());break}else u==="("&&(a=!0);s+=u,o+=1}}}return t.join(", ")}var na=new WeakMap;function Ot(r,i){return!i||i.trim()===""?i:Ai(r,i)}function hh(r){return!!(r.tagName==="svg"||r.ownerSVGElement)}function Ai(r,i){var o=na.get(r);if(o||(o=r.createElement("a"),na.set(r,o)),!i)i="";else if(i.startsWith("blob:")||i.startsWith("data:"))return i;return o.setAttribute("href",i),o.href}function ia(r,i,o,e){return e&&(o==="src"||o==="href"&&!(i==="use"&&e[0]==="#")||o==="xlink:href"&&e[0]!=="#"||o==="background"&&(i==="table"||i==="td"||i==="th")?Ot(r,e):o==="srcset"?ch(r,e):o==="style"?Lr(e,Ai(r)):i==="object"&&o==="data"?Ot(r,e):e)}function oa(r,i,o){return(r==="video"||r==="audio")&&i==="autoplay"}function dh(r,i,o){try{if(typeof i=="string"){if(r.classList.contains(i))return!0}else for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}if(o)return r.matches(o)}catch(n){}return!1}function Fr(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return o?Fr(ve.parentNode(r),i,o):!1;for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return o?Fr(ve.parentNode(r),i,o):!1}function sa(r,i,o,e){var t;if(Zs(r)){if(t=r,!ve.childNodes(t).length)return!1}else{if(ve.parentElement(r)===null)return!1;t=ve.parentElement(r)}try{if(typeof i=="string"){if(e){if(t.closest("."+i))return!0}else if(t.classList.contains(i))return!0}else if(Fr(t,i,e))return!0;if(o){if(e){if(t.closest(o))return!0}else if(t.matches(o))return!0}}catch(n){}return!1}function ph(r,i,o){var e=r.contentWindow;if(e){var t=!1,n;try{n=e.document.readyState}catch(u){return}if(n!=="complete"){var s=setTimeout(function(){t||(i(),t=!0)},o);r.addEventListener("load",function(){clearTimeout(s),t=!0,i()});return}var a="about:blank";if(e.location.href!==a||r.src===a||r.src==="")return setTimeout(i,0),r.addEventListener("load",i);r.addEventListener("load",i)}}function vh(r,i,o){var e=!1,t;try{t=r.sheet}catch(s){return}if(!t){var n=setTimeout(function(){e||(i(),e=!0)},o);r.addEventListener("load",function(){clearTimeout(n),e=!0,i()})}}function mh(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.needsMask,a=i.inlineStylesheet,u=i.maskInputOptions,f=u===void 0?{}:u,l=i.maskTextFn,c=i.maskInputFn,h=i.dataURLOptions,v=h===void 0?{}:h,p=i.inlineImages,m=i.recordCanvas,d=i.keepIframeSrcFn,g=i.newlyAddedElement,w=g===void 0?!1:g,b=i.cssCaptured,S=b===void 0?!1:b,C=gh(o,e);switch(r.nodeType){case r.DOCUMENT_NODE:return r.compatMode!=="CSS1Compat"?{type:he.Document,childNodes:[],compatMode:r.compatMode}:{type:he.Document,childNodes:[]};case r.DOCUMENT_TYPE_NODE:return{type:he.DocumentType,name:r.name,publicId:r.publicId,systemId:r.systemId,rootId:C};case r.ELEMENT_NODE:return wh(r,{doc:o,blockClass:t,blockSelector:n,inlineStylesheet:a,maskInputOptions:f,maskInputFn:c,dataURLOptions:v,inlineImages:p,recordCanvas:m,keepIframeSrcFn:d,newlyAddedElement:w,rootId:C});case r.TEXT_NODE:return yh(r,{doc:o,needsMask:s,maskTextFn:l,rootId:C,cssCaptured:S});case r.CDATA_SECTION_NODE:return{type:he.CDATA,textContent:"",rootId:C};case r.COMMENT_NODE:return{type:he.Comment,textContent:ve.textContent(r)||"",rootId:C};default:return!1}}function gh(r,i){if(i.hasNode(r)){var o=i.getId(r);return o===1?void 0:o}}function yh(r,i){var o=i.needsMask,e=i.maskTextFn,t=i.rootId,n=i.cssCaptured,s=ve.parentNode(r),a=s&&s.tagName,u="",f=a==="STYLE"?!0:void 0,l=a==="SCRIPT"?!0:void 0;return l?u="SCRIPT_PLACEHOLDER":n||(u=ve.textContent(r),f&&u&&(u=Lr(u,Ai(i.doc)))),!f&&!l&&u&&o&&(u=e?e(u,ve.parentElement(r)):u.replace(/[\S]/g,"*")),{type:he.Text,textContent:u||"",rootId:t}}function wh(r,i){for(var o=i.doc,e=i.blockClass,t=i.blockSelector,n=i.inlineStylesheet,s=i.maskInputOptions,a=s===void 0?{}:s,u=i.maskInputFn,f=i.dataURLOptions,l=f===void 0?{}:f,c=i.inlineImages,h=i.recordCanvas,v=i.keepIframeSrcFn,p=i.newlyAddedElement,m=p===void 0?!1:p,d=i.rootId,g=dh(r,e,t),w=uh(r),b={},S=r.attributes.length,C=0;C1&&(k=oh(k,r)),b._cssText=k)}if(w==="input"||w==="textarea"||w==="select"){var N=r.value,ae=r.checked;b.type!=="radio"&&b.type!=="checkbox"&&b.type!=="submit"&&b.type!=="button"&&N?b.value=Xt({element:r,type:Qt(r),tagName:w,value:N,maskInputOptions:a,maskInputFn:u}):ae&&(b.checked=ae)}if((w==="input"||w==="textarea")&&b.placeholder&&(b.placeholder=Xt({element:r,type:Qt(r),tagName:w,value:b.placeholder,maskInputOptions:a,maskInputFn:u})),w==="option"&&(r.selected&&!a.select?b.selected=!0:delete b.selected),w==="dialog"&&r.open&&(b.rr_open_mode=r.matches("dialog:modal")?"modal":"non-modal"),w==="canvas"&&h){if(r.__context==="2d")Xc(r)||(b.rr_dataURL=r.toDataURL(l.type,l.quality));else if(!("__context"in r)){var P=r.toDataURL(l.type,l.quality),D=o.createElement("canvas");D.width=r.width,D.height=r.height;var oe=D.toDataURL(l.type,l.quality);P!==oe&&(b.rr_dataURL=P)}}if(w==="img"&&c){It||(It=o.createElement("canvas"),ra=It.getContext("2d"));var z=r,Ce=z.currentSrc||z.getAttribute("src")||"",be=z.crossOrigin,pe=function(){z.removeEventListener("load",pe);try{It.width=z.naturalWidth,It.height=z.naturalHeight,ra.drawImage(z,0,0),b.rr_dataURL=It.toDataURL(l.type,l.quality)}catch(Oe){if(z.crossOrigin!=="anonymous"){z.crossOrigin="anonymous",z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe);return}else console.warn("Cannot inline img src="+Ce+"! Error: "+Oe)}z.crossOrigin==="anonymous"&&(be?b.crossOrigin=be:z.removeAttribute("crossorigin"))};z.complete&&z.naturalWidth!==0?pe():z.addEventListener("load",pe)}if(w==="audio"||w==="video"){var ie=b;ie.rr_mediaState=r.paused?"paused":"played",ie.rr_mediaCurrentTime=r.currentTime,ie.rr_mediaPlaybackRate=r.playbackRate,ie.rr_mediaMuted=r.muted,ie.rr_mediaLoop=r.loop,ie.rr_mediaVolume=r.volume}if(m||(r.scrollLeft&&(b.rr_scrollLeft=r.scrollLeft),r.scrollTop&&(b.rr_scrollTop=r.scrollTop)),g){var de=r.getBoundingClientRect(),dt=de.width,Ne=de.height;b={class:b.class,rr_width:""+dt+"px",rr_height:""+Ne+"px"}}w==="iframe"&&!v(b.src)&&(r.contentDocument||(b.rr_src=b.src),delete b.src);var pt;try{customElements.get(w)&&(pt=!0)}catch(Oe){}return{type:he.Element,tagName:w,attributes:b,childNodes:[],isSVG:hh(r)||void 0,needBlock:g,rootId:d,isCustom:pt}}function Y(r){return r==null?"":r.toLowerCase()}function bh(r,i){if(i.comment&&r.type===he.Comment)return!0;if(r.type===he.Element){if(i.script&&(r.tagName==="script"||r.tagName==="link"&&(r.attributes.rel==="preload"&&r.attributes.as==="script"||r.attributes.rel==="modulepreload")||r.tagName==="link"&&r.attributes.rel==="prefetch"&&typeof r.attributes.href=="string"&&ea(r.attributes.href)==="js"))return!0;if(i.headFavicon&&(r.tagName==="link"&&r.attributes.rel==="shortcut icon"||r.tagName==="meta"&&(Y(r.attributes.name).match(/^msapplication-tile(image|color)$/)||Y(r.attributes.name)==="application-name"||Y(r.attributes.rel)==="icon"||Y(r.attributes.rel)==="apple-touch-icon"||Y(r.attributes.rel)==="shortcut icon")))return!0;if(r.tagName==="meta"){if(i.headMetaDescKeywords&&Y(r.attributes.name).match(/^description|keywords$/))return!0;if(i.headMetaSocial&&(Y(r.attributes.property).match(/^(og|twitter|fb):/)||Y(r.attributes.name).match(/^(og|twitter):/)||Y(r.attributes.name)==="pinterest"))return!0;if(i.headMetaRobots&&(Y(r.attributes.name)==="robots"||Y(r.attributes.name)==="googlebot"||Y(r.attributes.name)==="bingbot"))return!0;if(i.headMetaHttpEquiv&&r.attributes["http-equiv"]!==void 0)return!0;if(i.headMetaAuthorship&&(Y(r.attributes.name)==="author"||Y(r.attributes.name)==="generator"||Y(r.attributes.name)==="framework"||Y(r.attributes.name)==="publisher"||Y(r.attributes.name)==="progid"||Y(r.attributes.property).match(/^article:/)||Y(r.attributes.property).match(/^product:/)))return!0;if(i.headMetaVerification&&(Y(r.attributes.name)==="google-site-verification"||Y(r.attributes.name)==="yandex-verification"||Y(r.attributes.name)==="csrf-token"||Y(r.attributes.name)==="p:domain_verify"||Y(r.attributes.name)==="verify-v1"||Y(r.attributes.name)==="verification"||Y(r.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function Rt(r,i){var o=i.doc,e=i.mirror,t=i.blockClass,n=i.blockSelector,s=i.maskTextClass,a=i.maskTextSelector,u=i.skipChild,f=u===void 0?!1:u,l=i.inlineStylesheet,c=l===void 0?!0:l,h=i.maskInputOptions,v=h===void 0?{}:h,p=i.maskTextFn,m=i.maskInputFn,d=i.slimDOMOptions,g=i.dataURLOptions,w=g===void 0?{}:g,b=i.inlineImages,S=b===void 0?!1:b,C=i.recordCanvas,R=C===void 0?!1:C,E=i.onSerialize,x=i.onIframeLoad,k=i.iframeLoadTimeout,N=k===void 0?5e3:k,ae=i.onStylesheetLoad,P=i.stylesheetLoadTimeout,D=P===void 0?5e3:P,oe=i.keepIframeSrcFn,z=oe===void 0?function(){return!1}:oe,Ce=i.newlyAddedElement,be=Ce===void 0?!1:Ce,pe=i.cssCaptured,ie=pe===void 0?!1:pe,de=i.needsMask,dt=i.preserveWhiteSpace,Ne=dt===void 0?!0:dt;if(!de){var pt=de===void 0;de=sa(r,s,a,pt)}var Oe=mh(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,dataURLOptions:w,inlineImages:S,recordCanvas:R,keepIframeSrcFn:z,newlyAddedElement:be,cssCaptured:ie});if(!Oe)return console.warn(r,"not serialized"),null;var Qe;e.hasNode(r)?Qe=e.getId(r):bh(Oe,d)||!Ne&&Oe.type===he.Text&&!Oe.textContent.replace(/^\s+|\s+$/gm,"").length?Qe=er:Qe=ta();var G=Object.assign(Oe,{id:Qe});if(e.add(r,G),Qe===er)return null;E&&E(r);var jt=!f;if(G.type===he.Element){jt=jt&&!G.needBlock,delete G.needBlock;var qt=ve.shadowRoot(r);qt&&Kt(qt)&&(G.isShadowHost=!0)}if((G.type===he.Document||G.type===he.Element)&&jt){d.headWhitespace&&G.type===he.Element&&G.tagName==="head"&&(Ne=!1);var et={doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:f,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:D,keepIframeSrcFn:z,cssCaptured:!1};if(!(G.type===he.Element&&G.tagName==="textarea"&&G.attributes.value!==void 0)){G.type===he.Element&&G.attributes._cssText!==void 0&&typeof G.attributes._cssText=="string"&&(et.cssCaptured=!0);for(var mi=I(Array.from(ve.childNodes(r))),Vt;!(Vt=mi()).done;){var gi=Vt.value,yi=Rt(gi,et);yi&&G.childNodes.push(yi)}}var Pr=null;if(Zs(r)&&(Pr=ve.shadowRoot(r)))for(var vt=I(Array.from(ve.childNodes(Pr))),mt;!(mt=vt()).done;){var gt=mt.value,yt=Rt(gt,et);yt&&(Kt(Pr)&&(yt.isShadow=!0),G.childNodes.push(yt))}}var wt=ve.parentNode(r);return wt&&Zt(wt)&&Kt(wt)&&(G.isShadow=!0),G.type===he.Element&&G.tagName==="iframe"&&ph(r,function(){var Ue=r.contentDocument;if(Ue&&x){var Ht=Rt(Ue,{doc:Ue,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:D,keepIframeSrcFn:z});Ht&&x(r,Ht)}},N),G.type===he.Element&&G.tagName==="link"&&typeof G.attributes.rel=="string"&&(G.attributes.rel==="stylesheet"||G.attributes.rel==="preload"&&typeof G.attributes.href=="string"&&ea(G.attributes.href)==="css")&&vh(r,function(){if(ae){var Ue=Rt(r,{doc:o,mirror:e,blockClass:t,blockSelector:n,needsMask:de,maskTextClass:s,maskTextSelector:a,skipChild:!1,inlineStylesheet:c,maskInputOptions:v,maskTextFn:p,maskInputFn:m,slimDOMOptions:d,dataURLOptions:w,inlineImages:S,recordCanvas:R,preserveWhiteSpace:Ne,onSerialize:E,onIframeLoad:x,iframeLoadTimeout:N,onStylesheetLoad:ae,stylesheetLoadTimeout:D,keepIframeSrcFn:z});Ue&&ae(r,Ue)}},D),G}function Sh(r,i){var o=i||{},e=o.mirror,t=e===void 0?new Xs:e,n=o.blockClass,s=n===void 0?"rr-block":n,a=o.blockSelector,u=a===void 0?null:a,f=o.maskTextClass,l=f===void 0?"rr-mask":f,c=o.maskTextSelector,h=c===void 0?null:c,v=o.inlineStylesheet,p=v===void 0?!0:v,m=o.inlineImages,d=m===void 0?!1:m,g=o.recordCanvas,w=g===void 0?!1:g,b=o.maskAllInputs,S=b===void 0?!1:b,C=o.maskTextFn,R=o.maskInputFn,E=o.slimDOM,x=E===void 0?!1:E,k=o.dataURLOptions,N=o.preserveWhiteSpace,ae=o.onSerialize,P=o.onIframeLoad,D=o.iframeLoadTimeout,oe=o.onStylesheetLoad,z=o.stylesheetLoadTimeout,Ce=o.keepIframeSrcFn,be=Ce===void 0?function(){return!1}:Ce,pe=S===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:S===!1?{password:!0}:S,ie=x===!0||x==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:x==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:x===!1?{}:x;return Rt(r,{doc:r,mirror:t,blockClass:s,blockSelector:u,maskTextClass:l,maskTextSelector:h,skipChild:!1,inlineStylesheet:p,maskInputOptions:pe,maskTextFn:C,maskInputFn:R,slimDOMOptions:ie,dataURLOptions:k,inlineImages:d,recordCanvas:w,preserveWhiteSpace:N,onSerialize:ae,onIframeLoad:P,iframeLoadTimeout:D,onStylesheetLoad:oe,stylesheetLoadTimeout:z,keepIframeSrcFn:be,newlyAddedElement:!1})}function Ch(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function Ih(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Mi={exports:{}},K=String,aa=function(){return{isColorSupported:!1,reset:K,bold:K,dim:K,italic:K,underline:K,inverse:K,hidden:K,strikethrough:K,black:K,red:K,green:K,yellow:K,blue:K,magenta:K,cyan:K,white:K,gray:K,bgBlack:K,bgRed:K,bgGreen:K,bgYellow:K,bgBlue:K,bgMagenta:K,bgCyan:K,bgWhite:K}};Mi.exports=aa(),Mi.exports.createColors=aa;var Oh=Mi.exports,Rh={},xh=Object.freeze(Object.defineProperty({__proto__:null,default:Rh},Symbol.toStringTag,{value:"Module"})),ue=Ih(xh),ua=Oh,fa=ue,$i=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ua.isColorSupported),fa&&t&&(s=fa(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ua.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Jt(Error)),ki=$i;$i.default=$i;var Ge={};Ge.isClean=Symbol("isClean"),Ge.my=Symbol("my");var la={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Eh(r){return r[0].toUpperCase()+r.slice(1)}var Pi=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),ca=Pi;Pi.default=Pi;var Ah=ca;function _i(r,i){var o=new Ah(i);o.stringify(r)}var Br=_i;_i.default=_i;var Ur=Ge.isClean,Mh=Ge.my,$h=ki,kh=ca,Ph=Br;function Ti(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Ti(s,o)}):(n==="object"&&t!==null&&(t=Ti(t)),o[e]=t)}return o}var Ni=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[Ur]=!1,this[Mh]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Ti(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new $h(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[Ur]){this[Ur]=!1;for(var e=this;e=e.parent;)e[Ur]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=Di(e),Dh(e))return this.mapFile=e,Fh(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,ha))return da.fromSourceMap(t).toString();if(A(t,da))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Bh(Di(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),pa=Fi;Fi.default=Fi;var zh=ue.SourceMapConsumer,Wh=ue.SourceMapGenerator,va=ue.fileURLToPath,Gr=ue.pathToFileURL,Bi=ue.isAbsolute,Ui=ue.resolve,Gh=Lh.nanoid,zi=ue,ma=ki,jh=pa,Wi=Symbol("fromOffsetCache"),qh=!!(zh&&Wh),ga=!!(Ui&&Bi),jr=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!ga||/^\w+:\/\//.test(e.from)||Bi(e.from)?this.file=e.from:this.file=Ui(e.from)),ga&&qh){var t=new jh(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new ma(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new ma(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(Gr&&(a.input.url=Gr(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[Wi])n=this[Wi];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Ui(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;Bi(u.source)?l=Gr(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Gr(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(va)c.file=va(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Yh&&Hh&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Vr.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Vr({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new Vr({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?Hr(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=Hr(ba(n,this.mapOpts.annotation)));var s=wa(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Vh(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(Ca){var n=Ca(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;Sa==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),Ia=Jh,Zh=zr,Gi=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Zh),Yr=Gi;Gi.default=Gi;var Oa=Ge.isClean,Ra=Ge.my,xa=Wr,Ea=Yr,Kh=zr,Aa,ji,qi,Ma;function $a(r){return r.map(function(i){return i.nodes&&(i.nodes=$a(i.nodes)),delete i.source,i})}function ka(r){if(r[Oa]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ka(e)}}var Le=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Kh);Le.registerParse=function(r){Aa=r},Le.registerRule=function(r){ji=r},Le.registerAtRule=function(r){qi=r},Le.registerRoot=function(r){Ma=r};var it=Le;Le.default=Le,Le.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,qi.prototype):r.type==="rule"?Object.setPrototypeOf(r,ji.prototype):r.type==="decl"?Object.setPrototypeOf(r,xa.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ea.prototype):r.type==="root"&&Object.setPrototypeOf(r,Ma.prototype),r[Ra]=!0,r.nodes&&r.nodes.forEach(function(i){Le.rebuild(i)})};var Xh=it,Pa,_a,tr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new Pa(new _a,this,t);return n.stringify()},i})(Xh);tr.registerLazyResult=function(r){Pa=r},tr.registerProcessor=function(r){_a=r};var Vi=tr;tr.default=tr;var Ta={},Na=function(i){Ta[i]||(Ta[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Hi=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),La=Hi;Hi.default=Hi;var Qh=La,Yi=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Qh(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ji=Yi;Yi.default=Yi;var Zi=39,Da=34,Jr=92,Fa=47,Zr=10,rr=32,Kr=12,Xr=9,Qr=13,ed=91,td=93,rd=40,nd=41,id=123,od=125,sd=59,ad=42,ud=58,fd=64,en=/[\t\n\f\r "#'()/;[\\\]{}]/g,tn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,ld=/.[\r\n"'(/\\]/,Ba=/[\da-f]/i,cd=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Zr:case rr:case Xr:case Qr:case Kr:{s=d;do s+=1,n=e.charCodeAt(s);while(n===rr||n===Zr||n===Xr||n===Qr||n===Kr);p=["space",e.slice(d,s)],d=s-1;break}case ed:case td:case id:case od:case ud:case sd:case nd:{var N=String.fromCharCode(n);p=[N,N,d];break}case rd:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==Zi&&v!==Da&&v!==rr&&v!==Zr&&v!==Xr&&v!==Kr&&v!==Qr){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Jr;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||ld.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case Zi:case Da:{a=n===Zi?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Jr;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case fd:{en.lastIndex=d+1,en.test(e),en.lastIndex===0?s=e.length-1:s=en.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Jr:{for(s=d,f=!0;e.charCodeAt(s+1)===Jr;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Fa&&n!==rr&&n!==Zr&&n!==Xr&&n!==Qr&&n!==Kr&&(s+=1,Ba.test(e.charAt(s)))){for(;Ba.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===rr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Fa&&e.charCodeAt(d+1)===ad?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(tn.lastIndex=d+1,tn.test(e),tn.lastIndex===0?s=e.length-1:s=tn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Ua=it,rn=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Wa(new Ga,this,t);return n.stringify()},i})(za);xt.registerLazyResult=function(r){Wa=r},xt.registerProcessor=function(r){Ga=r};var nr=xt;xt.default=xt,za.registerRoot(xt);var ir={comma:function(i){return ir.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return ir.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},ja=ir;ir.default=ir;var qa=it,hd=ja,nn=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return hd.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(qa),Xi=nn;nn.default=nn,qa.registerRule(nn);var dd=Wr,pd=cd,vd=Yr,md=Ki,gd=nr,Va=Xi,Ha={empty:!0,space:!0};function yd(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var wd=(function(){function r(o){this.input=o,this.root=new gd,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new md;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new vd;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=pd(this.input)},i.decl=function(e,t){var n=new dd;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||yd(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Va;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!_d[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Td[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return _r(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!or(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return or(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=xd;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new Rd(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(or(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Ae];)a[Ae]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Md("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(or(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=ou.isColorSupported),su&&t&&(s=su(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=ou.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Jt(Error)),so=oo;oo.default=oo;var je={};je.isClean=Symbol("isClean"),je.my=Symbol("my");var au={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function wp(r){return r[0].toUpperCase()+r.slice(1)}var ao=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),uu=ao;ao.default=ao;var bp=uu;function uo(r,i){var o=new bp(i);o.stringify(r)}var sn=uo;uo.default=uo;var an=je.isClean,Sp=je.my,Cp=so,Ip=uu,Op=sn;function fo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return fo(s,o)}):(n==="object"&&t!==null&&(t=fo(t)),o[e]=t)}return o}var lo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[an]=!1,this[Sp]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=fo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new Cp(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[an]){this[an]=!1;for(var e=this;e=e.parent;)e[an]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ho(e),Mp(e))return this.mapFile=e,$p(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,fu))return lu.fromSourceMap(t).toString();if(A(t,lu))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=kp(ho(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),cu=po;po.default=po;var _p=fe.SourceMapConsumer,Tp=fe.SourceMapGenerator,hu=fe.fileURLToPath,ln=fe.pathToFileURL,vo=fe.isAbsolute,mo=fe.resolve,Np=Ap.nanoid,go=fe,du=so,Lp=cu,yo=Symbol("fromOffsetCache"),Dp=!!(_p&&Tp),pu=!!(mo&&vo),cn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!pu||/^\w+:\/\//.test(e.from)||vo(e.from)?this.file=e.from:this.file=mo(e.from)),pu&&Dp){var t=new Lp(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new du(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new du(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(ln&&(a.input.url=ln(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[yo])n=this[yo];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:mo(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;vo(u.source)?l=ln(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||ln(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(hu)c.file=hu(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Up&&Bp&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=dn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new dn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new dn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?pn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=pn(gu(n,this.mapOpts.annotation)));var s=mu(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new Fp(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(wu){var n=wu(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;yu==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),bu=zp,Wp=un,wo=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(Wp),vn=wo;wo.default=wo;var Su=je.isClean,Cu=je.my,Iu=fn,Ou=vn,Gp=un,Ru,bo,So,xu;function Eu(r){return r.map(function(i){return i.nodes&&(i.nodes=Eu(i.nodes)),delete i.source,i})}function Au(r){if(r[Su]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;Au(e)}}var De=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Gp);De.registerParse=function(r){Ru=r},De.registerRule=function(r){bo=r},De.registerAtRule=function(r){So=r},De.registerRoot=function(r){xu=r};var ot=De;De.default=De,De.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,So.prototype):r.type==="rule"?Object.setPrototypeOf(r,bo.prototype):r.type==="decl"?Object.setPrototypeOf(r,Iu.prototype):r.type==="comment"?Object.setPrototypeOf(r,Ou.prototype):r.type==="root"&&Object.setPrototypeOf(r,xu.prototype),r[Cu]=!0,r.nodes&&r.nodes.forEach(function(i){De.rebuild(i)})};var jp=ot,Mu,$u,ur=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new Mu(new $u,this,t);return n.stringify()},i})(jp);ur.registerLazyResult=function(r){Mu=r},ur.registerProcessor=function(r){$u=r};var Co=ur;ur.default=ur;var ku={},Pu=function(i){ku[i]||(ku[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},Io=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),_u=Io;Io.default=Io;var qp=_u,Oo=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new qp(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),Ro=Oo;Oo.default=Oo;var xo=39,Tu=34,mn=92,Nu=47,gn=10,fr=32,yn=12,wn=9,bn=13,Vp=91,Hp=93,Yp=40,Jp=41,Zp=123,Kp=125,Xp=59,Qp=42,ev=58,tv=64,Sn=/[\t\n\f\r "#'()/;[\\\]{}]/g,Cn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,rv=/.[\r\n"'(/\\]/,Lu=/[\da-f]/i,nv=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case gn:case fr:case wn:case bn:case yn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===fr||n===gn||n===wn||n===bn||n===yn);p=["space",e.slice(d,s)],d=s-1;break}case Vp:case Hp:case Zp:case Kp:case ev:case Xp:case Jp:{var N=String.fromCharCode(n);p=[N,N,d];break}case Yp:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==xo&&v!==Tu&&v!==fr&&v!==gn&&v!==wn&&v!==yn&&v!==bn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===mn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||rv.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case xo:case Tu:{a=n===xo?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===mn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case tv:{Sn.lastIndex=d+1,Sn.test(e),Sn.lastIndex===0?s=e.length-1:s=Sn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case mn:{for(s=d,f=!0;e.charCodeAt(s+1)===mn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==Nu&&n!==fr&&n!==gn&&n!==wn&&n!==bn&&n!==yn&&(s+=1,Lu.test(e.charAt(s)))){for(;Lu.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===fr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===Nu&&e.charCodeAt(d+1)===Qp?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(Cn.lastIndex=d+1,Cn.test(e),Cn.lastIndex===0?s=e.length-1:s=Cn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},Du=ot,In=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Bu(new Uu,this,t);return n.stringify()},i})(Fu);Mt.registerLazyResult=function(r){Bu=r},Mt.registerProcessor=function(r){Uu=r};var lr=Mt;Mt.default=Mt,Fu.registerRoot(Mt);var cr={comma:function(i){return cr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return cr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},zu=cr;cr.default=cr;var Wu=ot,iv=zu,On=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return iv.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Wu),Ao=On;On.default=On,Wu.registerRule(On);var ov=fn,sv=nv,av=vn,uv=Eo,fv=lr,Gu=Ao,ju={empty:!0,space:!0};function lv(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var cv=(function(){function r(o){this.input=o,this.root=new fv,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new uv;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new av;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=sv(this.input)},i.decl=function(e,t){var n=new ov;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||lv(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Gu;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!Rv[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!xv[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return _r(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!hr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return hr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=yv;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new gv(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(hr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Me];)a[Me]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Sv("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(hr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndexi?(e&&(clearTimeout(e),e=null),t=u,r.apply(l,s)):!e&&o.trailing!==!1&&(e=setTimeout(function(){t=o.leading===!1?0:Date.now(),e=null,r.apply(l,s)},f))}}function En(r,i,o,e,t){t===void 0&&(t=window);var n=t.Object.getOwnPropertyDescriptor(r,i);return t.Object.defineProperty(r,i,e?o:{set:function(a){var u=this;setTimeout(function(){o.set.call(u,a)},0),n&&n.set&&n.set.call(this,a)}}),function(){return En(r,i,n||{},!0)}}var An=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(An=function(){return new Date().getTime()});function af(r){var i,o,e,t,n=r.document;return{left:n.scrollingElement?n.scrollingElement.scrollLeft:r.pageXOffset!==void 0?r.pageXOffset:n.documentElement.scrollLeft||(n==null?void 0:n.body)&&((i=F.parentElement(n.body))==null?void 0:i.scrollLeft)||((o=n==null?void 0:n.body)==null?void 0:o.scrollLeft)||0,top:n.scrollingElement?n.scrollingElement.scrollTop:r.pageYOffset!==void 0?r.pageYOffset:(n==null?void 0:n.documentElement.scrollTop)||(n==null?void 0:n.body)&&((e=F.parentElement(n.body))==null?void 0:e.scrollTop)||((t=n==null?void 0:n.body)==null?void 0:t.scrollTop)||0}}function uf(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function ff(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function lf(r){if(!r)return null;var i=r.nodeType===r.ELEMENT_NODE?r:F.parentElement(r);return i}function ge(r,i,o,e){if(!r)return!1;var t=lf(r);if(!t)return!1;try{if(typeof i=="string"){if(t.classList.contains(i)||e&&t.closest("."+i)!==null)return!0}else if(Fr(t,i,e))return!0}catch(n){}return!!(o&&(t.matches(o)||e&&t.closest(o)!==null))}function gm(r,i){return i.getId(r)!==-1}function Do(r,i,o){return r.tagName==="TITLE"&&o.headTitleMutations?!0:i.getId(r)===er}function cf(r,i){if(Zt(r))return!1;var o=i.getId(r);if(!i.has(o))return!0;var e=F.parentNode(r);return e&&e.nodeType===r.DOCUMENT_NODE?!1:e?cf(e,i):!0}function Fo(r){return!!r.changedTouches}function ym(r){r===void 0&&(r=window),"NodeList"in r&&!r.NodeList.prototype.forEach&&(r.NodeList.prototype.forEach=Array.prototype.forEach),"DOMTokenList"in r&&!r.DOMTokenList.prototype.forEach&&(r.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function hf(r,i){return!!(r.nodeName==="IFRAME"&&i.getMeta(r))}function df(r,i){return!!(r.nodeName==="LINK"&&r.nodeType===r.ELEMENT_NODE&&r.getAttribute&&r.getAttribute("rel")==="stylesheet"&&i.getMeta(r))}function Bo(r){return r?A(r,im)&&"shadowRoot"in r?!!r.shadowRoot:!!F.shadowRoot(r):!1}var wm=(function(){function r(){O(this,"id",1),O(this,"styleIDMap",new WeakMap),O(this,"idStyleMap",new Map)}var i=r.prototype;return i.getId=function(e){var t;return(t=this.styleIDMap.get(e))!=null?t:-1},i.has=function(e){return this.styleIDMap.has(e)},i.add=function(e,t){if(this.has(e))return this.getId(e);var n;return t===void 0?n=this.id++:n=t,this.styleIDMap.set(e,n),this.idStyleMap.set(n,e),n},i.getStyle=function(e){return this.idStyleMap.get(e)||null},i.reset=function(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1},i.generateId=function(){return this.id++},i.remove=function(e){var t=this.styleIDMap.get(e);return t!==void 0?(this.styleIDMap.delete(e),this.idStyleMap.delete(t),!0):!1},r})();function pf(r){var i,o=null;return"getRootNode"in r&&((i=F.getRootNode(r))==null?void 0:i.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&F.host(F.getRootNode(r))&&(o=F.host(F.getRootNode(r))),o}function bm(r){for(var i=r,o;o=pf(i);)i=o;return i}function Sm(r){var i=r.ownerDocument;if(!i)return!1;var o=bm(r);return F.contains(i,o)}function vf(r){var i=r.ownerDocument;return i?F.contains(i,r)||Sm(r):!1}var B=(function(r){return r[r.DomContentLoaded=0]="DomContentLoaded",r[r.Load=1]="Load",r[r.FullSnapshot=2]="FullSnapshot",r[r.IncrementalSnapshot=3]="IncrementalSnapshot",r[r.Meta=4]="Meta",r[r.Custom=5]="Custom",r[r.Plugin=6]="Plugin",r})(B||{}),_=(function(r){return r[r.Mutation=0]="Mutation",r[r.MouseMove=1]="MouseMove",r[r.MouseInteraction=2]="MouseInteraction",r[r.Scroll=3]="Scroll",r[r.ViewportResize=4]="ViewportResize",r[r.Input=5]="Input",r[r.TouchMove=6]="TouchMove",r[r.MediaInteraction=7]="MediaInteraction",r[r.StyleSheetRule=8]="StyleSheetRule",r[r.CanvasMutation=9]="CanvasMutation",r[r.Font=10]="Font",r[r.Log=11]="Log",r[r.Drag=12]="Drag",r[r.StyleDeclaration=13]="StyleDeclaration",r[r.Selection=14]="Selection",r[r.AdoptedStyleSheet=15]="AdoptedStyleSheet",r[r.CustomElement=16]="CustomElement",r})(_||{}),we=(function(r){return r[r.MouseUp=0]="MouseUp",r[r.MouseDown=1]="MouseDown",r[r.Click=2]="Click",r[r.ContextMenu=3]="ContextMenu",r[r.DblClick=4]="DblClick",r[r.Focus=5]="Focus",r[r.Blur=6]="Blur",r[r.TouchStart=7]="TouchStart",r[r.TouchMove_Departed=8]="TouchMove_Departed",r[r.TouchEnd=9]="TouchEnd",r[r.TouchCancel=10]="TouchCancel",r})(we||{}),Fe=(function(r){return r[r.Mouse=0]="Mouse",r[r.Pen=1]="Pen",r[r.Touch=2]="Touch",r})(Fe||{}),_t=(function(r){return r[r["2D"]=0]="2D",r[r.WebGL=1]="WebGL",r[r.WebGL2=2]="WebGL2",r})(_t||{}),Tt=(function(r){return r[r.Play=0]="Play",r[r.Pause=1]="Pause",r[r.Seeked=2]="Seeked",r[r.VolumeChange=3]="VolumeChange",r[r.RateChange=4]="RateChange",r})(Tt||{}),mf=(function(r){return r[r.Document=0]="Document",r[r.DocumentType=1]="DocumentType",r[r.Element=2]="Element",r[r.Text=3]="Text",r[r.CDATA=4]="CDATA",r[r.Comment=5]="Comment",r})(mf||{});function gf(r){return"__ln"in r}var Cm=(function(){function r(){O(this,"length",0),O(this,"head",null),O(this,"tail",null)}var i=r.prototype;return i.get=function(e){if(e>=this.length)throw new Error("Position outside of list range");for(var t=this.head,n=0;n=0;i--){var o=$e[i];o.getDoc()===r&&$e.splice(i,1)}}function Mm(r){var i=r.mousemoveCb,o=r.sampling,e=r.doc,t=r.mirror;if(o.mousemove===!1)return function(){};var n=typeof o.mousemove=="number"?o.mousemove:50,s=typeof o.mousemoveCallback=="number"?o.mousemoveCallback:500,a=[],u,f=vr(U(function(h){var v=Date.now()-u;i(a.map(function(p){return p.timeOffset-=v,p}),h),a=[],u=null}),s),l=U(vr(U(function(h){var v=gr(h),p=Fo(h)?h.changedTouches[0]:h,m=p.clientX,d=p.clientY;u||(u=An()),a.push({x:m,y:d,id:t.getId(v),timeOffset:An()-u}),f(typeof DragEvent!="undefined"&&A(h,DragEvent)?_.Drag:A(h,MouseEvent)?_.MouseMove:_.TouchMove)}),n,{trailing:!1})),c=[me("mousemove",l,e),me("touchmove",l,e),me("drag",l,e)];return U(function(){c.forEach(function(h){return h()})})}function $m(r){var i=r.mouseInteractionCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling;if(s.mouseInteraction===!1)return function(){};var a=s.mouseInteraction===!0||s.mouseInteraction===void 0?{}:s.mouseInteraction,u=[],f=null,l=function(c){return function(h){var v=gr(h);if(!ge(v,t,n,!0)){var p=null,m=c;if("pointerType"in h){switch(h.pointerType){case"mouse":p=Fe.Mouse;break;case"touch":p=Fe.Touch;break;case"pen":p=Fe.Pen;break}p===Fe.Touch?we[c]===we.MouseDown?m="TouchStart":we[c]===we.MouseUp&&(m="TouchEnd"):Fe.Pen}else Fo(h)&&(p=Fe.Touch);p!==null?(f=p,(m.startsWith("Touch")&&p===Fe.Touch||m.startsWith("Mouse")&&p===Fe.Mouse)&&(p=null)):we[c]===we.Click&&(p=f,f=null);var d=Fo(h)?h.changedTouches[0]:h;if(d){var g=e.getId(v),w=d.clientX,b=d.clientY;U(i)(T({type:we[m],id:g,x:w,y:b},p!==null&&{pointerType:p}))}}}};return Object.keys(we).filter(function(c){return Number.isNaN(Number(c))&&!c.endsWith("_Departed")&&a[c]!==!1}).forEach(function(c){var h=nt(c),v=l(c);if(window.PointerEvent)switch(we[c]){case we.MouseDown:case we.MouseUp:h=h.replace("mouse","pointer");break;case we.TouchStart:case we.TouchEnd:return}u.push(me(h,v,o))}),U(function(){u.forEach(function(c){return c()})})}function If(r){var i=r.scrollCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.sampling,a=U(vr(U(function(u){var f=gr(u);if(!(!f||ge(f,t,n,!0))){var l=e.getId(f);if(f===o&&o.defaultView){var c=af(o.defaultView);i({id:l,x:c.left,y:c.top})}else i({id:l,x:f.scrollLeft,y:f.scrollTop})}}),s.scroll||100));return me("scroll",a,o)}function km(r,i){var o=r.viewportResizeCb,e=i.win,t=-1,n=-1,s=U(vr(U(function(){var a=uf(),u=ff();(t!==a||n!==u)&&(o({width:Number(u),height:Number(a)}),t=a,n=u)}),200));return me("resize",s,e)}var Pm=["INPUT","TEXTAREA","SELECT"],Of=new WeakMap;function _m(r){var i=r.inputCb,o=r.doc,e=r.mirror,t=r.blockClass,n=r.blockSelector,s=r.ignoreClass,a=r.ignoreSelector,u=r.maskInputOptions,f=r.maskInputFn,l=r.sampling,c=r.userTriggeredOnInput;function h(S){var C=gr(S),R=S.isTrusted,E=C&&C.tagName;if(C&&E==="OPTION"&&(C=F.parentElement(C)),!(!C||!E||Pm.indexOf(E)<0||ge(C,t,n,!0))&&!(C.classList.contains(s)||a&&C.matches(a))){var x=C.value,k=!1,N=Qt(C)||"";N==="radio"||N==="checkbox"?k=C.checked:(u[E.toLowerCase()]||u[N])&&(x=Xt({element:C,maskInputOptions:u,tagName:E,type:N,value:x,maskInputFn:f})),v(C,c?{text:x,isChecked:k,userTriggered:R}:{text:x,isChecked:k});var ae=C.name;N==="radio"&&ae&&k&&o.querySelectorAll('input[type="radio"][name="'+ae+'"]').forEach(function(P){if(P!==C){var D=P.value;v(P,c?{text:D,isChecked:!k,userTriggered:!1}:{text:D,isChecked:!k})}})}}function v(S,C){var R=Of.get(S);if(!R||R.text!==C.text||R.isChecked!==C.isChecked){Of.set(S,C);var E=e.getId(S);U(i)(T({},C,{id:E}))}}var p=l.input==="last"?["change"]:["input","change"],m=p.map(function(S){return me(S,U(h),o)}),d=o.defaultView;if(!d)return function(){m.forEach(function(S){return S()})};var g=d.Object.getOwnPropertyDescriptor(d.HTMLInputElement.prototype,"value"),w=[[d.HTMLInputElement.prototype,"value"],[d.HTMLInputElement.prototype,"checked"],[d.HTMLSelectElement.prototype,"value"],[d.HTMLTextAreaElement.prototype,"value"],[d.HTMLSelectElement.prototype,"selectedIndex"],[d.HTMLOptionElement.prototype,"selected"]];if(g&&g.set){var b;(b=m).push.apply(b,[].concat(w.map(function(S){return En(S[0],S[1],{set:function(){U(h)({target:this,isTrusted:!1})}},!1,d)})))}return U(function(){m.forEach(function(S){return S()})})}function Mn(r){var i=[];function o(e,t){if($n("CSSGroupingRule")&&A(e.parentRule,CSSGroupingRule)||$n("CSSMediaRule")&&A(e.parentRule,CSSMediaRule)||$n("CSSSupportsRule")&&A(e.parentRule,CSSSupportsRule)||$n("CSSConditionRule")&&A(e.parentRule,CSSConditionRule)){var n=Array.from(e.parentRule.cssRules),s=n.indexOf(e);t.unshift(s)}else if(e.parentStyleSheet){var a=Array.from(e.parentStyleSheet.cssRules),u=a.indexOf(e);t.unshift(u)}return t}return o(r,i)}function Ve(r,i,o){var e,t;return r?(r.ownerNode?e=i.getId(r.ownerNode):t=o.getId(r),{styleId:t,id:e}):{}}function Tm(r,i){var o=r.styleSheetRuleCb,e=r.mirror,t=r.stylesheetManager,n=i.win;if(!n.CSSStyleSheet||!n.CSSStyleSheet.prototype)return function(){};var s=n.CSSStyleSheet.prototype.insertRule;n.CSSStyleSheet.prototype.insertRule=new Proxy(s,{apply:U(function(h,v,p){var m=p[0],d=p[1],g=Ve(v,e,t.styleMirror),w=g.id,b=g.styleId;return(w&&w!==-1||b&&b!==-1)&&o({id:w,styleId:b,adds:[{rule:m,index:d}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.addRule=function(h,v,p){p===void 0&&(p=this.cssRules.length);var m=h+" { "+v+" }";return n.CSSStyleSheet.prototype.insertRule.apply(this,[m,p])};var a=n.CSSStyleSheet.prototype.deleteRule;n.CSSStyleSheet.prototype.deleteRule=new Proxy(a,{apply:U(function(h,v,p){var m=p[0],d=Ve(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,removes:[{index:m}]}),h.apply(v,p)})}),n.CSSStyleSheet.prototype.removeRule=function(h){return n.CSSStyleSheet.prototype.deleteRule.apply(this,[h])};var u;n.CSSStyleSheet.prototype.replace&&(u=n.CSSStyleSheet.prototype.replace,n.CSSStyleSheet.prototype.replace=new Proxy(u,{apply:U(function(h,v,p){var m=p[0],d=Ve(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replace:m}),h.apply(v,p)})}));var f;n.CSSStyleSheet.prototype.replaceSync&&(f=n.CSSStyleSheet.prototype.replaceSync,n.CSSStyleSheet.prototype.replaceSync=new Proxy(f,{apply:U(function(h,v,p){var m=p[0],d=Ve(v,e,t.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,replaceSync:m}),h.apply(v,p)})}));var l={};kn("CSSGroupingRule")?l.CSSGroupingRule=n.CSSGroupingRule:(kn("CSSMediaRule")&&(l.CSSMediaRule=n.CSSMediaRule),kn("CSSConditionRule")&&(l.CSSConditionRule=n.CSSConditionRule),kn("CSSSupportsRule")&&(l.CSSSupportsRule=n.CSSSupportsRule));var c={};return Object.entries(l).forEach(function(h){var v=h[0],p=h[1];c[v]={insertRule:p.prototype.insertRule,deleteRule:p.prototype.deleteRule},p.prototype.insertRule=new Proxy(c[v].insertRule,{apply:U(function(m,d,g){var w=g[0],b=g[1],S=Ve(d.parentStyleSheet,e,t.styleMirror),C=S.id,R=S.styleId;return(C&&C!==-1||R&&R!==-1)&&o({id:C,styleId:R,adds:[{rule:w,index:[].concat(Mn(d),[b||0])}]}),m.apply(d,g)})}),p.prototype.deleteRule=new Proxy(c[v].deleteRule,{apply:U(function(m,d,g){var w=g[0],b=Ve(d.parentStyleSheet,e,t.styleMirror),S=b.id,C=b.styleId;return(S&&S!==-1||C&&C!==-1)&&o({id:S,styleId:C,removes:[{index:[].concat(Mn(d),[w])}]}),m.apply(d,g)})})}),U(function(){n.CSSStyleSheet.prototype.insertRule=s,n.CSSStyleSheet.prototype.deleteRule=a,u&&(n.CSSStyleSheet.prototype.replace=u),f&&(n.CSSStyleSheet.prototype.replaceSync=f),Object.entries(l).forEach(function(h){var v=h[0],p=h[1];p.prototype.insertRule=c[v].insertRule,p.prototype.deleteRule=c[v].deleteRule})})}function Rf(r,i){var o=r.mirror,e=r.stylesheetManager,t,n,s,a=null;i.nodeName==="#document"?a=o.getId(i):a=o.getId(F.host(i));var u=i.nodeName==="#document"?(t=i.defaultView)==null?void 0:t.Document:(s=(n=i.ownerDocument)==null?void 0:n.defaultView)==null?void 0:s.ShadowRoot,f=u!=null&&u.prototype?Object.getOwnPropertyDescriptor(u==null?void 0:u.prototype,"adoptedStyleSheets"):void 0;return a===null||a===-1||!u||!f?function(){}:(Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:function(){var c;return(c=f.get)==null?void 0:c.call(this)},set:function(c){var h,v=(h=f.set)==null?void 0:h.call(this,c);if(a!==null&&a!==-1)try{e.adoptStyleSheets(c,a)}catch(p){}return v}}),U(function(){Object.defineProperty(i,"adoptedStyleSheets",{configurable:f.configurable,enumerable:f.enumerable,get:f.get,set:f.set})}))}function Nm(r,i){var o=r.styleDeclarationCb,e=r.mirror,t=r.ignoreCSSAttributes,n=r.stylesheetManager,s=i.win,a=s.CSSStyleDeclaration.prototype.setProperty;s.CSSStyleDeclaration.prototype.setProperty=new Proxy(a,{apply:U(function(f,l,c){var h,v=c[0],p=c[1],m=c[2];if(t.has(v))return a.apply(l,[v,p,m]);var d=Ve((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),g=d.id,w=d.styleId;return(g&&g!==-1||w&&w!==-1)&&o({id:g,styleId:w,set:{property:v,value:p,priority:m},index:Mn(l.parentRule)}),f.apply(l,c)})});var u=s.CSSStyleDeclaration.prototype.removeProperty;return s.CSSStyleDeclaration.prototype.removeProperty=new Proxy(u,{apply:U(function(f,l,c){var h,v=c[0];if(t.has(v))return u.apply(l,[v]);var p=Ve((h=l.parentRule)==null?void 0:h.parentStyleSheet,e,n.styleMirror),m=p.id,d=p.styleId;return(m&&m!==-1||d&&d!==-1)&&o({id:m,styleId:d,remove:{property:v},index:Mn(l.parentRule)}),f.apply(l,c)})}),U(function(){s.CSSStyleDeclaration.prototype.setProperty=a,s.CSSStyleDeclaration.prototype.removeProperty=u})}function Lm(r){var i=r.mediaInteractionCb,o=r.blockClass,e=r.blockSelector,t=r.mirror,n=r.sampling,s=r.doc,a=U(function(f){return vr(U(function(l){var c=gr(l);if(!(!c||ge(c,o,e,!0))){var h=c.currentTime,v=c.volume,p=c.muted,m=c.playbackRate,d=c.loop;i({type:f,id:t.getId(c),currentTime:h,volume:v,muted:p,playbackRate:m,loop:d})}}),n.media||500)}),u=[me("play",a(Tt.Play),s),me("pause",a(Tt.Pause),s),me("seeked",a(Tt.Seeked),s),me("volumechange",a(Tt.VolumeChange),s),me("ratechange",a(Tt.RateChange),s)];return U(function(){u.forEach(function(f){return f()})})}function Dm(r){var i=r.fontCb,o=r.doc,e=o.defaultView;if(!e)return function(){};var t=[],n=new WeakMap,s=e.FontFace;e.FontFace=function(f,l,c){var h=new s(f,l,c);return n.set(h,{family:f,buffer:typeof l!="string",descriptors:c,fontSource:typeof l=="string"?l:JSON.stringify(Array.from(new Uint8Array(l)))}),h};var a=st(o.fonts,"add",function(u){return function(f){return setTimeout(U(function(){var l=n.get(f);l&&(i(l),n.delete(f))}),0),u.apply(this,[f])}});return t.push(function(){e.FontFace=s}),t.push(a),U(function(){t.forEach(function(u){return u()})})}function Fm(r){var i=r.doc,o=r.mirror,e=r.blockClass,t=r.blockSelector,n=r.selectionCb,s=!0,a=U(function(){var u=i.getSelection();if(!(!u||s&&(u!=null&&u.isCollapsed))){s=u.isCollapsed||!1;for(var f=[],l=u.rangeCount||0,c=0;c0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))},i.handleMessage=function(e){var t=e;if(!(t.data.type!=="rrweb"||t.origin!==t.data.origin)){var n=e.source;if(n){var s=this.crossOriginIframeMap.get(e.source);if(s){var a=this.transformCrossOriginEvent(s,t.data.event);a&&this.wrappedEmit(a,t.data.isCheckout)}}}},i.transformCrossOriginEvent=function(e,t){var n=this,s;switch(t.type){case B.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(t.data.node,e);var a=t.data.node.id;return this.crossOriginIframeRootIdMap.set(e,a),this.patchRootIdOnNode(t.data.node,a),{timestamp:t.timestamp,type:B.IncrementalSnapshot,data:{source:_.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:t.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case B.Meta:case B.Load:case B.DomContentLoaded:return!1;case B.Plugin:return t;case B.Custom:return this.replaceIds(t.data.payload,e,["id","parentId","previousId","nextId"]),t;case B.IncrementalSnapshot:switch(t.data.source){case _.Mutation:return t.data.adds.forEach(function(u){n.replaceIds(u,e,["parentId","nextId","previousId"]),n.replaceIdOnNode(u.node,e);var f=n.crossOriginIframeRootIdMap.get(e);f&&n.patchRootIdOnNode(u.node,f)}),t.data.removes.forEach(function(u){n.replaceIds(u,e,["parentId","id"])}),t.data.attributes.forEach(function(u){n.replaceIds(u,e,["id"])}),t.data.texts.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case _.Drag:case _.TouchMove:case _.MouseMove:return t.data.positions.forEach(function(u){n.replaceIds(u,e,["id"])}),t;case _.ViewportResize:return!1;case _.MediaInteraction:case _.MouseInteraction:case _.Scroll:case _.CanvasMutation:case _.Input:return this.replaceIds(t.data,e,["id"]),t;case _.StyleSheetRule:case _.StyleDeclaration:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleId"]),t;case _.Font:return t;case _.Selection:return t.data.ranges.forEach(function(u){n.replaceIds(u,e,["start","end"])}),t;case _.AdoptedStyleSheet:return this.replaceIds(t.data,e,["id"]),this.replaceStyleIds(t.data,e,["styleIds"]),(s=t.data.styles)==null||s.forEach(function(u){n.replaceStyleIds(u,e,["styleId"])}),t}}return!1},i.replace=function(e,t,n,s){for(var a=I(s),u;!(u=a()).done;){var f=u.value;!Array.isArray(t[f])&&typeof t[f]!="number"||(Array.isArray(t[f])?t[f]=e.getIds(n,t[f]):t[f]=e.getId(n,t[f]))}return t},i.replaceIds=function(e,t,n){return this.replace(this.crossOriginIframeMirror,e,t,n)},i.replaceStyleIds=function(e,t,n){return this.replace(this.crossOriginIframeStyleMirror,e,t,n)},i.replaceIdOnNode=function(e,t){var n=this;this.replaceIds(e,t,["id","rootId"]),"childNodes"in e&&e.childNodes.forEach(function(s){n.replaceIdOnNode(s,t)})},i.patchRootIdOnNode=function(e,t){var n=this;e.type!==mf.Document&&!e.rootId&&(e.rootId=t),"childNodes"in e&&e.childNodes.forEach(function(s){n.patchRootIdOnNode(s,t)})},r})(),Gm=(function(){function r(o){O(this,"shadowDoms",new WeakSet),O(this,"mutationCb"),O(this,"scrollCb"),O(this,"bypassOptions"),O(this,"mirror"),O(this,"restoreHandlers",[]),this.mutationCb=o.mutationCb,this.scrollCb=o.scrollCb,this.bypassOptions=o.bypassOptions,this.mirror=o.mirror,this.init()}var i=r.prototype;return i.init=function(){this.reset(),this.patchAttachShadow(Element,document)},i.addShadowRoot=function(e,t){var n=this;if(Kt(e)&&!this.shadowDoms.has(e)){this.shadowDoms.add(e);var s=Cf(T({},this.bypassOptions,{doc:t,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(function(){return s.disconnect()}),this.restoreHandlers.push(If(T({},this.bypassOptions,{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(function(){e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&n.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,n.mirror.getId(F.host(e))),n.restoreHandlers.push(Rf({mirror:n.mirror,stylesheetManager:n.bypassOptions.stylesheetManager},e))},0)}},i.observeAttachShadow=function(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)},i.patchAttachShadow=function(e,t){var n=this;this.restoreHandlers.push(st(e.prototype,"attachShadow",function(s){return function(a){var u=s.call(this,a),f=F.shadowRoot(this);return f&&vf(this)&&n.addShadowRoot(f,t),u}}))},i.reset=function(){this.restoreHandlers.forEach(function(e){try{e()}catch(t){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet},r})(),Nt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",jm=typeof Uint8Array=="undefined"?[]:new Uint8Array(256),Pn=0;Pn>2],n+=Nt[(o[e]&3)<<4|o[e+1]>>4],n+=Nt[(o[e+1]&15)<<2|o[e+2]>>6],n+=Nt[o[e+2]&63];return t%3===2?n=n.substring(0,n.length-1)+"=":t%3===1&&(n=n.substring(0,n.length-2)+"=="),n},Ef=new Map;function Vm(r,i){var o=Ef.get(r);return o||(o=new Map,Ef.set(r,o)),o.has(i)||o.set(i,[]),o.get(i)}var Af=function(r,i,o){if(!(!r||!($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"))){var e=r.constructor.name,t=Vm(o,e),n=t.indexOf(r);return n===-1&&(n=t.length,t.push(r)),n}};function _n(r,i,o){if(A(r,Array))return r.map(function(p){return _n(p,i,o)});if(r===null)return r;if(A(r,Float32Array)||A(r,Float64Array)||A(r,Int32Array)||A(r,Uint32Array)||A(r,Uint8Array)||A(r,Uint16Array)||A(r,Int16Array)||A(r,Int8Array)||A(r,Uint8ClampedArray)){var e=r.constructor.name;return{rr_type:e,args:[Object.values(r)]}}else if(A(r,ArrayBuffer)){var t=r.constructor.name,n=qm(r);return{rr_type:t,base64:n}}else if(A(r,DataView)){var s=r.constructor.name;return{rr_type:s,args:[_n(r.buffer,i,o),r.byteOffset,r.byteLength]}}else if(A(r,HTMLImageElement)){var a=r.constructor.name,u=r.src;return{rr_type:a,src:u}}else if(A(r,HTMLCanvasElement)){var f="HTMLImageElement",l=r.toDataURL();return{rr_type:f,src:l}}else if(A(r,ImageData)){var c=r.constructor.name;return{rr_type:c,args:[_n(r.data,i,o),r.width,r.height]}}else if($f(r,i)||(typeof r=="undefined"?"undefined":M(r))==="object"){var h=r.constructor.name,v=Af(r,i,o);return{rr_type:h,index:v}}return r}var Mf=function(r,i,o){return r.map(function(e){return _n(e,i,o)})},$f=function(r,i){var o=["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"],e=o.filter(function(t){return typeof i[t]=="function"});return!!e.find(function(t){return A(r,i[t])})};function Hm(r,i,o,e){for(var t=function(){var f=u.value;try{if(typeof i.CanvasRenderingContext2D.prototype[f]!="function")return"continue";var l=st(i.CanvasRenderingContext2D.prototype,f,function(h){return function(){for(var v=this,p=arguments.length,m=new Array(p),d=0;d1?u-1:0),l=1;l0&&(a.styles=u),this.adoptedStyleSheetCb(a)}},i.reset=function(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet},i.cleanupStylesheetsForRemovedNode=function(e){var t=this;try{if(e.nodeType===Node.DOCUMENT_NODE){var n=e;if(n.adoptedStyleSheets)for(var s=I(n.adoptedStyleSheets),a;!(a=s()).done;){var u=a.value;this.styleMirror.remove(u)}}if(e.nodeName==="STYLE"){var f=e;f.sheet&&this.styleMirror.remove(f.sheet)}if(e.nodeName==="LINK"&&e.rel==="stylesheet"){var l=e;l.sheet&&this.styleMirror.remove(l.sheet)}e.childNodes&&e.childNodes.forEach(function(c){t.cleanupStylesheetsForRemovedNode(c)})}catch(c){}},i.trackStylesheetInLinkElement=function(e){},r})(),eg=(function(){function r(){O(this,"nodeMap",new WeakMap),O(this,"active",!1)}var i=r.prototype;return i.inOtherBuffer=function(e,t){var n=this.nodeMap.get(e);return n&&Array.from(n).some(function(s){return s!==t})},i.add=function(e,t){var n=this;this.active||(this.active=!0,requestAnimationFrame(function(){n.nodeMap=new WeakMap,n.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(t))},i.destroy=function(){},r})();function tg(r){try{var i=new URL(r).origin;return i!=="null"?i:null}catch(o){return null}}function rg(r){if(!Array.isArray(r)||r.length===0)throw new Error("[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.");for(var i=new Set,o=0;o0&&(vt=rg(de),vt.size===0&&(vt=void 0));var mt=ie?window.parent===window:!0,gt=!1;if(!mt)try{window.parent.document&&(gt=!1)}catch(W){gt=!0}if(mt&&!i)throw new Error("emit function is required");if(!mt&&!gt)return function(){};D!==void 0&&N.mousemove===void 0&&(N.mousemove=D),Re.reset();var yt=w===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:b!==void 0?b:{password:!0},wt=S===!0||S==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:S==="all",headMetaDescKeywords:S==="all",headTitleMutations:S==="all"}:S||{};ym();var Ue,Ht=0,gc=function(W){for(var ye=I(et||[]),$;!($=ye()).done;){var J=$.value;J.eventProcessor&&(W=J.eventProcessor(W))}return x&&!gt&&(W=x(W)),W};se=function(W,ye){var $,J=W;if(J.timestamp=An(),($=$e[0])!=null&&$.isFrozen()&&J.type!==B.FullSnapshot&&!(J.type===B.IncrementalSnapshot&&J.data.source===_.Mutation)&&$e.forEach(function(ab){return ab.unfreeze()}),mt)i==null||i(gc(J),ye);else if(gt){var Ct={type:"rrweb",event:gc(J),origin:window.location.origin,isCheckout:ye};if(vt)for(var Us=I(vt),Ic;!(Ic=Us()).done;){var ib=Ic.value;window.parent.postMessage(Ct,ib)}else window.parent.postMessage(Ct,"*")}if(J.type===B.FullSnapshot)Ue=J,Ht=0;else if(J.type===B.IncrementalSnapshot){if(J.data.source===_.Mutation&&J.data.isAttachIframe)return;Ht++;var ob=e&&Ht>=e,sb=o&&J.timestamp-Ue.timestamp>o;(ob||sb)&&Tn(!0)}};for(var wi=function(W){se({type:B.IncrementalSnapshot,data:T({source:_.Mutation},W)})},yc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:_.Scroll},W)})},wc=function(W){return se({type:B.IncrementalSnapshot,data:T({source:_.CanvasMutation},W)})},rb=function(W){return se({type:B.IncrementalSnapshot,data:T({source:_.AdoptedStyleSheet},W)})},bt=new Qm({mutationCb:wi,adoptedStyleSheetCb:rb}),ze=new Wm({mirror:Re,mutationCb:wi,stylesheetManager:bt,recordCrossOriginIframes:ie,wrappedEmit:se}),nb=I(et||[]),bc;!(bc=nb()).done;){var Sc=bc.value;Sc.getMirror&&Sc.getMirror({nodeMirror:Re,crossOriginIframeMirror:ze.crossOriginIframeMirror,crossOriginIframeStyleMirror:ze.crossOriginIframeStyleMirror})}var Fs=new eg;zo=new Xm({recordCanvas:be,mutationCb:wc,win:window,blockClass:n,blockSelector:a,mirror:Re,sampling:N.canvas,dataURLOptions:P});var bi=new Gm({mutationCb:wi,scrollCb:yc,bypassOptions:{blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskInputOptions:yt,dataURLOptions:P,maskTextFn:R,maskInputFn:C,recordCanvas:be,inlineImages:qt,sampling:N,slimDOMOptions:wt,iframeManager:ze,stylesheetManager:bt,canvasManager:zo,keepIframeSrcFn:Vt,processedNodeManager:Fs},mirror:Re});Tn=function(W){if(W===void 0&&(W=!1),!!z){se({type:B.Meta,data:{href:window.location.href,width:ff(),height:uf()}},W),bt.reset(),bi.init(),$e.forEach(function($){return $.lock()});var ye=Sh(document,{mirror:Re,blockClass:n,blockSelector:a,maskTextClass:v,maskTextSelector:m,inlineStylesheet:g,maskAllInputs:yt,maskTextFn:R,maskInputFn:C,slimDOM:wt,dataURLOptions:P,recordCanvas:be,inlineImages:qt,onSerialize:function($){hf($,Re)&&ze.addIframe($),df($,Re)&&bt.trackLinkElement($),Bo($)&&bi.addShadowRoot(F.shadowRoot($),document)},onIframeLoad:function($,J){ze.attachIframe($,J),bi.observeAttachShadow($)},onStylesheetLoad:function($,J){bt.attachLinkElement($,J)},keepIframeSrcFn:Vt});if(!ye)return console.warn("Failed to snapshot the document");se({type:B.FullSnapshot,data:{node:ye,initialOffset:af(window)}},W),$e.forEach(function($){return $.unlock()}),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&bt.adoptStyleSheets(document.adoptedStyleSheets,Re.getId(document))}};try{var St=[],Cc=function(W){var ye;return U(zm)({mutationCb:wi,mousemoveCb:function($,J){return se({type:B.IncrementalSnapshot,data:{source:J,positions:$}})},mouseInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.MouseInteraction},$)})},scrollCb:yc,viewportResizeCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.ViewportResize},$)})},inputCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.Input},$)})},mediaInteractionCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.MediaInteraction},$)})},styleSheetRuleCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.StyleSheetRule},$)})},styleDeclarationCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.StyleDeclaration},$)})},canvasMutationCb:wc,fontCb:function($){return se({type:B.IncrementalSnapshot,data:T({source:_.Font},$)})},selectionCb:function($){se({type:B.IncrementalSnapshot,data:T({source:_.Selection},$)})},customElementCb:function($){se({type:B.IncrementalSnapshot,data:T({source:_.CustomElement},$)})},blockClass:n,ignoreClass:f,ignoreSelector:c,maskTextClass:v,maskTextSelector:m,maskInputOptions:yt,inlineStylesheet:g,sampling:N,recordDOM:z,recordCanvas:be,inlineImages:qt,userTriggeredOnInput:Oe,collectFonts:G,doc:W,maskInputFn:C,maskTextFn:R,keepIframeSrcFn:Vt,blockSelector:a,slimDOMOptions:wt,dataURLOptions:P,mirror:Re,iframeManager:ze,stylesheetManager:bt,shadowDomManager:bi,processedNodeManager:Fs,canvasManager:zo,ignoreCSSAttributes:yi,plugins:((ye=et==null?void 0:et.filter(function($){return $.observer}))==null?void 0:ye.map(function($){return{observer:$.observer,options:$.options,callback:function(J){return se({type:B.Plugin,data:{plugin:$.name,payload:J}})}}}))||[]},E)};ze.addLoadListener(function(W){try{var ye=W.contentDocument,$=Cc(ye);St.push($);var J=ze.getObserverCleanup(W);ze.setObserverCleanup(W,function(){if(J)try{J()}catch(Us){}try{$();var Ct=St.indexOf($);Ct!==-1&&St.splice(Ct,1),Am(ye)}catch(Us){}})}catch(Ct){console.warn(Ct)}});var Bs=function(){Tn(),St.push(Cc(document)),Nn=!0};return document.readyState==="interactive"||document.readyState==="complete"?Bs():(St.push(me("DOMContentLoaded",function(){se({type:B.DomContentLoaded,data:{}}),Ne==="DOMContentLoaded"&&Bs()})),St.push(me("load",function(){se({type:B.Load,data:{}}),Ne==="load"&&Bs()},window))),function(){St.forEach(function(W){try{W()}catch($){var ye=String($).toLowerCase();ye.includes("cross-origin")||console.warn($)}}),Fs.destroy(),Nn=!1,Em()}}catch(W){console.warn(W)}}He.addCustomEvent=function(r,i){if(!Nn)throw new Error("please add custom event after start recording");se({type:B.Custom,data:{tag:r,payload:i}})},He.freezePage=function(){$e.forEach(function(r){return r.freeze()})},He.takeFullSnapshot=function(r){if(!Nn)throw new Error("please take full snapshot after start recording");Tn(r)},He.mirror=Re;var Nf;(function(r){r[r.NotStarted=0]="NotStarted",r[r.Running=1]="Running",r[r.Stopped=2]="Stopped"})(Nf||(Nf={})),He.addCustomEvent,He.freezePage,He.takeFullSnapshot;var Lf={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Df={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Ln={},ng=function(){return!!globalThis.Zone};function Go(r){if(Ln[r])return Ln[r];var i=globalThis[r],o=i.prototype,e=r in Lf?Lf[r]:void 0,t=!!(e&&e.every(function(l){var c,h;return!!((h=(c=Object.getOwnPropertyDescriptor(o,l))==null?void 0:c.get)!=null&&h.toString().includes("[native code]"))})),n=r in Df?Df[r]:void 0,s=!!(n&&n.every(function(l){var c;return typeof o[l]=="function"&&((c=o[l])==null?void 0:c.toString().includes("[native code]"))}));if(t&&s&&!ng())return Ln[r]=i.prototype,i.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return i.prototype;var f=u[r].prototype;return document.body.removeChild(a),f?Ln[r]=f:o}catch(l){return o}}var jo={};function Ye(r,i,o){var e,t=r+"."+String(o);if(jo[t])return jo[t].call(i);var n=Go(r),s=(e=Object.getOwnPropertyDescriptor(n,o))==null?void 0:e.get;return s?(jo[t]=s,s.call(i)):i[o]}var qo={};function Ff(r,i,o){var e=r+"."+String(o);if(qo[e])return qo[e].bind(i);var t=Go(r),n=t[o];return typeof n!="function"?i[o]:(qo[e]=n,n.bind(i))}function ig(r){return Ye("Node",r,"childNodes")}function og(r){return Ye("Node",r,"parentNode")}function sg(r){return Ye("Node",r,"parentElement")}function ag(r){return Ye("Node",r,"textContent")}function ug(r,i){return Ff("Node",r,"contains")(i)}function fg(r){return Ff("Node",r,"getRootNode")()}function lg(r){return!r||!("host"in r)?null:Ye("ShadowRoot",r,"host")}function cg(r){return r.styleSheets}function hg(r){return!r||!("shadowRoot"in r)?null:Ye("Element",r,"shadowRoot")}function dg(r,i){return Ye("Element",r,"querySelector")(i)}function pg(r,i){return Ye("Element",r,"querySelectorAll")(i)}function vg(){return Go("MutationObserver").constructor}function mg(r,i,o){try{if(!(i in r))return function(){};var e=r[i],t=o(e);return typeof t=="function"&&(t.prototype=t.prototype||{},Object.defineProperties(t,{__rrweb_original__:{enumerable:!1,value:e}})),r[i]=t,function(){r[i]=e}}catch(n){return function(){}}}var Bf={childNodes:ig,parentNode:og,parentElement:sg,textContent:ag,contains:ug,getRootNode:fg,host:lg,styleSheets:cg,shadowRoot:hg,querySelector:dg,querySelectorAll:pg,mutationObserver:vg,patch:mg};function Vo(r,i,o){if(!r)return!1;if(r.nodeType!==r.ELEMENT_NODE)return Vo(Bf.parentNode(r),i);for(var e=r.classList.length;e--;){var t=r.classList[e];if(i.test(t))return!0}return Vo(Bf.parentNode(r),i)}function gg(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function yg(r){if(r.__esModule)return r;var i=r.default;if(typeof i=="function"){var o=function e(){return A(this,e)?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};o.prototype=i.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(o,e,t.get?t:{enumerable:!0,get:function(){return r[e]}})}),o}var Ho={exports:{}},Q=String,Uf=function(){return{isColorSupported:!1,reset:Q,bold:Q,dim:Q,italic:Q,underline:Q,inverse:Q,hidden:Q,strikethrough:Q,black:Q,red:Q,green:Q,yellow:Q,blue:Q,magenta:Q,cyan:Q,white:Q,gray:Q,bgBlack:Q,bgRed:Q,bgGreen:Q,bgYellow:Q,bgBlue:Q,bgMagenta:Q,bgCyan:Q,bgWhite:Q}};Ho.exports=Uf(),Ho.exports.createColors=Uf;var wg=Ho.exports,bg={},Sg=Object.freeze(Object.defineProperty({__proto__:null,default:bg},Symbol.toStringTag,{value:"Module"})),le=yg(Sg),zf=wg,Wf=le,Yo=(function(r){ee(i,r);function i(e,t,n,s,a,u){var f;return f=r.call(this,e)||this,f.name="CssSyntaxError",f.reason=e,a&&(f.file=a),s&&(f.source=s),u&&(f.plugin=u),typeof t!="undefined"&&typeof n!="undefined"&&(typeof t=="number"?(f.line=t,f.column=n):(f.line=t.line,f.column=t.column,f.endLine=n.line,f.endColumn=n.column)),f.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(f,i),f}var o=i.prototype;return o.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},o.showSourceCode=function(t){var n=this;if(!this.source)return"";var s=this.source;t==null&&(t=zf.isColorSupported),Wf&&t&&(s=Wf(s));var a=s.split(/\r?\n/),u=Math.max(this.line-3,0),f=Math.min(this.line+2,a.length),l=String(f).length,c,h;if(t){var v=zf.createColors(!0),p=v.bold,m=v.gray,d=v.red;c=function(g){return p(d(g))},h=function(g){return m(g)}}else c=h=function(g){return g};return a.slice(u,f).map(function(g,w){var b=u+1+w,S=" "+(" "+b).slice(-l)+" | ";if(b===n.line){var C=h(S.replace(/\d/g," "))+g.slice(0,n.column-1).replace(/[^\t]/g," ");return c(">")+h(S)+g+"\n "+C+c("^")}return" "+h(S)+g}).join("\n")},o.toString=function(){var t=this.showSourceCode();return t&&(t="\n\n"+t+"\n"),this.name+": "+this.message+t},i})(Jt(Error)),Jo=Yo;Yo.default=Yo;var Je={};Je.isClean=Symbol("isClean"),Je.my=Symbol("my");var Gf={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Cg(r){return r[0].toUpperCase()+r.slice(1)}var Zo=(function(){function r(o){this.builder=o}var i=r.prototype;return i.atrule=function(e,t){var n="@"+e.name,s=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?n+=e.raws.afterName:s&&(n+=" "),e.nodes)this.block(e,n+s);else{var a=(e.raws.between||"")+(t?";":"");this.builder(n+s+a,e)}},i.beforeAfter=function(e,t){var n;e.type==="decl"?n=this.raw(e,null,"beforeDecl"):e.type==="comment"?n=this.raw(e,null,"beforeComment"):t==="before"?n=this.raw(e,null,"beforeRule"):n=this.raw(e,null,"beforeClose");for(var s=e.parent,a=0;s&&s.type!=="root";)a+=1,s=s.parent;if(n.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var f=0;f0&&e.nodes[t].type==="comment";)t-=1;for(var n=this.raw(e,"semicolon"),s=0;s0&&typeof n.raws.after!="undefined")return t=n.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawBeforeComment=function(e,t){var n;return e.walkComments(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeDecl=function(e,t){var n;return e.walkDecls(function(s){if(typeof s.raws.before!="undefined")return n=s.raws.before,n.includes("\n")&&(n=n.replace(/[^\n]+$/,"")),!1}),typeof n=="undefined"?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/\S/g,"")),n},i.rawBeforeOpen=function(e){var t;return e.walk(function(n){if(n.type!=="decl"&&(t=n.raws.between,typeof t!="undefined"))return!1}),t},i.rawBeforeRule=function(e){var t;return e.walk(function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&typeof n.raws.before!="undefined")return t=n.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1}),t&&(t=t.replace(/\S/g,"")),t},i.rawColon=function(e){var t;return e.walkDecls(function(n){if(typeof n.raws.between!="undefined")return t=n.raws.between.replace(/[^\s:]/g,""),!1}),t},i.rawEmptyBody=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length===0&&(t=n.raws.after,typeof t!="undefined"))return!1}),t},i.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var t;return e.walk(function(n){var s=n.parent;if(s&&s!==e&&s.parent&&s.parent===e&&typeof n.raws.before!="undefined"){var a=n.raws.before.split("\n");return t=a[a.length-1],t=t.replace(/\S/g,""),!1}}),t},i.rawSemicolon=function(e){var t;return e.walk(function(n){if(n.nodes&&n.nodes.length&&n.last.type==="decl"&&(t=n.raws.semicolon,typeof t!="undefined"))return!1}),t},i.rawValue=function(e,t){var n=e[t],s=e.raws[t];return s&&s.value===n?s.raw:n},i.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},i.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},i.stringify=function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)},r})(),jf=Zo;Zo.default=Zo;var Ig=jf;function Ko(r,i){var o=new Ig(i);o.stringify(r)}var Dn=Ko;Ko.default=Ko;var Fn=Je.isClean,Og=Je.my,Rg=Jo,xg=jf,Eg=Dn;function Xo(r,i){var o=new r.constructor;for(var e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&e!=="proxyCache"){var t=r[e],n=typeof t=="undefined"?"undefined":M(t);e==="parent"&&n==="object"?i&&(o[e]=i):e==="source"?o[e]=t:Array.isArray(t)?o[e]=t.map(function(s){return Xo(s,o)}):(n==="object"&&t!==null&&(t=Xo(t)),o[e]=t)}return o}var Qo=(function(){function r(o){o===void 0&&(o={}),this.raws={},this[Fn]=!1,this[Og]=!0;for(var e in o)if(e==="nodes"){this.nodes=[];for(var t=I(o[e]),n;!(n=t()).done;){var s=n.value;typeof s.clone=="function"?this.append(s.clone()):this.append(s)}}else this[e]=o[e]}var i=r.prototype;return i.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+t.input.from+":"+t.start.line+":"+t.start.column+"$&")}return e},i.after=function(e){return this.parent.insertAfter(this,e),this},i.assign=function(e){e===void 0&&(e={});for(var t in e)this[t]=e[t];return this},i.before=function(e){return this.parent.insertBefore(this,e),this},i.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},i.clone=function(e){e===void 0&&(e={});var t=Xo(this);for(var n in e)t[n]=e[n];return t},i.cloneAfter=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},i.cloneBefore=function(e){e===void 0&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},i.error=function(e,t){if(t===void 0&&(t={}),this.source){var n=this.rangeBy(t),s=n.end,a=n.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:s.column,line:s.line},t)}return new Rg(e)},i.getProxyProcessor=function(){return{get:function(t,n){return n==="proxyOf"?t:n==="root"?function(){return t.root().toProxy()}:t[n]},set:function(t,n,s){return t[n]===s||(t[n]=s,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&t.markDirty()),!0}}},i.markDirty=function(){if(this[Fn]){this[Fn]=!1;for(var e=this;e=e.parent;)e[Fn]=!1}},i.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},i.positionBy=function(e,t){var n=this.source.start;if(e.index)n=this.positionInside(e.index,t);else if(e.word){t=this.toString();var s=t.indexOf(e.word);s!==-1&&(n=this.positionInside(s,t))}return n},i.positionInside=function(e,t){for(var n=t||this.toString(),s=this.source.start.column,a=this.source.start.line,u=0;u-1&&s>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,s)))}},i.loadFile=function(e){if(this.root=ts(e),Pg(e))return this.mapFile=e,_g(e,"utf-8").toString().trim()},i.loadMap=function(e,t){if(t===!1)return!1;if(t){if(typeof t=="string")return t;if(typeof t=="function"){var n=t(e);if(n){var s=this.loadFile(n);if(!s)throw new Error("Unable to load previous source map: "+n.toString());return s}}else{if(A(t,qf))return Vf.fromSourceMap(t).toString();if(A(t,Vf))return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Tg(ts(e),a)),this.loadFile(a)}}},i.startWith=function(e,t){return e?e.substr(0,t.length)===t:!1},i.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},r})(),Hf=rs;rs.default=rs;var Lg=le.SourceMapConsumer,Dg=le.SourceMapGenerator,Yf=le.fileURLToPath,zn=le.pathToFileURL,ns=le.isAbsolute,is=le.resolve,Fg=kg.nanoid,os=le,Jf=Jo,Bg=Hf,ss=Symbol("fromOffsetCache"),Ug=!!(Lg&&Dg),Zf=!!(is&&ns),Wn=(function(){function r(o,e){if(e===void 0&&(e={}),o===null||typeof o=="undefined"||(typeof o=="undefined"?"undefined":M(o))==="object"&&!o.toString)throw new Error("PostCSS received "+o+" instead of CSS string");if(this.css=o.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!Zf||/^\w+:\/\//.test(e.from)||ns(e.from)?this.file=e.from:this.file=is(e.from)),Zf&&Ug){var t=new Bg(this.css,e);if(t.text){this.map=t;var n=t.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var i=r.prototype;return i.error=function(e,t,n,s){s===void 0&&(s={});var a,u,f;if(t&&(typeof t=="undefined"?"undefined":M(t))==="object"){var l=t,c=n;if(typeof l.offset=="number"){var h=this.fromOffset(l.offset);t=h.line,n=h.col}else t=l.line,n=l.column;if(typeof c.offset=="number"){var v=this.fromOffset(c.offset);u=v.line,f=v.col}else u=c.line,f=c.column}else if(!n){var p=this.fromOffset(t);t=p.line,n=p.col}var m=this.origin(t,n,u,f);return m?a=new Jf(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,s.plugin):a=new Jf(e,u===void 0?t:{column:n,line:t},u===void 0?n:{column:f,line:u},this.css,this.file,s.plugin),a.input={column:n,endColumn:f,endLine:u,line:t,source:this.css},this.file&&(zn&&(a.input.url=zn(this.file).toString()),a.input.file=this.file),a},i.fromOffset=function(e){var t,n;if(this[ss])n=this[ss];else{var s=this.css.split("\n");n=new Array(s.length);for(var a=0,u=0,f=s.length;u=t)l=n.length-1;else for(var c=n.length-2,h;l>1),e=n[h+1])l=h+1;else{l=h;break}return{col:e-n[l]+1,line:l+1}},i.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:is(this.map.consumer().sourceRoot||this.map.root||".",e)},i.origin=function(e,t,n,s){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;var f;typeof n=="number"&&(f=a.originalPositionFor({column:s,line:n}));var l;ns(u.source)?l=zn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||zn(this.map.mapFile));var c={column:u.column,endColumn:f&&f.column,endLine:f&&f.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(Yf)c.file=Yf(l);else throw new Error("file: protocol is not available in this PostCSS build");var h=a.sourceContentFor(u.source);return h&&(c.source=h),c},i.toJSON=function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t=0;t--)e=this.root.nodes[t],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},i.generate=function(){if(this.clearAnnotation(),Gg&&Wg&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(t){e+=t}),[e]},i.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=jn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new jn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},i.generateString=function(){var e=this;this.css="",this.map=new jn({file:this.outputFile(),ignoreInvalidMapping:!0});var t=1,n=1,s="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,f;this.stringify(this.root,function(l,c,h){if(e.css+=l,c&&h!=="end"&&(a.generated.line=t,a.generated.column=n-1,c.source&&c.source.start?(a.source=e.sourcePath(c),a.original.line=c.source.start.line,a.original.column=c.source.start.column-1,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(t+=u.length,f=l.lastIndexOf("\n"),n=l.length-f):n+=l.length,c&&h!=="start"){var v=c.parent||{raws:{}},p=c.type==="decl"||c.type==="atrule"&&!c.nodes;(!p||c!==v.last||v.raws.semicolon)&&(c.source&&c.source.end?(a.source=e.sourcePath(c),a.original.line=c.source.end.line,a.original.column=c.source.end.column-1,a.generated.line=t,a.generated.column=n-2,e.map.addMapping(a)):(a.source=s,a.original.line=1,a.original.column=0,a.generated.line=t,a.generated.column=n-1,e.map.addMapping(a)))}})},i.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},i.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(t){return t.inline}):!0},i.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},i.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},i.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},i.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var t=this.memoizedPaths.get(e);if(t)return t;var n=this.opts.to?qn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(n=qn(Qf(n,this.mapOpts.annotation)));var s=Xf(n,e);return this.memoizedPaths.set(e,s),s},i.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(n){if(n.source&&n.source.input.map){var s=n.source.input.map;e.previousMaps.includes(s)||e.previousMaps.push(s)}});else{var t=new zg(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps},i.setSourcesContent=function(){var e=this,t={};if(this.root)this.root.walk(function(s){if(s.source){var a=s.source.input.from;if(a&&!t[a]){t[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,s.source.input.css)}}});else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}},i.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},i.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},i.toFileUrl=function(e){var t=this.memoizedFileURLs.get(e);if(t)return t;if(tl){var n=tl(e).toString();return this.memoizedFileURLs.set(e,n),n}else throw new Error("`map.absolute` option is not available in this PostCSS build")},i.toUrl=function(e){var t=this.memoizedURLs.get(e);if(t)return t;el==="\\"&&(e=e.replace(/\\/g,"/"));var n=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,n),n},r})(),rl=jg,qg=Bn,as=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="comment",e}return i})(qg),Vn=as;as.default=as;var nl=Je.isClean,il=Je.my,ol=Un,sl=Vn,Vg=Bn,al,us,fs,ul;function fl(r){return r.map(function(i){return i.nodes&&(i.nodes=fl(i.nodes)),delete i.source,i})}function ll(r){if(r[nl]=!1,r.proxyOf.nodes)for(var i=I(r.proxyOf.nodes),o;!(o=i()).done;){var e=o.value;ll(e)}}var Be=(function(r){ee(i,r);function i(){return r.apply(this,arguments)||this}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?f-1:0),c=1;c=t&&(this.indexes[s]=n-1);return this.markDirty(),this},o.replaceValues=function(t,n,s){return s||(s=n,n={}),this.walkDecls(function(a){n.props&&!n.props.includes(a.prop)||n.fast&&!a.value.includes(n.fast)||(a.value=a.value.replace(t,s))}),this.markDirty(),this},o.some=function(t){return this.nodes.some(t)},o.walk=function(t){return this.each(function(n,s){var a;try{a=t(n,s)}catch(u){throw n.addToError(u)}return a!==!1&&n.walk&&(a=n.walk(t)),a})},o.walkAtRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="atrule"&&t.test(s.name))return n(s,a)}):this.walk(function(s,a){if(s.type==="atrule"&&s.name===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="atrule")return n(s,a)}))},o.walkComments=function(t){return this.walk(function(n,s){if(n.type==="comment")return t(n,s)})},o.walkDecls=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="decl"&&t.test(s.prop))return n(s,a)}):this.walk(function(s,a){if(s.type==="decl"&&s.prop===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="decl")return n(s,a)}))},o.walkRules=function(t,n){return n?A(t,RegExp)?this.walk(function(s,a){if(s.type==="rule"&&t.test(s.selector))return n(s,a)}):this.walk(function(s,a){if(s.type==="rule"&&s.selector===t)return n(s,a)}):(n=t,this.walk(function(s,a){if(s.type==="rule")return n(s,a)}))},Z(i,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),i})(Vg);Be.registerParse=function(r){al=r},Be.registerRule=function(r){us=r},Be.registerAtRule=function(r){fs=r},Be.registerRoot=function(r){ul=r};var at=Be;Be.default=Be,Be.rebuild=function(r){r.type==="atrule"?Object.setPrototypeOf(r,fs.prototype):r.type==="rule"?Object.setPrototypeOf(r,us.prototype):r.type==="decl"?Object.setPrototypeOf(r,ol.prototype):r.type==="comment"?Object.setPrototypeOf(r,sl.prototype):r.type==="root"&&Object.setPrototypeOf(r,ul.prototype),r[il]=!0,r.nodes&&r.nodes.forEach(function(i){Be.rebuild(i)})};var Hg=at,cl,hl,yr=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,T({type:"document"},e))||this,t.nodes||(t.nodes=[]),t}var o=i.prototype;return o.toResult=function(t){t===void 0&&(t={});var n=new cl(new hl,this,t);return n.stringify()},i})(Hg);yr.registerLazyResult=function(r){cl=r},yr.registerProcessor=function(r){hl=r};var ls=yr;yr.default=yr;var dl={},pl=function(i){dl[i]||(dl[i]=!0,typeof console!="undefined"&&console.warn&&console.warn(i))},cs=(function(){function r(o,e){if(e===void 0&&(e={}),this.type="warning",this.text=o,e.node&&e.node.source){var t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(var n in e)this[n]=e[n]}var i=r.prototype;return i.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},r})(),vl=cs;cs.default=cs;var Yg=vl,hs=(function(){function r(o,e,t){this.processor=o,this.messages=[],this.root=e,this.opts=t,this.css=void 0,this.map=void 0}var i=r.prototype;return i.toString=function(){return this.css},i.warn=function(e,t){t===void 0&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new Yg(e,t);return this.messages.push(n),n},i.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},Z(r,[{key:"content",get:function(){return this.css}}]),r})(),ds=hs;hs.default=hs;var ps=39,ml=34,Hn=92,gl=47,Yn=10,wr=32,Jn=12,Zn=9,Kn=13,Jg=91,Zg=93,Kg=40,Xg=41,Qg=123,ey=125,ty=59,ry=42,ny=58,iy=64,Xn=/[\t\n\f\r "#'()/;[\\\]{}]/g,Qn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,oy=/.[\r\n"'(/\\]/,yl=/[\da-f]/i,sy=function(i,o){o===void 0&&(o={});var e=i.css.valueOf(),t=o.ignoreErrors,n,s,a,u,f,l,c,h,v,p,m=e.length,d=0,g=[],w=[];function b(){return d}function S(x){throw i.error("Unclosed "+x,d)}function C(){return w.length===0&&d>=m}function R(x){if(w.length)return w.pop();if(!(d>=m)){var k=x?x.ignoreUnclosed:!1;switch(n=e.charCodeAt(d),n){case Yn:case wr:case Zn:case Kn:case Jn:{s=d;do s+=1,n=e.charCodeAt(s);while(n===wr||n===Yn||n===Zn||n===Kn||n===Jn);p=["space",e.slice(d,s)],d=s-1;break}case Jg:case Zg:case Qg:case ey:case ny:case ty:case Xg:{var N=String.fromCharCode(n);p=[N,N,d];break}case Kg:{if(h=g.length?g.pop()[1]:"",v=e.charCodeAt(d+1),h==="url"&&v!==ps&&v!==ml&&v!==wr&&v!==Yn&&v!==Zn&&v!==Jn&&v!==Kn){s=d;do{if(l=!1,s=e.indexOf(")",s+1),s===-1)if(t||k){s=d;break}else S("bracket");for(c=s;e.charCodeAt(c-1)===Hn;)c-=1,l=!l}while(l);p=["brackets",e.slice(d,s+1),d,s],d=s}else s=e.indexOf(")",d+1),u=e.slice(d,s+1),s===-1||oy.test(u)?p=["(","(",d]:(p=["brackets",u,d,s],d=s);break}case ps:case ml:{a=n===ps?"'":'"',s=d;do{if(l=!1,s=e.indexOf(a,s+1),s===-1)if(t||k){s=d+1;break}else S("string");for(c=s;e.charCodeAt(c-1)===Hn;)c-=1,l=!l}while(l);p=["string",e.slice(d,s+1),d,s],d=s;break}case iy:{Xn.lastIndex=d+1,Xn.test(e),Xn.lastIndex===0?s=e.length-1:s=Xn.lastIndex-2,p=["at-word",e.slice(d,s+1),d,s],d=s;break}case Hn:{for(s=d,f=!0;e.charCodeAt(s+1)===Hn;)s+=1,f=!f;if(n=e.charCodeAt(s+1),f&&n!==gl&&n!==wr&&n!==Yn&&n!==Zn&&n!==Kn&&n!==Jn&&(s+=1,yl.test(e.charAt(s)))){for(;yl.test(e.charAt(s+1));)s+=1;e.charCodeAt(s+1)===wr&&(s+=1)}p=["word",e.slice(d,s+1),d,s],d=s;break}default:{n===gl&&e.charCodeAt(d+1)===ry?(s=e.indexOf("*/",d+2)+1,s===0&&(t||k?s=e.length:S("comment")),p=["comment",e.slice(d,s+1),d,s],d=s):(Qn.lastIndex=d+1,Qn.test(e),Qn.lastIndex===0?s=e.length-1:s=Qn.lastIndex-2,p=["word",e.slice(d,s+1),d,s],g.push(p),d=s);break}}return d++,p}}function E(x){w.push(x)}return{back:E,endOfFile:C,nextToken:R,position:b}},wl=at,ei=(function(r){ee(i,r);function i(e){var t;return t=r.call(this,e)||this,t.type="atrule",t}var o=i.prototype;return o.append=function(){for(var t=arguments.length,n=new Array(t),s=0;s1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(var u=I(a),f;!(f=u()).done;){var l=f.value;l.raws.before=n.raws.before}}return a},o.removeChild=function(t,n){var s=this.index(t);return!n&&s===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[s].raws.before),r.prototype.removeChild.call(this,t)},o.toResult=function(t){t===void 0&&(t={});var n=new Sl(new Cl,this,t);return n.stringify()},i})(bl);Lt.registerLazyResult=function(r){Sl=r},Lt.registerProcessor=function(r){Cl=r};var br=Lt;Lt.default=Lt,bl.registerRoot(Lt);var Sr={comma:function(i){return Sr.split(i,[","],!0)},space:function(i){var o=[" ","\n"," "];return Sr.split(i,o)},split:function(i,o,e){for(var t=[],n="",s=!1,a=0,u=!1,f="",l=!1,c=I(i),h;!(h=c()).done;){var v=h.value;l?l=!1:v==="\\"?l=!0:u?v===f&&(u=!1):v==='"'||v==="'"?(u=!0,f=v):v==="("?a+=1:v===")"?a>0&&(a-=1):a===0&&o.includes(v)&&(s=!0),s?(n!==""&&t.push(n.trim()),n="",s=!1):n+=v}return(e||n!=="")&&t.push(n.trim()),t}},Il=Sr;Sr.default=Sr;var Ol=at,ay=Il,ti=(function(r){ee(i,r);function i(o){var e;return e=r.call(this,o)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return Z(i,[{key:"selectors",get:function(){return ay.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),i})(Ol),ms=ti;ti.default=ti,Ol.registerRule(ti);var uy=Un,fy=sy,ly=Vn,cy=vs,hy=br,Rl=ms,xl={empty:!0,space:!0};function dy(r){for(var i=r.length-1;i>=0;i--){var o=r[i],e=o[3]||o[2];if(e)return e}}var py=(function(){function r(o){this.input=o,this.root=new hy,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:o,start:{column:1,line:1,offset:0}}}var i=r.prototype;return i.atrule=function(e){var t=new cy;t.name=e[1].slice(1),t.name===""&&this.unnamedAtrule(t,e),this.init(t,e[2]);for(var n,s,a,u=!1,f=!1,l=[],c=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),n=e[0],n==="("||n==="["?c.push(n==="("?")":"]"):n==="{"&&c.length>0?c.push("}"):n===c[c.length-1]&&c.pop(),c.length===0)if(n===";"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(n==="{"){f=!0;break}else if(n==="}"){if(l.length>0){for(a=l.length-1,s=l[a];s&&s[0]==="space";)s=l[--a];s&&(t.source.end=this.getPosition(s[3]||s[2]),t.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(t.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(t,"params",l),u&&(e=l[l.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between="")):(t.raws.afterName="",t.params=""),f&&(t.nodes=[],this.current=t)},i.checkMissedSemicolon=function(e){var t=this.colon(e);if(t!==!1){for(var n=0,s,a=t-1;a>=0&&(s=e[a],!(s[0]!=="space"&&(n+=1,n===2)));a--);throw this.input.error("Missed semicolon",s[0]==="word"?s[3]+1:s[2])}},i.colon=function(e){for(var t=0,n,s,a,u=I(e.entries()),f;!(f=u()).done;){var l=f.value,c=l[0],h=l[1];if(n=h,s=n[0],s==="("&&(t+=1),s===")"&&(t-=1),t===0&&s===":")if(!a)this.doubleColon(n);else{if(a[0]==="word"&&a[1]==="progid")continue;return c}a=n}return!1},i.comment=function(e){var t=new ly;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var s=n.match(/^(\s*)([^]*\S)(\s*)$/);t.text=s[2],t.raws.left=s[1],t.raws.right=s[3]}},i.createTokenizer=function(){this.tokenizer=fy(this.input)},i.decl=function(e,t){var n=new uy;this.init(n,e[0][2]);var s=e[e.length-1];for(s[0]===";"&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(s[3]||s[2]||dy(e)),n.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;n.prop+=e.shift()[1]}n.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){n.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),n.raws.between+=u[1];(n.prop[0]==="_"||n.prop[0]==="*")&&(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var f=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)f.push(e.shift());this.precheckMissedSemicolon(e);for(var c=e.length-1;c>=0;c--){if(u=e[c],u[1].toLowerCase()==="!important"){n.important=!0;var h=this.stringFrom(e,c);h=this.spacesFromEnd(e)+h,h!==" !important"&&(n.raws.important=h);break}else if(u[1].toLowerCase()==="important"){for(var v=e.slice(0),p="",m=c;m>0;m--){var d=v[m][0];if(p.trim().indexOf("!")===0&&d!=="space")break;p=v.pop()[1]+p}p.trim().indexOf("!")===0&&(n.important=!0,n.raws.important=p,e=v)}if(u[0]!=="space"&&u[0]!=="comment")break}var g=e.some(function(w){return w[0]!=="space"&&w[0]!=="comment"});g&&(n.raws.between+=f.map(function(w){return w[1]}).join(""),f=[]),this.raw(n,"value",f.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)},i.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},i.emptyRule=function(e){var t=new Rl;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t},i.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},i.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},i.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&t.type==="rule"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},i.getPosition=function(e){var t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}},i.init=function(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},i.other=function(e){for(var t=!1,n=null,s=!1,a=null,u=[],f=e[1].startsWith("--"),l=[],c=e;c;){if(n=c[0],l.push(c),n==="("||n==="[")a||(a=c),u.push(n==="("?")":"]");else if(f&&s&&n==="{")a||(a=c),u.push("}");else if(u.length===0)if(n===";")if(s){this.decl(l,f);return}else break;else if(n==="{"){this.rule(l);return}else if(n==="}"){this.tokenizer.back(l.pop()),t=!0;break}else n===":"&&(s=!0);else n===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),u.length>0&&this.unclosedBracket(a),t&&s){if(!f)for(;l.length&&(c=l[l.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,f)}else this.unknownWord(l)},i.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},i.precheckMissedSemicolon=function(){},i.raw=function(e,t,n,s){for(var a,u,f=n.length,l="",c=!0,h,v,p=0;pparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+s+" uses "+a+". Perhaps this is the source of the error below.")}}catch(c){console&&console.error&&console.error(c)}return e},i.prepareVisitors=function(){var e=this;this.listeners={};for(var t=function(l,c,h){e.listeners[c]||(e.listeners[c]=[]),e.listeners[c].push([l,h])},n=I(this.plugins),s;!(s=n()).done;){var a=s.value;if((typeof a=="undefined"?"undefined":M(a))==="object")for(var u in a){if(!Ay[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!My[u])if(M(a[u])==="object")for(var f in a[u])f==="*"?t(a,u,a[u][f]):t(a,u+"-"+f.toLowerCase(),a[u][f]);else typeof a[u]=="function"&&t(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},i.runAsync=function(){var e=this;return _r(function(){var t,n,s,a,u,f,l,c,h,v,p,m;return rt(this,function(d){switch(d.label){case 0:e.plugin=0,t=0,d.label=1;case 1:if(!(t0))return[3,13];if(l=e.visitTick(f),!Cr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw c=d.sent(),h=f[f.length-1].node,e.handleError(c,h);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];v=function(){var g,w,b,S,C;return rt(this,function(R){switch(R.label){case 0:g=m.value,w=g[0],b=g[1],e.result.lastPlugin=w,R.label=1;case 1:return R.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(E){return b(E,e.helpers)}),[4,Promise.all(S)]);case 2:return R.sent(),[3,5];case 3:return[4,b(u,e.helpers)];case 4:R.sent(),R.label=5;case 5:return[3,7];case 6:throw C=R.sent(),e.handleError(C);case 7:return[2]}})},p=I(e.listeners.OnceExit),d.label=15;case 15:return(m=p()).done?[3,18]:[5,Ii(v())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},i.runOnRoot=function(e){var t=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":M(e))==="object"&&e.Once){if(this.result.root.type==="document"){var n=this.result.root.nodes.map(function(s){return e.Once(s,t.helpers)});return Cr(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(s){throw this.handleError(s)}},i.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=Sy;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new by(t,this.result.root,this.result.opts),s=n.generate();return this.result.css=s[0],this.result.map=s[1],this.result},i.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=I(this.plugins),t;!(t=e()).done;){var n=t.value,s=this.runOnRoot(n);if(Cr(s))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[ke];)a[ke]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=I(a.nodes),f;!(f=u()).done;){var l=f.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},i.then=function(e,t){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Oy("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},i.toString=function(){return this.css},i.visitSync=function(e,t){for(var n=I(e),s;!(s=n()).done;){var a=s.value,u=a[0],f=a[1];this.result.lastPlugin=u;var l=void 0;try{l=f(t,this.helpers)}catch(c){throw this.handleError(c,t.proxyOf)}if(t.type!=="root"&&t.type!=="document"&&!t.parent)return!0;if(Cr(l))throw this.getAsyncError()}},i.visitTick=function(e){var t=e[e.length-1],n=t.node,s=t.visitors;if(n.type!=="root"&&n.type!=="document"&&!n.parent){e.pop();return}if(s.length>0&&t.visitorIndex-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var t=e.replace(/^\s+/,"").replace(/\(eval code/g,"("),n=t.match(/ (\((.+):(\d+):(\d+)\)$)/);t=n?t.replace(n[0],""):t;var s=t.split(/\s+/).slice(1),a=this.extractLocation(n?n[1]:s.pop()),u=s.join(" ")||void 0,f=["eval",""].indexOf(a[0])>-1?void 0:a[0];return new Bt({functionName:u,fileName:f,lineNumber:a[1],columnNumber:a[2]})},this)},parseFFOrSafari:function(i){var o=i.stack.split("\n").filter(function(e){return!e.match(cw)},this);return o.map(function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new Bt({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),s=n&&n[1]?n[1]:void 0,a=this.extractLocation(e.replace(t,""));return new Bt({functionName:s,fileName:a[0],lineNumber:a[1],columnNumber:a[2]})},this)},parseOpera:function(i){return!i.stacktrace||i.message.indexOf("\n")>-1&&i.message.split("\n").length>i.stacktrace.split("\n").length?this.parseOpera9(i):i.stack?this.parseOpera11(i):this.parseOpera10(i)},parseOpera9:function(i){for(var o=/Line (\d+).*script (?:in )?(\S+)/i,e=i.message.split("\n"),t=[],n=2,s=e.length;n/,"$2").replace(/\([^)]*\)/g,"")||void 0;return new Bt({functionName:a,fileName:n[0],lineNumber:n[1],columnNumber:n[2]})},this)}};function hw(r){if(!r||!r.outerHTML)return"";for(var i="";r.parentElement;){var o=r.localName;if(!o)break;o=o.toLowerCase();var e=r.parentElement,t=[];if(e.children&&e.children.length>0)for(var n=0;n1&&(o+=":eq("+t.indexOf(r)+")"),i=o+(i?">"+i:""),r=e}return i}function Is(r){return Object.prototype.toString.call(r)==="[object Object]"}function Fl(r,i){if(i===0)return!0;for(var o=Object.keys(r),e=I(o),t;!(t=e()).done;){var n=t.value;if(Is(r[n])&&Fl(r[n],i-1))return!0}return!1}function Ut(r,i){var o={numOfKeysLimit:50,depthOfLimit:4};Object.assign(o,i);var e=[],t=[];return JSON.stringify(r,function(a,u){if(e.length>0){var f=e.indexOf(this);~f?e.splice(f+1):e.push(this),~f?t.splice(f,1/0,a):t.push(a),~e.indexOf(u)&&(e[0]===u?u="[Circular ~]":u="[Circular ~."+t.slice(0,e.indexOf(u)).join(".")+"]")}else e.push(u);if(u===null)return u;if(u===void 0)return"undefined";if(n(u))return s(u);if((typeof u=="undefined"?"undefined":M(u))==="bigint")return u.toString()+"n";if(A(u,Event)){var l={};for(var c in u){var h=u[c];Array.isArray(h)?l[c]=hw(h.length?h[0]:null):l[c]=h}return l}else{if(A(u,Node))return A(u,HTMLElement)?u?u.outerHTML:"":u.nodeName;if(A(u,Error))return u.stack?u.stack+"\nEnd of stack for Error object":u.name+": "+u.message}return u});function n(a){return!!(Is(a)&&Object.keys(a).length>o.numOfKeysLimit||typeof a=="function"||Is(a)&&Fl(a,o.depthOfLimit))}function s(a){var u=a.toString();return o.stringLengthLimit&&u.length>o.stringLengthLimit&&(u=""+u.slice(0,o.stringLengthLimit)+"..."),u}}var Bl={level:["assert","clear","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],lengthThreshold:1e3,logger:"console"};function dw(r,i,o){var e=o?Object.assign({},Bl,o):Bl,t=e.logger;if(!t)return function(){};var n;typeof t=="string"?n=i[t]:n=t;var s=0,a=!1,u=[];if(e.level.includes("error")){var f=function(m){var d=m.message,g=m.error,w=Cs.parse(g).map(function(S){return S.toString()}),b=[Ut(d,e.stringifyOptions)];r({level:"error",trace:w,payload:b})};i.addEventListener("error",f),u.push(function(){i.removeEventListener("error",f)});var l=function(m){var d,g;A(m.reason,Error)?(d=m.reason,g=[Ut("Uncaught (in promise) "+d.name+": "+d.message,e.stringifyOptions)]):(d=new Error,g=[Ut("Uncaught (in promise)",e.stringifyOptions),Ut(m.reason,e.stringifyOptions)]);var w=Cs.parse(d).map(function(b){return b.toString()});r({level:"error",trace:w,payload:g})};i.addEventListener("unhandledrejection",l),u.push(function(){i.removeEventListener("unhandledrejection",l)})}for(var c=I(e.level),h;!(h=c()).done;){var v=h.value;u.push(p(n,v))}return function(){u.forEach(function(m){return m()})};function p(m,d){var g=this;return m[d]?fw(m,d,function(w){var b=g;return function(){for(var S=arguments.length,C=new Array(S),R=0;R0&&ii(xs,o))}catch(e){Rr.call(new ql(o),e)}}}function Rr(r){var i=this;i.triggered||(i.triggered=!0,i.def&&(i=i.def),i.msg=r,i.state=2,i.chain.length>0&&ii(xs,i))}function jl(r,i,o,e){for(var t=0;t0&&(i[e]=o)}),i},y.truncate=function(r,i){var o;return typeof r=="string"?o=r.slice(0,i):y.isArray(r)?(o=[],y.each(r,function(e){o.push(y.truncate(e,i))})):y.isObject(r)?(o={},y.each(r,function(e,t){o[t]=y.truncate(e,i)})):o=r,o},y.JSONEncode=(function(){return function(r){var i=r,o=function(t){var n=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return n.lastIndex=0,n.test(t)?'"'+t.replace(n,function(a){var u=s[a];return typeof u=="string"?u:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'},e=function(t,n){var s="",a=" ",u=0,f="",l="",c=0,h=s,v=[],p=n[t];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(t)),typeof p){case"string":return o(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(s+=a,v=[],xr.apply(p)==="[object Array]"){for(c=p.length,u=0;u="0"&&i<="9";)p+=i,n();if(i===".")for(p+=".";n()&&i>="0"&&i<="9";)p+=i;if(i==="e"||i==="E")for(p+=i,n(),(i==="-"||i==="+")&&(p+=i,n());i>="0"&&i<="9";)p+=i,n();if(v=+p,!isFinite(v))t("Bad number");else return v},a=function(){var v,p,m="",d;if(i==='"')for(;n();){if(i==='"')return n(),m;if(i==="\\")if(n(),i==="u"){for(d=0,p=0;p<4&&(v=parseInt(n(),16),!!isFinite(v));p+=1)d=d*16+v;m+=String.fromCharCode(d)}else if(typeof o[i]=="string")m+=o[i];else break;else m+=i}t("Bad string")},u=function(){for(;i&&i<=" ";)n()},f=function(){switch(i){case"t":return n("t"),n("r"),n("u"),n("e"),!0;case"f":return n("f"),n("a"),n("l"),n("s"),n("e"),!1;case"n":return n("n"),n("u"),n("l"),n("l"),null}t('Unexpected "'+i+'"')},l,c=function(){var v=[];if(i==="["){if(n("["),u(),i==="]")return n("]"),v;for(;i;){if(v.push(l()),u(),i==="]")return n("]"),v;n(","),u()}}t("Bad array")},h=function(){var v,p={};if(i==="{"){if(n("{"),u(),i==="}")return n("}"),p;for(;i;){if(v=a(),u(),n(":"),Object.hasOwnProperty.call(p,v)&&t('Duplicate key "'+v+'"'),p[v]=l(),u(),i==="}")return n("}"),p;n(","),u()}}t("Bad object")};return l=function(){switch(u(),i){case"{":return h();case"[":return c();case'"':return a();case"-":return s();default:return i>="0"&&i<="9"?s():f()}},function(v){var p;return e=v,r=0,i=" ",p=l(),u(),i&&t("Syntax error"),p}})(),y.base64Encode=function(r){var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o,e,t,n,s,a,u,f,l=0,c=0,h="",v=[];if(!r)return r;r=y.utf8Encode(r);do o=r.charCodeAt(l++),e=r.charCodeAt(l++),t=r.charCodeAt(l++),f=o<<16|e<<8|t,n=f>>18&63,s=f>>12&63,a=f>>6&63,u=f&63,v[c++]=i.charAt(n)+i.charAt(s)+i.charAt(a)+i.charAt(u);while(l127&&s<2048?a=String.fromCharCode(s>>6|192,s&63|128):a=String.fromCharCode(s>>12|224,s>>6&63|128,s&63|128),a!==null&&(e>o&&(i+=r.substring(o,e)),i+=a,o=e=n+1)}return e>o&&(i+=r.substring(o,r.length)),i},y.UUID=function(){try{return H.crypto.randomUUID()}catch(o){for(var r=new Array(36),i=0;i<36;i++)r[i]=Math.floor(Math.random()*16);return r[14]=4,r[19]=r[19]&=-5,r[19]=r[19]|=8,r[8]=r[13]=r[18]=r[23]="-",y.map(r,function(e){return e.toString(16)}).join("")}};var Xl=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];y.isBlockedUA=function(r){var i;for(r=r.toLowerCase(),i=0;i=0}function e(t){if(!Se.getElementsByTagName)return[];var n=t.split(" "),s,a,u,f,l,c,h,v,p,m,d=[Se];for(c=0;c-1){a=s.split("#"),u=a[0];var g=a[1],w=Se.getElementById(g);if(!w||u&&w.nodeName.toLowerCase()!=u)return[];d=[w];continue}if(s.indexOf(".")>-1){a=s.split("."),u=a[0];var b=a[1];for(u||(u="*"),f=[],l=0,h=0;h-1};break;default:x=function(k){return k.getAttribute(C)}}for(d=[],m=0,h=0;h=3?i[2]:""},currentUrl:function(){return H.location.href},properties:function(r){return typeof r!="object"&&(r={}),y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Ar),$referrer:Se.referrer,$referring_domain:y.info.referringDomain(Se.referrer),$device:y.info.device(ft)}),{$current_url:y.info.currentUrl(),$browser_version:y.info.browserVersion(ft,zt.vendor,Ar),$screen_height:Yl.height,$screen_width:Yl.width,mp_lib:"web",$lib_version:Si.LIB_VERSION,$insert_id:Ps(),time:y.timestamp()/1e3},y.strip_empty_properties(r))},people_properties:function(){return y.extend(y.strip_empty_properties({$os:y.info.os(),$browser:y.info.browser(ft,zt.vendor,Ar)}),{$browser_version:y.info.browserVersion(ft,zt.vendor,Ar)})},mpPageViewProperties:function(){return y.strip_empty_properties({current_page_title:Se.title,current_domain:H.location.hostname,current_url_path:H.location.pathname,current_url_protocol:H.location.protocol,current_url_search:H.location.search})}};var xw=function(r,i){var o=null,e=[];return function(t){var n=this;return e.push(t),o||(o=new L(function(s){setTimeout(function(){var a=r.apply(n,[e]);o=null,e=[],s(a)},i)})),o}},Ps=function(r){var i=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return r?i.substring(0,r):i},Ew=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Aw=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,tc=function(r){var i=Aw,o=r.split("."),e=o[o.length-1];(e.length>4||e==="com"||e==="org")&&(i=Ew);var t=r.match(i);return t?t[0]:""},Mw=function(){var r=H.navigator.onLine;return y.isUndefined(r)||r},_s=function(){},rc=function(r,i){for(var o=!1,e=0;e=16.4&&t<16.6)};y.info=y.info,y.info.browser=y.info.browser,y.info.browserVersion=y.info.browserVersion,y.info.device=y.info.device,y.info.properties=y.info.properties,y.isBlockedUA=y.isBlockedUA,y.isEmptyObject=y.isEmptyObject,y.isObject=y.isObject,y.JSONDecode=y.JSONDecode,y.JSONEncode=y.JSONEncode,y.toArray=y.toArray,y.NPO=Ke;var _e=function(r,i,o,e){this.dbName=r,this.storeName=i,this.version=o.version,this.storeNamesInDb=o.storeNames,this.createIfMissing=!e||e.createIfMissing!==!1,this.dbPromise=null};_e.prototype._openDb=function(){var r=this.dbName,i=this.version,o=this.storeNamesInDb,e=this.createIfMissing,t=function(){return new L(function(n,s){var a=H.indexedDB.open(r,i);a.onerror=function(){s(a.error)},a.onsuccess=function(){n(a.result)},a.onupgradeneeded=function(u){if(!e&&u.oldVersion===0){a.transaction.abort();return}var f=u.target.result;o.forEach(function(l){f.objectStoreNames.contains(l)||f.createObjectStore(l)})}})};return e||!H.indexedDB.databases?t():H.indexedDB.databases().then(function(n){for(var s=0;sf){kw.error("Timeout waiting for mutex on "+a+"; clearing lock. ["+n+"]"),l.removeItem(v),l.removeItem(h),g();return}setTimeout(function(){try{b()}catch(S){t(S)}},u*(Math.random()+.1))},m=function(b,S){b()?S():p(function(){m(b,S)})},d=function(){var b=l.getItem(h);return b&&b!==n?!1:(l.setItem(h,n),l.getItem(h)===n?!0:(Mr(l,!0)||t(new Error("localStorage support dropped while acquiring lock")),!1))},g=function(){l.setItem(c,n),m(d,function(){if(l.getItem(c)===n){w();return}p(function(){if(l.getItem(h)!==n){g();return}m(function(){return!l.getItem(v)},w)})})},w=function(){l.setItem(v,"1");var b=function(){l.removeItem(v),l.getItem(h)===n&&l.removeItem(h),l.getItem(c)===n&&l.removeItem(c)};r().then(function(S){b(),e(S)}).catch(function(S){b(),t(S)})};try{if(Mr(l,!0))g();else throw new Error("localStorage support check failed")}catch(b){t(b)}},this))};var Wt=function(r){this.storage=r||fi()};Wt.prototype.init=function(){return this.storage?L.resolve():L.reject(new Error("localStorage is not available"))},Wt.prototype.isInitialized=function(){return!0},Wt.prototype.setItem=function(r,i){return new L(y.bind(function(o,e){try{this.storage.setItem(r,li(i))}catch(t){e(t)}o()},this))},Wt.prototype.getItem=function(r){return new L(y.bind(function(i,o){var e;try{e=ci(this.storage.getItem(r))}catch(t){o(t)}i(e)},this))},Wt.prototype.removeItem=function(r){return new L(y.bind(function(i,o){try{this.storage.removeItem(r)}catch(e){o(e)}i()},this))};var uc=lt("batch"),xe=function(r,i){i=i||{},this.storageKey=r,this.usePersistence=i.usePersistence,this.usePersistence&&(this.queueStorage=i.queueStorage||new Wt,this.lock=new ac(r,{storage:i.sharedLockStorage,timeoutMS:i.sharedLockTimeoutMS})),this.reportError=i.errorReporter||y.bind(uc.error,uc),this.consentGate=i.consentGate,this.pid=i.pid||null,this.memQueue=[],this.initialized=!1,i.enqueueThrottleMs?this.enqueuePersisted=xw(y.bind(this._enqueuePersisted,this),i.enqueueThrottleMs):this.enqueuePersisted=y.bind(function(o){return this._enqueuePersisted([o])},this)};xe.prototype.ensureInit=function(){return this.initialized||!this.usePersistence?L.resolve():this.queueStorage.init().then(y.bind(function(){this.initialized=!0},this)).catch(y.bind(function(r){this.reportError("Error initializing queue persistence. Disabling persistence",r),this.initialized=!0,this.usePersistence=!1},this))},xe.prototype.enqueue=function(r,i){var o={id:Ps(),flushAfter:new Date().getTime()+i*2,payload:r};return this._persists()?this.enqueuePersisted(o):(this.memQueue.push(o),L.resolve(!0))},xe.prototype._persists=function(){return this.usePersistence&&this.consentGate.allowsStoring()},xe.prototype._enqueuePersisted=function(r){if(!this._persists())return L.resolve(!1);var i=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(o){return this.saveToStorage(o.concat(r))},this)).then(y.bind(function(o){return o&&(this.memQueue=this.memQueue.concat(r)),o},this)).catch(y.bind(function(o){return this.reportError("Error enqueueing items",o,r),!1},this))},this);return this.lock.withLock(i,this.pid).catch(y.bind(function(o){return this.reportError("Error acquiring storage lock",o),!1},this))},xe.prototype.fillBatch=function(r){var i=this.memQueue.slice(0,r);return this.usePersistence&&i.lengthn.flushAfter&&!e[n.id]&&(n.orphaned=!0,i.push(n),i.length>=r))break}}return i},this)):L.resolve(i)};var fc=function(r,i){var o=[];return y.each(r,function(e){e.id&&!i[e.id]&&o.push(e)}),o};xe.prototype.removeItemsByID=function(r){var i={};if(y.each(r,function(e){i[e]=!0}),this.memQueue=fc(this.memQueue,i),this._persists()){var o=y.bind(function(){return this.ensureInit().then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){return e=fc(e,i),this.saveToStorage(e)},this)).then(y.bind(function(){return this.readFromStorage()},this)).then(y.bind(function(e){for(var t=0;t5&&(this.reportError("[dupe] item ID sent too many times, not sending",{item:c,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[p]}),v=!1):this.reportError("[dupe] found item with no ID",{item:c}),v&&s.push(h)}a[c.id]=h},this),s.length<1)return this.requestInProgress=!1,this.resetFlush(),L.resolve();var u=y.bind(function(){return this.queue.removeItemsByID(y.map(t,function(c){return c.id})).then(y.bind(function(c){return y.each(t,y.bind(function(h){var v=h.id;v?(this.itemIdsSentSuccessfully[v]=this.itemIdsSentSuccessfully[v]||0,this.itemIdsSentSuccessfully[v]++,this.itemIdsSentSuccessfully[v]>5&&this.reportError("[dupe] item ID sent too many times",{item:h,batchSize:t.length,timesSent:this.itemIdsSentSuccessfully[v]})):this.reportError("[dupe] found item with no ID while removing",{item:h})},this)),c?(this.consecutiveRemovalFailures=0,this.flushOnlyOnInterval&&!n?(this.resetFlush(),L.resolve()):this.flush()):(++this.consecutiveRemovalFailures>5?(this.reportError("Too many queue failures; disabling batching system."),this.stopAllBatching()):this.resetFlush(),L.resolve())},this))},this),f=y.bind(function(c){this.requestInProgress=!1;try{if(r.unloading)return this.queue.updatePayloads(a);if(y.isObject(c)&&c.error==="timeout"&&new Date().getTime()-o>=i)return this.reportError("Network timeout; retrying"),this.flush();if(y.isObject(c)&&(c.httpStatusCode>=500||c.httpStatusCode===429||c.httpStatusCode<=0&&!Mw()||c.error==="timeout")){var h=this.flushInterval*2;return c.retryAfter&&(h=parseInt(c.retryAfter,10)*1e3||h),h=Math.min(Pw,h),this.reportError("Error; retry in "+h+" ms"),this.scheduleFlush(h),L.resolve()}else if(y.isObject(c)&&c.httpStatusCode===413)if(t.length>1){var v=Math.max(1,Math.floor(e/2));return this.batchSize=Math.min(this.batchSize,v,t.length-1),this.reportError("413 response; reducing batch size to "+this.batchSize),this.resetFlush(),L.resolve()}else return this.reportError("Single-event request too large; dropping",t),this.resetBatchSize(),u();else return u()}catch(p){this.reportError("Error handling API response",p),this.resetFlush()}},this),l={method:"POST",verbose:!0,ignore_json_errors:!0,timeout_ms:i};return r.unloading&&(l.transport="sendBeacon"),$r.log("MIXPANEL REQUEST:",s),this.sendRequestPromise(s,l).then(f)},this)).catch(y.bind(function(t){this.reportError("Error flushing request queue",t),this.resetFlush()},this))},Ee.prototype.reportError=function(r,i){if($r.error.apply($r.error,arguments),this.errorReporter)try{i instanceof Error||(i=new Error(r)),this.errorReporter(r,i)}catch(o){$r.error(o)}};var cc=function(r){var i=Date.now();return!r||i>r.maxExpires||i>r.idleExpires},_w=250,Tw=function(r,i){if(!y.isArray(r))return r&&i.critical("record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled."),[];for(var o=[],e=0;e=0;e-=1)if(i(r[e]))return r[e]}function dc(r,i,o){if(!(i in r)||typeof r[i]!="function")return function(){};var e=r[i],t=o(e);return r[i]=t,function(){r[i]=e}}var Ls=1024*1024;function pc(r){return!r||typeof r!="string"?r:r.length>Ls?(ct.error("Body truncated from "+r.length+" to "+Ls+" characters"),r.substring(0,Ls)+"... [truncated]"):r}function Gw(r,i,o){if(!i.PerformanceObserver)return ct.error("PerformanceObserver not supported"),function(){};if(o.recordInitialRequests){var e=i.performance.getEntries().filter(function(n){return zw(n)||Ns(n)&&o.initiatorTypes.includes(n.initiatorType)});r({requests:e.map(function(n){return{url:n.name,initiatorType:n.initiatorType,status:"responseStatus"in n?n.responseStatus:void 0,startTime:Math.round(n.startTime),endTime:Math.round(n.responseEnd),timeOrigin:di(i)}}),isInitial:!0})}var t=new i.PerformanceObserver(function(n){var s=n.getEntries().filter(function(a){return Ns(a)&&o.initiatorTypes.includes(a.initiatorType)&&a.initiatorType!=="xmlhttprequest"&&a.initiatorType!=="fetch"});r({requests:s.map(function(a){return{url:a.name,initiatorType:a.initiatorType,status:"responseStatus"in a?a.responseStatus:void 0,startTime:Math.round(a.startTime),endTime:Math.round(a.responseEnd),timeOrigin:di(i)}})})});return t.observe({entryTypes:["navigation","resource"]}),function(){t.disconnect()}}function pi(r,i,o){return!i[r]||i[r].length===0?!1:i[r].includes(o.toLowerCase())}function vi(r,i,o){return!i[r]||i[r].length===0?!1:rc(o,i[r])}function vc(r){if(r==null)return null;var i;if(typeof r=="string")i=r;else if(r instanceof Document)i=r.textContent;else if(r instanceof FormData)i=y.HTTPBuildQuery(r);else if(y.isObject(r))try{i=JSON.stringify(r)}catch(o){return"Failed to stringify response object"}else return"Cannot read body of type "+typeof r;return pc(i)}function mc(r){return new Promise(function(i){var o=setTimeout(function(){i("Timeout while trying to read body")},500);try{r.clone().text().then(function(e){clearTimeout(o),i(pc(e))},function(e){clearTimeout(o),i("Failed to read body: "+String(e))})}catch(e){clearTimeout(o),i("Failed to read body: "+String(e))}})}function Ds(r,i,o,e,t,n){if(n===void 0&&(n=0),n>10)return ct.error("Cannot find performance entry"),Promise.resolve(null);var s=r.performance.getEntriesByName(o),a=Ww(s,function(u){return Ns(u)&&u.initiatorType===i&&(!e||u.startTime>=e)&&(!t||u.startTime<=t)});return a?Promise.resolve(a):new Promise(function(u){setTimeout(u,50*n)}).then(function(){return Ds(r,i,o,e,t,n+1)})}function jw(r,i,o){if(!o.initiatorTypes.includes("xmlhttprequest"))return function(){};var e=dc(i.XMLHttpRequest.prototype,"open",function(t){return function(n,s,a,u,f){a===void 0&&(a=!0);var l=this,c=new Request(s,{method:n}),h={},v,p,m={},d=l.setRequestHeader.bind(l);l.setRequestHeader=function(w,b){return pi("request",o.recordHeaders,w)&&(m[w]=b),d(w,b)},h.requestHeaders=m;var g=l.send.bind(l);l.send=function(w){return vi("request",o.recordBodyUrls,c.url)&&(h.requestBody=vc(w)),v=i.performance.now(),g(w)},l.addEventListener("readystatechange",function(){if(l.readyState===l.DONE){p=i.performance.now();var w={},b=l.getAllResponseHeaders();if(b){var S=b.trim().split(/[\r\n]+/);S.forEach(function(C){if(C){var R=C.indexOf(": ");if(R!==-1){var E=C.substring(0,R),x=C.substring(R+2);E&&pi("response",o.recordHeaders,E)&&(w[E]=x)}}})}h.responseHeaders=w,vi("response",o.recordBodyUrls,c.url)&&(h.responseBody=vc(l.response)),Ds(i,"xmlhttprequest",c.url,v,p).then(function(C){if(!C){ct.error("Failed to get performance entry for XHR request to "+c.url);return}var R={url:C.name,method:c.method,initiatorType:C.initiatorType,status:l.status,startTime:Math.round(C.startTime),endTime:Math.round(C.responseEnd),timeOrigin:di(i),requestHeaders:h.requestHeaders,requestBody:h.requestBody,responseHeaders:h.responseHeaders,responseBody:h.responseBody};r({requests:[R]})}).catch(function(C){ct.error("Error recording XHR request to "+c.url+": "+String(C))})}}),t.call(l,n,s,a,u,f)}});return function(){e()}}function qw(r,i){if(typeof Request!="undefined"&&r instanceof Request){var o=r.clone();return i?new Request(o,i):o}return new Request(r,i)}function Vw(r,i,o){if(!o.initiatorTypes.includes("fetch"))return function(){};var e=dc(i,"fetch",function(t){return function(){var n=qw(arguments[0],arguments[1]),s,a={},u,f,l,c=Promise.resolve(void 0),h,v=new Promise(function(m){h=m});try{var p={};n.headers.forEach(function(m,d){pi("request",o.recordHeaders,d)&&(p[d]=m)}),a.requestHeaders=p,vi("request",o.recordBodyUrls,n.url)&&(c=mc(n).then(function(m){a.requestBody=m})),u=i.performance.now(),l=t.apply(i,arguments).then(function(m){s=m,f=i.performance.now();var d={};return s.headers.forEach(function(g,w){pi("response",o.recordHeaders,w)&&(d[w]=g)}),a.responseHeaders=d,vi("response",o.recordBodyUrls,n.url)?mc(s).then(function(g){a.responseBody=g,h()}):h(),s})}catch(m){l=Promise.reject(m)}return Promise.all([c,v,l]).then(function(){return Ds(i,"fetch",n.url,u,f)}).then(function(m){if(!m){ct.error("Failed to get performance entry for fetch request to "+n.url);return}var d={url:m.name,method:n.method,initiatorType:m.initiatorType,status:s?s.status:void 0,startTime:Math.round(m.startTime),endTime:Math.round(m.responseEnd),timeOrigin:di(i),requestHeaders:a.requestHeaders,requestBody:a.requestBody,responseHeaders:a.responseHeaders,responseBody:a.responseBody};r({requests:[d]})}).catch(function(m){ct.error("Error recording fetch request to "+n.url+": "+String(m))}),l}});return function(){e()}}function Hw(r,i,o){if(!("performance"in i))return function(){};var e=Object.assign({},Ts.recordHeaders,o.recordHeaders||{}),t=Object.assign({},Ts.recordBodyUrls,o.recordBodyUrls||{});o=Object.assign({},o,{recordHeaders:e,recordBodyUrls:t});var n=Object.assign({},Ts,o),s=function(l){var c=l.requests.filter(function(h){var v=rc(h.url,n.ignoreRequestUrls||[]);return!v&&!n.ignoreRequestFn(h)});(c.length>0||l.isInitial)&&r(Object.assign({},l,{requests:c}))},a=Gw(s,i,n),u=jw(s,i,n),f=Vw(s,i,n);return function(){a(),u(),f()}}var Yw="rrweb/network@1.mp",Jw=function(r){return{name:Yw,observer:Hw,options:r}},ht=lt("recorder"),Zw=H.CompressionStream,Kw={batch_size:1e3,batch_flush_interval_ms:10*1e3,batch_request_timeout_ms:90*1e3,batch_autostart:!0},Xw=new Set([_.MouseMove,_.MouseInteraction,_.Scroll,_.ViewportResize,_.Input,_.TouchMove,_.MediaInteraction,_.Drag,_.Selection]);function Qw(r){return r.type===B.IncrementalSnapshot&&Xw.has(r.data.source)}var ce=function(r){this._mixpanel=r.mixpanelInstance,this.consentGate=r.consentGate,this._onIdleTimeout=r.onIdleTimeout||_s,this._onMaxLengthReached=r.onMaxLengthReached||_s,this._onBatchSent=r.onBatchSent||_s,this._rrwebRecord=r.rrwebRecord||null,this._stopRecording=null,this.replayId=r.replayId,this.batchStartUrl=r.batchStartUrl||null,this.replayStartUrl=r.replayStartUrl||null,this.idleExpires=r.idleExpires||null,this.maxExpires=r.maxExpires||null,this.replayStartTime=r.replayStartTime||null,this.lastEventTimestamp=r.lastEventTimestamp||null,this.seqNo=r.seqNo||0,this.idleTimeoutId=null,this.maxTimeoutId=null,this.recordMaxMs=oi,this.recordMinMs=0,this._recordMinMsCheckStart=null;var i=Mr(r.sharedLockStorage||fi(),!0)&&this.consentGate.allowsPersistence();this.batcherKey="__mprec_"+this.getConfig("name")+"_"+this.getConfig("token")+"_"+this.replayId,this.queueStorage=new _e(nc,ic,sc),this.batcher=new Ee(this.batcherKey,{errorReporter:this.reportError.bind(this),flushOnlyOnInterval:!0,libConfig:Kw,sendRequestFunc:this.flushEventsWithOptOut.bind(this),queueStorage:this.queueStorage,sharedLockStorage:r.sharedLockStorage,usePersistence:i,stopAllBatchingFunc:this.stopRecording.bind(this),consentGate:this.consentGate,enqueueThrottleMs:_w,sharedLockTimeoutMS:10*1e3})};ce.prototype.getUserIdInfo=function(){if(this.finalFlushUserIdInfo)return this.finalFlushUserIdInfo;var r={distinct_id:String(this._mixpanel.get_distinct_id())},i=this._mixpanel.get_property("$device_id");i&&(r.$device_id=i);var o=this._mixpanel.get_property("$user_id");return o&&(r.$user_id=o),r},ce.prototype.unloadPersistedData=function(){return this.batcher.stop(),this.queueStorage.init().catch(function(){this.reportError("Error initializing IndexedDB storage for unloading persisted data.")}.bind(this)).then(function(){return this.getDurationMs()oi&&(this.recordMaxMs=oi,ht.critical("record_max_ms cannot be greater than "+oi+"ms. Capping value.")),this.maxExpires||(this.maxExpires=new Date().getTime()+this.recordMaxMs),this.recordMinMs=this._getRecordMinMs(),this.replayStartTime||(this.replayStartTime=new Date().getTime(),this.batchStartUrl=y.info.currentUrl(),this.replayStartUrl=y.info.currentUrl()),r||this.recordMinMs>0?(this.batcher.stop(),this._recordMinMsCheckStart=null):this.batcher.start();var i=function(){clearTimeout(this.idleTimeoutId);var f=this.getConfig("record_idle_timeout_ms");this.idleTimeoutId=setTimeout(this._onIdleTimeout,f),this.idleExpires=new Date().getTime()+f}.bind(this);i();var o=this.getConfig("record_block_selector");(o===""||o===null)&&(o=void 0);var e=Fw(this._mixpanel),t=[];if(this.getConfig("record_network")){var n=this.getConfig("record_network_options")||{},s=(n.ignoreRequestUrls||[]).slice();s.push(this._getApiRoute()),n.ignoreRequestUrls=s,t.push(Jw(n))}this.getConfig("record_console")&&t.push(vw({stringifyOptions:{stringLengthLimit:1e3,numOfKeysLimit:50,depthOfLimit:2}}));var a=Tw(this.getConfig("record_allowed_iframe_origins"),ht);try{this._stopRecording=this._rrwebRecord({emit:function(f){if(this.idleExpires&&this.idleExpires=this.recordMinMs&&this.batcher.start(),i()),this.__enqueuePromise=this.batcher.enqueue(f),(this.lastEventTimestamp===null||f.timestamp>this.lastEventTimestamp)&&(this.lastEventTimestamp=f.timestamp)}.bind(this),blockClass:this.getConfig("record_block_class"),blockSelector:o,collectFonts:this.getConfig("record_collect_fonts"),dataURLOptions:{type:"image/webp",quality:.6},maskAllInputs:!0,maskTextSelector:"*",maskInputFn:this._getMaskFn(Bw,e),maskTextFn:this._getMaskFn(Uw,e),recordCrossOriginIframes:a.length>0,allowedIframeOrigins:a,recordCanvas:this.getConfig("record_canvas"),sampling:{canvas:15},plugins:t})}catch(f){this.reportError("Unexpected error when starting rrweb recording.",f)}if(typeof this._stopRecording!="function"){this.reportError("rrweb failed to start, skipping this recording."),this._stopRecording=null,this.stopRecording();return}var u=this.maxExpires-new Date().getTime();this.maxTimeoutId=setTimeout(this._onMaxLengthReached.bind(this),u)},ce.prototype.stopRecording=function(r){if(this.finalFlushUserIdInfo=this.getUserIdInfo(),!this.isRrwebStopped()){try{this._stopRecording()}catch(o){this.reportError("Error with rrweb stopRecording",o)}this._stopRecording=null}var i;return this.batcher.stopped?i=this.batcher.clear():r||(i=this.batcher.flush()),this.batcher.stop(),clearTimeout(this.idleTimeoutId),clearTimeout(this.maxTimeoutId),i},ce.prototype.isRrwebStopped=function(){return this._stopRecording===null},ce.prototype.flushEventsWithOptOut=function(r,i,o){if(!this.consentGate.allowsApiCalls()){this.stopRecording(),o({error:"Tracking has been opted out, stopping recording."});return}this._flushEvents(r,i,o)},ce.prototype.serialize=function(){var r;try{r=this._mixpanel.get_tab_id()}catch(i){this.reportError("Error getting tab ID for serialization ",i),r=null}return{replayId:this.replayId,seqNo:this.seqNo,replayStartTime:this.replayStartTime,batchStartUrl:this.batchStartUrl,replayStartUrl:this.replayStartUrl,lastEventTimestamp:this.lastEventTimestamp,idleExpires:this.idleExpires,maxExpires:this.maxExpires,tabId:r}},ce.deserialize=function(r,i){var o=new ce(y.extend({},i,{replayId:r.replayId,batchStartUrl:r.batchStartUrl,replayStartUrl:r.replayStartUrl,idleExpires:r.idleExpires,maxExpires:r.maxExpires,replayStartTime:r.replayStartTime,lastEventTimestamp:r.lastEventTimestamp,seqNo:r.seqNo,sharedLockStorage:i.sharedLockStorage}));return o},ce.prototype._getApiRoute=function(){return this.getConfig("api_routes").record},ce.prototype._sendRequest=function(r,i,o,e){if(!this.consentGate.allowsApiCalls()){e(0);return}var t=function(s,a){s.status===200&&this.replayId===r&&(this.seqNo++,this.batchStartUrl=y.info.currentUrl()),this._onBatchSent(),e({status:0,httpStatusCode:s.status,responseBody:a,retryAfter:s.headers.get("Retry-After")})}.bind(this),n=this._mixpanel.get_api_host&&this._mixpanel.get_api_host("record")||this.getConfig("api_host");H.fetch(n+"/"+this._getApiRoute()+"?"+new URLSearchParams(i),{method:"POST",headers:{Authorization:"Basic "+btoa(this.getConfig("token")+":"),"Content-Type":"application/octet-stream"},body:o}).then(function(s){s.json().then(function(a){t(s,a)}).catch(function(a){e({error:a})})}).catch(function(s){e({error:s,httpStatusCode:0})})},ce.prototype._flushEvents=function(r,i,o){var e=r.length;if(e>0){for(var t=this.replayId,n=1/0,s=-1/0,a=!1,u=0;uEs?(ht.critical("record_min_ms cannot be greater than "+Es+"ms. Capping value."),Es):r},ce.prototype._getMaskFn=function(r,i){return function(o,e){if(!o.trim().length)return o;var t=!0;try{t=r(e,i)}catch(s){this.reportError("Error checking if text should be masked, defaulting to masked",s)}if(t){var n=Math.min(o.length,1e4);return"*".repeat(n)}else return o}.bind(this)};var Xe=function(r){this.idb=new _e(nc,oc,sc),this.errorReporter=r.errorReporter,this.mixpanelInstance=r.mixpanelInstance,this.consentGate=r.consentGate,this.sharedLockStorage=r.sharedLockStorage};Xe.prototype.isPersistenceEnabled=function(){return this.consentGate.allowsPersistence()},Xe.prototype.handleError=function(r){this.errorReporter("IndexedDB error: ",r)},Xe.prototype.setActiveRecording=function(r){if(!this.isPersistenceEnabled())return L.resolve();var i=r.tabId;return i?this.idb.init().then(function(){return this.idb.setItem(i,r)}.bind(this)).catch(this.handleError.bind(this)):(console.warn("No tab ID is set, cannot persist recording metadata."),L.resolve())},Xe.prototype.getActiveRecording=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getItem(this.mixpanelInstance.get_tab_id())}.bind(this)).then(function(r){return cc(r)?null:r}.bind(this)).catch(this.handleError.bind(this)):L.resolve(null)},Xe.prototype.clearActiveRecording=function(){return this.markActiveRecordingExpired()},Xe.prototype.markActiveRecordingExpired=function(){return this.getActiveRecording().then(function(r){if(r)return r.maxExpires=0,this.setActiveRecording(r)}.bind(this)).catch(this.handleError.bind(this))},Xe.prototype.flushInactiveRecordings=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getAll()}.bind(this)).then(function(r){var i=r.filter(function(o){return cc(o)}).map(function(o){var e=ce.deserialize(o,{mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,sharedLockStorage:this.sharedLockStorage});return e.unloadPersistedData().then(function(){return this.idb.removeItem(o.tabId)}.bind(this)).catch(this.handleError.bind(this))}.bind(this));return L.all(i)}.bind(this)).catch(this.handleError.bind(this)):L.resolve([])};function eb(r,i){var o={allowsApiCalls:function(){try{return r("api_calls")}catch(e){return Pe.error("Unexpected error when checking tracking opt-out status: "+e),!0}},allowsSending:function(){return r("send")},allowsFetching:function(){return r("fetch")},allowsStoring:function(){return r("store")},allowsPersistence:function(){return o.allowsStoring()&&!i("disable_persistence")}};return o}function tb(r){return eb(function(i){var o=r._consent_allows;return typeof o=="function"?!!o.call(r,i):i!=="api_calls"||!r.has_opted_out_tracking()},function(i){return r.get_config(i)})}var kr=lt("recorder"),Te=function(r,i,o){this.mixpanelInstance=r,this.rrwebRecord=i||He,this.sharedLockStorage=o,this.consentGate=tb(r),this.recordingRegistry=new Xe({mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,errorReporter:kr.error,sharedLockStorage:o}),this._flushInactivePromise=this.recordingRegistry.flushInactiveRecordings(),this.activeRecording=null,this.stopRecordingInProgress=!1};Te.prototype.startRecording=function(r){if(r=r||{},this.activeRecording&&!this.activeRecording.isRrwebStopped()){kr.log("Recording already in progress, skipping startRecording.");return}var i=function(){kr.log("Idle timeout reached, restarting recording."),this.resetRecording()}.bind(this),o=function(){kr.log("Max recording length reached, stopping recording."),this.resetRecording()}.bind(this),e=function(){this.recordingRegistry.setActiveRecording(this.activeRecording.serialize()),this.__flushPromise=this.activeRecording.batcher._flushPromise}.bind(this),t={mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,onBatchSent:e,onIdleTimeout:i,onMaxLengthReached:o,replayId:y.UUID(),rrwebRecord:this.rrwebRecord,sharedLockStorage:this.sharedLockStorage};return r.activeSerializedRecording?this.activeRecording=ce.deserialize(r.activeSerializedRecording,t):this.activeRecording=new ce(t),this.activeRecording.startRecording(r.shouldStopBatcher),this.recordingRegistry.setActiveRecording(this.activeRecording.serialize())},Te.prototype.stopRecording=function(){return this.stopRecordingInProgress=!0,this._stopCurrentRecording(!1,!0).then(function(){return this.recordingRegistry.clearActiveRecording()}.bind(this)).then(function(){this.stopRecordingInProgress=!1}.bind(this))},Te.prototype.pauseRecording=function(){return this._stopCurrentRecording(!1)},Te.prototype._stopCurrentRecording=function(r,i){if(this.activeRecording){var o=this.activeRecording.stopRecording(r);return i&&(this.activeRecording=null),o}return L.resolve()},Te.prototype.resumeRecording=function(r){return this.activeRecording&&this.activeRecording.isRrwebStopped()?(this.activeRecording.startRecording(!1),L.resolve(null)):this.recordingRegistry.getActiveRecording().then(function(i){return i&&!this.stopRecordingInProgress?this.startRecording({activeSerializedRecording:i}):r?this.startRecording({shouldStopBatcher:!1}):(kr.log("No resumable recording found."),null)}.bind(this))},Te.prototype.resetRecording=function(){this.stopRecording(),this.startRecording({shouldStopBatcher:!0})},Te.prototype.isRecording=function(){return this.activeRecording&&!this.activeRecording.isRrwebStopped()},Te.prototype.getActiveReplayId=function(){return this.isRecording()?this.activeRecording.replayId:null},Object.defineProperty(Te.prototype,"replayId",{get:function(){return this.getActiveReplayId()}}),H[Oc]=Te})(); //# sourceMappingURL=mixpanel-recorder.min.js.map diff --git a/dist/mixpanel-recorder.min.js.map b/dist/mixpanel-recorder.min.js.map index 35d5590e..50f05dae 100644 --- a/dist/mixpanel-recorder.min.js.map +++ b/dist/mixpanel-recorder.min.js.map @@ -1 +1 @@ -{"version":3,"file":"mixpanel-recorder.min.js","sources":["../src/window.js","../src/config.js","rrweb-compiled.js","../src/promise-polyfill.js","../src/utils.js","../src/storage/indexed-db.js","../src/recorder/idb-config.js","../src/gdpr-utils.js","../src/shared-lock.js","../src/storage/local-storage.js","../src/request-queue.js","../src/request-batcher.js","../src/recorder/utils.js","../src/autocapture/utils.js","../src/recorder/masking.js","../src/recorder/rrweb-network-plugin.js","../src/recorder/session-recording.js","../src/recorder/recording-registry.js","../src/recorder/recorder.js","../src/recorder/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.84.0'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function construct(Parent, args, Class) {\n var a = [\n null\n ];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _set_prototype_of(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n return Constructor;\n}\nfunction _extends() {\n _extends = Object.assign || function(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i];\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _get_prototype_of(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _set_prototype_of(o, p);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function wrapNativeSuper(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _set_prototype_of(Wrapper, Class);\n };\n return _wrap_native_super(Class);\n}\nfunction _is_native_reflect_construct() {\n try {\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike) {\n if (it) o = it;\n var i = 0;\n return function() {\n if (i >= o.length) {\n return {\n done: true\n };\n }\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction _ts_values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = function(obj, key, value) {\n return key in obj ? __defProp$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1 = function(obj, key, value) {\n return __defNormalProp$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar _a;\nvar __defProp$1$1 = Object.defineProperty;\nvar __defNormalProp$1$1 = function(obj, key, value) {\n return key in obj ? __defProp$1$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1$1 = function(obj, key, value) {\n return __defNormalProp$1$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar NodeType$3 = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType$3 || {});\nvar testableAccessors$1 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$1 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$1 = {};\nvar isAngularZonePresent$1 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key]) return untaintedBasePrototype$1[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$1()) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$1[cacheKey]) return untaintedAccessorCache$1[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$1[cacheKey]) return untaintedMethodCache$1[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nfunction patch$1$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1,\n patch: patch$1$1\n};\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n var hostEl = // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null;\n return Boolean(hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2);\n}\nfunction isNativeShadowDom(shadowRoot2) {\n return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(/\\sbackground-clip:\\s*text;/g, \" -webkit-background-clip: text; background-clip: text;\");\n }\n return cssText;\n}\nfunction escapeImportStatement(rule2) {\n var cssText = rule2.cssText;\n if (cssText.split('\"').length < 3) return cssText;\n var statement = [\n \"@import\",\n \"url(\" + JSON.stringify(rule2.href) + \")\"\n ];\n if (rule2.layerName === \"\") {\n statement.push(\"layer\");\n } else if (rule2.layerName) {\n statement.push(\"layer(\" + rule2.layerName + \")\");\n }\n if (rule2.supportsText) {\n statement.push(\"supports(\" + rule2.supportsText + \")\");\n }\n if (rule2.media.length) {\n statement.push(rule2.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n var rules2 = s2.rules || s2.cssRules;\n if (!rules2) {\n return null;\n }\n var sheetHref = s2.href;\n if (!sheetHref && s2.ownerNode && s2.ownerNode.ownerDocument) {\n sheetHref = s2.ownerNode.ownerDocument.location.href;\n }\n var stringifiedRules = Array.from(rules2, function(rule2) {\n return stringifyRule(rule2, sheetHref);\n }).join(\"\");\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule2, sheetHref) {\n if (isCSSImportRule(rule2)) {\n var importStringified;\n try {\n importStringified = // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule2);\n } catch (error) {\n importStringified = rule2.cssText;\n }\n if (rule2.styleSheet.href) {\n return absolutifyURLs(importStringified, rule2.styleSheet.href);\n }\n return importStringified;\n } else {\n var ruleStringified = rule2.cssText;\n if (isCSSStyleRule(rule2) && rule2.selectorText.includes(\":\")) {\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\nfunction fixSafariColons(cssStringified) {\n var regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule2) {\n return \"styleSheet\" in rule2;\n}\nfunction isCSSStyleRule(rule2) {\n return \"selectorText\" in rule2;\n}\nvar Mirror = /*#__PURE__*/ function() {\n function Mirror() {\n __publicField$1$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n var _proto = Mirror.prototype;\n _proto.getId = function getId(n2) {\n var _a2;\n if (!n2) return -1;\n var id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id != null ? id : -1;\n };\n _proto.getNode = function getNode(id) {\n return this.idNodeMap.get(id) || null;\n };\n _proto.getIds = function getIds() {\n return Array.from(this.idNodeMap.keys());\n };\n _proto.getMeta = function getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n };\n // removes the node from idNodeMap\n // if permanent is true, also removes from nodeMetaMap\n _proto.removeNodeFromMap = function removeNodeFromMap(n2, permanent) {\n var _this = this;\n if (permanent === void 0) permanent = false;\n var id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (permanent) this.nodeMetaMap.delete(n2);\n if (n2.childNodes) {\n n2.childNodes.forEach(function(childNode) {\n return _this.removeNodeFromMap(childNode, permanent);\n });\n }\n };\n _proto.has = function has(id) {\n return this.idNodeMap.has(id);\n };\n _proto.hasNode = function hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n };\n _proto.add = function add(n2, meta) {\n var id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n };\n _proto.replace = function replace(id, n2) {\n var oldNode = this.getNode(id);\n if (oldNode) {\n var meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n };\n _proto.reset = function reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n };\n return Mirror;\n}();\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue(param) {\n var element = param.element, maskInputOptions = param.maskInputOptions, tagName = param.tagName, type = param.type, value = param.value, maskInputFn = param.maskInputFn;\n var text = value || \"\";\n var actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nvar ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n var ctx = canvas.getContext(\"2d\");\n if (!ctx) return true;\n var chunkSize = 50;\n for(var x2 = 0; x2 < canvas.width; x2 += chunkSize){\n for(var y = 0; y < canvas.height; y += chunkSize){\n var getImageData = ctx.getImageData;\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n var pixelBuffer = new Uint32Array(// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(ctx, x2, y, Math.min(chunkSize, canvas.width - x2), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some(function(pixel) {\n return pixel !== 0;\n })) return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n var type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n var url;\n try {\n url = new URL(path, baseURL != null ? baseURL : window.location.href);\n } catch (err) {\n return null;\n }\n var regex = /\\.([0-9a-z]+)(?:$)/i;\n var match = url.pathname.match(regex);\n var _ref;\n return (_ref = match == null ? void 0 : match[1]) != null ? _ref : null;\n}\nfunction extractOrigin(url) {\n var origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nvar URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nvar URL_WWW_MATCH = /^www\\..*/i;\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n return (cssText || \"\").replace(URL_IN_CSS_REF, function(origin, quote1, path1, quote2, path2, path3) {\n var filePath = path1 || path2 || path3;\n var maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (DATA_URI.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (filePath[0] === \"/\") {\n return \"url(\" + maybeQuote + (extractOrigin(href) + filePath) + maybeQuote + \")\";\n }\n var stack = href.split(\"/\");\n var parts = filePath.split(\"/\");\n stack.pop();\n for(var _iterator = _create_for_of_iterator_helper_loose(parts), _step; !(_step = _iterator()).done;){\n var part = _step.value;\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return \"url(\" + maybeQuote + stack.join(\"/\") + maybeQuote + \")\";\n });\n}\nfunction normalizeCssString(cssText, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n if (_testNoPxNorm) {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\");\n } else {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\").replace(/0px/g, \"0\");\n }\n}\nfunction splitCssText(cssText, style, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n var childNodes2 = Array.from(style.childNodes);\n var splits = [];\n var iterCount = 0;\n if (childNodes2.length > 1 && cssText && typeof cssText === \"string\") {\n var cssTextNorm = normalizeCssString(cssText, _testNoPxNorm);\n var normFactor = cssTextNorm.length / cssText.length;\n for(var i2 = 1; i2 < childNodes2.length; i2++){\n if (childNodes2[i2].textContent && typeof childNodes2[i2].textContent === \"string\") {\n var textContentNorm = normalizeCssString(childNodes2[i2].textContent, _testNoPxNorm);\n var jLimit = 100;\n var j = 3;\n for(; j < textContentNorm.length; j++){\n if (// keep consuming css identifiers (to get a decent chunk more quickly)\n textContentNorm[j].match(/[a-zA-Z0-9]/) || // substring needs to be unique to this section\n textContentNorm.indexOf(textContentNorm.substring(0, j), 1) !== -1) {\n continue;\n }\n break;\n }\n for(; j < textContentNorm.length; j++){\n var startSubstring = textContentNorm.substring(0, j);\n var cssNormSplits = cssTextNorm.split(startSubstring);\n var splitNorm = -1;\n if (cssNormSplits.length === 2) {\n splitNorm = cssNormSplits[0].length;\n } else if (cssNormSplits.length > 2 && cssNormSplits[0] === \"\" && childNodes2[i2 - 1].textContent !== \"\") {\n splitNorm = cssTextNorm.indexOf(startSubstring, 1);\n } else if (cssNormSplits.length === 1) {\n startSubstring = startSubstring.substring(0, startSubstring.length - 1);\n cssNormSplits = cssTextNorm.split(startSubstring);\n if (cssNormSplits.length <= 1) {\n splits.push(cssText);\n return splits;\n }\n j = jLimit + 1;\n } else if (j === textContentNorm.length - 1) {\n splitNorm = cssTextNorm.indexOf(startSubstring);\n }\n if (cssNormSplits.length >= 2 && j > jLimit) {\n var prevTextContent = childNodes2[i2 - 1].textContent;\n if (prevTextContent && typeof prevTextContent === \"string\") {\n var prevMinLength = normalizeCssString(prevTextContent).length;\n splitNorm = cssTextNorm.indexOf(startSubstring, prevMinLength);\n }\n if (splitNorm === -1) {\n splitNorm = cssNormSplits[0].length;\n }\n }\n if (splitNorm !== -1) {\n var k = Math.floor(splitNorm / normFactor);\n for(; k > 0 && k < cssText.length;){\n iterCount += 1;\n if (iterCount > 50 * childNodes2.length) {\n splits.push(cssText);\n return splits;\n }\n var normPart = normalizeCssString(cssText.substring(0, k), _testNoPxNorm);\n if (normPart.length === splitNorm) {\n splits.push(cssText.substring(0, k));\n cssText = cssText.substring(k);\n cssTextNorm = cssTextNorm.substring(splitNorm);\n break;\n } else if (normPart.length < splitNorm) {\n k += Math.max(1, Math.floor((splitNorm - normPart.length) / normFactor));\n } else {\n k -= Math.max(1, Math.floor((normPart.length - splitNorm) * normFactor));\n }\n }\n break;\n }\n }\n }\n }\n }\n splits.push(cssText);\n return splits;\n}\nfunction markCssSplits(cssText, style) {\n return splitCssText(cssText, style).join(\"/* rr_split */\");\n}\nvar _id = 1;\nvar tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nvar IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (_instanceof(element, HTMLFormElement)) {\n return \"form\";\n }\n var processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nvar canvasService;\nvar canvasCtx;\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n var pos = 0;\n function collectCharacters(regEx) {\n var chars2;\n var match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n var output = [];\n while(true){\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n var url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n var descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n var inParens = false;\n while(true){\n var c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nvar cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n var a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absolutifyURLs(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for(var eIndex = element.classList.length; eIndex--;){\n var className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {}\n return false;\n}\nfunction classMatchesRegex$1(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction needMaskingText(node2, maskTextClass, maskTextSelector, checkAncestors) {\n var el;\n if (isElement(node2)) {\n el = node2;\n if (!index$1.childNodes(el).length) {\n return false;\n }\n } else if (index$1.parentElement(node2) === null) {\n return false;\n } else {\n el = index$1.parentElement(node2);\n }\n try {\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(\".\" + maskTextClass)) return true;\n } else {\n if (el.classList.contains(maskTextClass)) return true;\n }\n } else {\n if (classMatchesRegex$1(el, maskTextClass, checkAncestors)) return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector)) return true;\n } else {\n if (el.matches(maskTextSelector)) return true;\n }\n }\n } catch (e2) {}\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n var win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n var fired = false;\n var readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n var blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n var fired = false;\n var styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded) return;\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, needsMask = options.needsMask, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var rootId = getRootId(doc, mirror2);\n switch(n2.nodeType){\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n compatMode: n2.compatMode\n };\n } else {\n return {\n type: NodeType$3.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$3.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId: rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc: doc,\n blockClass: blockClass,\n blockSelector: blockSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n rootId: rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc: doc,\n needsMask: needsMask,\n maskTextFn: maskTextFn,\n rootId: rootId,\n cssCaptured: cssCaptured\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$3.CDATA,\n textContent: \"\",\n rootId: rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$3.Comment,\n textContent: index$1.textContent(n2) || \"\",\n rootId: rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc)) return void 0;\n var docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n var needsMask = options.needsMask, maskTextFn = options.maskTextFn, rootId = options.rootId, cssCaptured = options.cssCaptured;\n var parent = index$1.parentNode(n2);\n var parentTagName = parent && parent.tagName;\n var textContent2 = \"\";\n var isStyle = parentTagName === \"STYLE\" ? true : void 0;\n var isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isScript) {\n textContent2 = \"SCRIPT_PLACEHOLDER\";\n } else if (!cssCaptured) {\n textContent2 = index$1.textContent(n2);\n if (isStyle && textContent2) {\n textContent2 = absolutifyURLs(textContent2, getHref(options.doc));\n }\n }\n if (!isStyle && !isScript && textContent2 && needsMask) {\n textContent2 = maskTextFn ? maskTextFn(textContent2, index$1.parentElement(n2)) : textContent2.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$3.Text,\n textContent: textContent2 || \"\",\n rootId: rootId\n };\n}\nfunction serializeElementNode(n2, options) {\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, rootId = options.rootId;\n var needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n var tagName = getValidTagName$1(n2);\n var attributes = {};\n var len = n2.attributes.length;\n for(var i2 = 0; i2 < len; i2++){\n var attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value);\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n var stylesheet = Array.from(doc.styleSheets).find(function(s2) {\n return s2.href === n2.href;\n });\n var cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"style\" && n2.sheet) {\n var cssText1 = stringifyStylesheet(n2.sheet);\n if (cssText1) {\n if (n2.childNodes.length > 1) {\n cssText1 = markCssSplits(cssText1, n2);\n }\n attributes._cssText = cssText1;\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n var value = n2.value;\n var checked = n2.checked;\n if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n attributes.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: value,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n } else if (checked) {\n attributes.checked = checked;\n }\n }\n if ((tagName === \"input\" || tagName === \"textarea\") && attributes.placeholder) {\n attributes.placeholder = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: attributes.placeholder,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes.selected = true;\n } else {\n delete attributes.selected;\n }\n }\n if (tagName === \"dialog\" && n2.open) {\n attributes.rr_open_mode = n2.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes.rr_dataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n } else if (!(\"__context\" in n2)) {\n var canvasDataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n var blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n var image = n2;\n var imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"\";\n var priorCrossOrigin = image.crossOrigin;\n var recordInlineImage = function() {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\"Cannot inline img src=\" + imageSrc + \"! Error: \" + err);\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n var mediaAttributes = attributes;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n var _n2_getBoundingClientRect = n2.getBoundingClientRect(), width = _n2_getBoundingClientRect.width, height = _n2_getBoundingClientRect.height;\n attributes = {\n class: attributes.class,\n rr_width: \"\" + width + \"px\",\n rr_height: \"\" + height + \"px\"\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n if (!n2.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n var isCustomElement;\n try {\n if (customElements.get(tagName)) isCustomElement = true;\n } catch (e2) {}\n return {\n type: NodeType$3.Element,\n tagName: tagName,\n attributes: attributes,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock: needBlock,\n rootId: rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$3.Comment) {\n return true;\n } else if (sn.type === NodeType$3.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" && sn.attributes.as === \"script\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _options_skipChild = options.skipChild, skipChild = _options_skipChild === void 0 ? false : _options_skipChild, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _options_iframeLoadTimeout = options.iframeLoadTimeout, iframeLoadTimeout = _options_iframeLoadTimeout === void 0 ? 5e3 : _options_iframeLoadTimeout, onStylesheetLoad = options.onStylesheetLoad, _options_stylesheetLoadTimeout = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _options_stylesheetLoadTimeout === void 0 ? 5e3 : _options_stylesheetLoadTimeout, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var needsMask = options.needsMask;\n var _options_preserveWhiteSpace = options.preserveWhiteSpace, preserveWhiteSpace = _options_preserveWhiteSpace === void 0 ? true : _options_preserveWhiteSpace;\n if (!needsMask) {\n var checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(n2, maskTextClass, maskTextSelector, checkAncestors);\n }\n var _serializedNode = serializeNode(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n cssCaptured: cssCaptured\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n var id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$3.Text && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n var serializedNode = Object.assign(_serializedNode, {\n id: id\n });\n mirror2.add(n2, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n var recordChild = !skipChild;\n if (serializedNode.type === NodeType$3.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n var shadowRootEl = index$1.shadowRoot(n2);\n if (shadowRootEl && isNativeShadowDom(shadowRootEl)) serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$3.Document || serializedNode.type === NodeType$3.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n var bypassOptions = {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: skipChild,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n cssCaptured: false\n };\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n else {\n if (serializedNode.type === NodeType$3.Element && serializedNode.attributes._cssText !== void 0 && typeof serializedNode.attributes._cssText === \"string\") {\n bypassOptions.cssCaptured = true;\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(n2))), _step; !(_step = _iterator()).done;){\n var childN = _step.value;\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n var shadowRootEl1 = null;\n if (isElement(n2) && (shadowRootEl1 = index$1.shadowRoot(n2))) {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(shadowRootEl1))), _step1; !(_step1 = _iterator1()).done;){\n var childN1 = _step1.value;\n var serializedChildNode1 = serializeNodeWithId(childN1, bypassOptions);\n if (serializedChildNode1) {\n isNativeShadowDom(shadowRootEl1) && (serializedChildNode1.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode1);\n }\n }\n }\n }\n var parent = index$1.parentNode(n2);\n if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"iframe\") {\n onceIframeLoaded(n2, function() {\n var iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(n2, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n onceStylesheetLoaded(n2, function() {\n if (onStylesheetLoad) {\n var serializedLinkNode = serializeNodeWithId(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n2, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n2, options) {\n var _ref = options || {}, tmp = _ref.mirror, mirror2 = tmp === void 0 ? new Mirror() : tmp, _ref_blockClass = _ref.blockClass, blockClass = _ref_blockClass === void 0 ? \"rr-block\" : _ref_blockClass, _ref_blockSelector = _ref.blockSelector, blockSelector = _ref_blockSelector === void 0 ? null : _ref_blockSelector, _ref_maskTextClass = _ref.maskTextClass, maskTextClass = _ref_maskTextClass === void 0 ? \"rr-mask\" : _ref_maskTextClass, _ref_maskTextSelector = _ref.maskTextSelector, maskTextSelector = _ref_maskTextSelector === void 0 ? null : _ref_maskTextSelector, _ref_inlineStylesheet = _ref.inlineStylesheet, inlineStylesheet = _ref_inlineStylesheet === void 0 ? true : _ref_inlineStylesheet, _ref_inlineImages = _ref.inlineImages, inlineImages = _ref_inlineImages === void 0 ? false : _ref_inlineImages, _ref_recordCanvas = _ref.recordCanvas, recordCanvas = _ref_recordCanvas === void 0 ? false : _ref_recordCanvas, _ref_maskAllInputs = _ref.maskAllInputs, maskAllInputs = _ref_maskAllInputs === void 0 ? false : _ref_maskAllInputs, maskTextFn = _ref.maskTextFn, maskInputFn = _ref.maskInputFn, _ref_slimDOM = _ref.slimDOM, slimDOM = _ref_slimDOM === void 0 ? false : _ref_slimDOM, dataURLOptions = _ref.dataURLOptions, preserveWhiteSpace = _ref.preserveWhiteSpace, onSerialize = _ref.onSerialize, onIframeLoad = _ref.onIframeLoad, iframeLoadTimeout = _ref.iframeLoadTimeout, onStylesheetLoad = _ref.onStylesheetLoad, stylesheetLoadTimeout = _ref.stylesheetLoadTimeout, _ref_keepIframeSrcFn = _ref.keepIframeSrcFn, keepIframeSrcFn = _ref_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _ref_keepIframeSrcFn;\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n var slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n } : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$1 = {\n exports: {}\n};\nvar x$1 = String;\nvar create$1 = function create$1() {\n return {\n isColorSupported: false,\n reset: x$1,\n bold: x$1,\n dim: x$1,\n italic: x$1,\n underline: x$1,\n inverse: x$1,\n hidden: x$1,\n strikethrough: x$1,\n black: x$1,\n red: x$1,\n green: x$1,\n yellow: x$1,\n blue: x$1,\n magenta: x$1,\n cyan: x$1,\n white: x$1,\n gray: x$1,\n bgBlack: x$1,\n bgRed: x$1,\n bgGreen: x$1,\n bgYellow: x$1,\n bgBlue: x$1,\n bgMagenta: x$1,\n bgCyan: x$1,\n bgWhite: x$1\n };\n};\npicocolors_browser$1.exports = create$1();\npicocolors_browser$1.exports.createColors = create$1;\nvar picocolors_browserExports$1 = picocolors_browser$1.exports;\nvar __viteBrowserExternal$2 = {};\nvar __viteBrowserExternal$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$2\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$1 = /* @__PURE__ */ getAugmentedNamespace$1(__viteBrowserExternal$1$1);\nvar pico$1 = picocolors_browserExports$1;\nvar terminalHighlight$1$1 = require$$2$1;\nvar CssSyntaxError$3$1 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$1.isColorSupported;\n if (terminalHighlight$1$1) {\n if (color) css = terminalHighlight$1$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$1_createColors = pico$1.createColors(true), bold = _pico$1_createColors.bold, gray = _pico$1_createColors.gray, red = _pico$1_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$1 = CssSyntaxError$3$1;\nCssSyntaxError$3$1.default = CssSyntaxError$3$1;\nvar symbols$1 = {};\nsymbols$1.isClean = Symbol(\"isClean\");\nsymbols$1.my = Symbol(\"my\");\nvar DEFAULT_RAW$1 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$1(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$1 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$1[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$1(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$1[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier$1 = Stringifier$2$1;\nStringifier$2$1.default = Stringifier$2$1;\nvar Stringifier$1$1 = stringifier$1;\nfunction stringify$4$1(node2, builder) {\n var str = new Stringifier$1$1(builder);\n str.stringify(node2);\n}\nvar stringify_1$1 = stringify$4$1;\nstringify$4$1.default = stringify$4$1;\nvar isClean$2$1 = symbols$1.isClean, my$2$1 = symbols$1.my;\nvar CssSyntaxError$2$1 = cssSyntaxError$1;\nvar Stringifier2$1 = stringifier$1;\nvar stringify$3$1 = stringify_1$1;\nfunction cloneNode$1(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$1(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$1(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$1 = /*#__PURE__*/ function() {\n function Node2(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$1] = false;\n this[my$2$1] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node2.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$1(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$1(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$1]) {\n this[isClean$2$1] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$1] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2$1();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$1;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node2, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node2;\n}();\nvar node$1 = Node$4$1;\nNode$4$1.default = Node$4$1;\nvar Node$3$1 = node$1;\nvar Declaration$4$1 = /*#__PURE__*/ function(Node$3$1) {\n _inherits(Declaration, Node$3$1);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$1.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3$1);\nvar declaration$1 = Declaration$4$1;\nDeclaration$4$1.default = Declaration$4$1;\nvar urlAlphabet$1 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$1[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$1 = {\n nanoid: nanoid$1$1\n};\nvar SourceMapConsumer$2$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$2$1 = require$$2$1.SourceMapGenerator;\nvar existsSync$1 = require$$2$1.existsSync, readFileSync$1 = require$$2$1.readFileSync;\nvar dirname$1$1 = require$$2$1.dirname, join$1 = require$$2$1.join;\nfunction fromBase64$1(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$1 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$1(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$1(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$1(path);\n if (existsSync$1(path)) {\n this.mapFile = path;\n return readFileSync$1(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$1)) {\n return SourceMapGenerator$2$1.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$1)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$1(dirname$1$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap$1 = PreviousMap$2$1;\nPreviousMap$2$1.default = PreviousMap$2$1;\nvar SourceMapConsumer$1$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$1$1 = require$$2$1.SourceMapGenerator;\nvar fileURLToPath$1 = require$$2$1.fileURLToPath, pathToFileURL$1$1 = require$$2$1.pathToFileURL;\nvar isAbsolute$1 = require$$2$1.isAbsolute, resolve$1$1 = require$$2$1.resolve;\nvar nanoid$2 = nonSecure$1.nanoid;\nvar terminalHighlight$2 = require$$2$1;\nvar CssSyntaxError$1$1 = cssSyntaxError$1;\nvar PreviousMap$1$1 = previousMap$1;\nvar fromOffsetCache$1 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$1 = Boolean(SourceMapConsumer$1$1 && SourceMapGenerator$1$1);\nvar pathAvailable$1$1 = Boolean(resolve$1$1 && isAbsolute$1);\nvar Input$4$1 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$1(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$1(opts.from);\n }\n }\n if (pathAvailable$1$1 && sourceMapAvailable$1$1) {\n var map = new PreviousMap$1$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$1) {\n result2.input.url = pathToFileURL$1$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$1]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$1] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$1];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$1(from.source)) {\n fromUrl = pathToFileURL$1$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$1) {\n result2.file = fileURLToPath$1(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input$1 = Input$4$1;\nInput$4$1.default = Input$4$1;\nif (terminalHighlight$2 && terminalHighlight$2.registerInput) {\n terminalHighlight$2.registerInput(Input$4$1);\n}\nvar SourceMapConsumer$3 = require$$2$1.SourceMapConsumer, SourceMapGenerator$3 = require$$2$1.SourceMapGenerator;\nvar dirname$2 = require$$2$1.dirname, relative$1 = require$$2$1.relative, resolve$2 = require$$2$1.resolve, sep$1 = require$$2$1.sep;\nvar pathToFileURL$2 = require$$2$1.pathToFileURL;\nvar Input$3$1 = input$1;\nvar sourceMapAvailable$2 = Boolean(SourceMapConsumer$3 && SourceMapGenerator$3);\nvar pathAvailable$2 = Boolean(dirname$2 && resolve$2 && relative$1 && sep$1);\nvar MapGenerator$2$1 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$2(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$3(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$2 && sourceMapAvailable$2 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$3.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$2(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$2(resolve$2(from, this.mapOpts.annotation));\n }\n var path = relative$1(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$1(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$2) {\n var fileURL = pathToFileURL$2(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$1 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator$1 = MapGenerator$2$1;\nvar Node$2$1 = node$1;\nvar Comment$4$1 = /*#__PURE__*/ function(Node$2$1) {\n _inherits(Comment, Node$2$1);\n function Comment(defaults) {\n var _this;\n _this = Node$2$1.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2$1);\nvar comment$1 = Comment$4$1;\nComment$4$1.default = Comment$4$1;\nvar isClean$1$1 = symbols$1.isClean, my$1$1 = symbols$1.my;\nvar Declaration$3$1 = declaration$1;\nvar Comment$3$1 = comment$1;\nvar Node$1$1 = node$1;\nvar parse$4$1, Rule$4$1, AtRule$4$1, Root$6$1;\nfunction cleanSource$1(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$1(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$1(node2) {\n node2[isClean$1$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$1(i2);\n }\n }\n}\nvar Container$7$1 = /*#__PURE__*/ function(Node$1$1) {\n _inherits(Container, Node$1$1);\n function Container() {\n return Node$1$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$1(parse$4$1(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$1(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$1(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$1(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$1(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$1]) Container.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$1]) markDirtyUp$1(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1$1);\nContainer$7$1.registerParse = function(dependant) {\n parse$4$1 = dependant;\n};\nContainer$7$1.registerRule = function(dependant) {\n Rule$4$1 = dependant;\n};\nContainer$7$1.registerAtRule = function(dependant) {\n AtRule$4$1 = dependant;\n};\nContainer$7$1.registerRoot = function(dependant) {\n Root$6$1 = dependant;\n};\nvar container$1 = Container$7$1;\nContainer$7$1.default = Container$7$1;\nContainer$7$1.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$1.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$1.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$1.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$1.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$1.prototype);\n }\n node2[my$1$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$1.rebuild(child);\n });\n }\n};\nvar Container$6$1 = container$1;\nvar LazyResult$4$1, Processor$3$1;\nvar Document$3$1 = /*#__PURE__*/ function(Container$6$1) {\n _inherits(Document2, Container$6$1);\n function Document2(defaults) {\n var _this;\n _this = Container$6$1.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document2.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$1(new Processor$3$1(), this, opts);\n return lazy.stringify();\n };\n return Document2;\n}(Container$6$1);\nDocument$3$1.registerLazyResult = function(dependant) {\n LazyResult$4$1 = dependant;\n};\nDocument$3$1.registerProcessor = function(dependant) {\n Processor$3$1 = dependant;\n};\nvar document$1$1 = Document$3$1;\nDocument$3$1.default = Document$3$1;\nvar printed$1 = {};\nvar warnOnce$2$1 = function warnOnce(message) {\n if (printed$1[message]) return;\n printed$1[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$1 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning$1 = Warning$2$1;\nWarning$2$1.default = Warning$2$1;\nvar Warning$1$1 = warning$1;\nvar Result$3$1 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result$1 = Result$3$1;\nResult$3$1.default = Result$3$1;\nvar SINGLE_QUOTE$1 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$1 = '\"'.charCodeAt(0);\nvar BACKSLASH$1 = \"\\\\\".charCodeAt(0);\nvar SLASH$1 = \"/\".charCodeAt(0);\nvar NEWLINE$1 = \"\\n\".charCodeAt(0);\nvar SPACE$1 = \" \".charCodeAt(0);\nvar FEED$1 = \"\\f\".charCodeAt(0);\nvar TAB$1 = \"\t\".charCodeAt(0);\nvar CR$1 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$1 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$1 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$1 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$1 = \")\".charCodeAt(0);\nvar OPEN_CURLY$1 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$1 = \"}\".charCodeAt(0);\nvar SEMICOLON$1 = \";\".charCodeAt(0);\nvar ASTERISK$1 = \"*\".charCodeAt(0);\nvar COLON$1 = \":\".charCodeAt(0);\nvar AT$1 = \"@\".charCodeAt(0);\nvar RE_AT_END$1 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$1 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$1 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$1 = /[\\da-f]/i;\nvar tokenize$1 = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$1:\n case SPACE$1:\n case TAB$1:\n case CR$1:\n case FEED$1:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$1 || code === NEWLINE$1 || code === TAB$1 || code === CR$1 || code === FEED$1);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$1:\n case CLOSE_SQUARE$1:\n case OPEN_CURLY$1:\n case CLOSE_CURLY$1:\n case COLON$1:\n case SEMICOLON$1:\n case CLOSE_PARENTHESES$1:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$1:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$1 && n2 !== DOUBLE_QUOTE$1 && n2 !== SPACE$1 && n2 !== NEWLINE$1 && n2 !== TAB$1 && n2 !== FEED$1 && n2 !== CR$1) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$1.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$1:\n case DOUBLE_QUOTE$1:\n {\n quote = code === SINGLE_QUOTE$1 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$1:\n {\n RE_AT_END$1.lastIndex = pos + 1;\n RE_AT_END$1.test(css);\n if (RE_AT_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$1.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$1:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$1){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$1 && code !== SPACE$1 && code !== NEWLINE$1 && code !== TAB$1 && code !== CR$1 && code !== FEED$1) {\n next += 1;\n if (RE_HEX_ESCAPE$1.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$1.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$1) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$1 && css.charCodeAt(pos + 1) === ASTERISK$1) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$1.lastIndex = pos + 1;\n RE_WORD_END$1.test(css);\n if (RE_WORD_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$1.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$1 = container$1;\nvar AtRule$3$1 = /*#__PURE__*/ function(Container$5$1) {\n _inherits(AtRule, Container$5$1);\n function AtRule(defaults) {\n var _this;\n _this = Container$5$1.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_append = Container$5$1.prototype.append).call.apply(_Container$5$1_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_prepend = Container$5$1.prototype.prepend).call.apply(_Container$5$1_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5$1);\nvar atRule$1 = AtRule$3$1;\nAtRule$3$1.default = AtRule$3$1;\nContainer$5$1.registerAtRule(AtRule$3$1);\nvar Container$4$1 = container$1;\nvar LazyResult$3$1, Processor$2$1;\nvar Root$5$1 = /*#__PURE__*/ function(Container$4$1) {\n _inherits(Root, Container$4$1);\n function Root(defaults) {\n var _this;\n _this = Container$4$1.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$1.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$1.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$1(new Processor$2$1(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4$1);\nRoot$5$1.registerLazyResult = function(dependant) {\n LazyResult$3$1 = dependant;\n};\nRoot$5$1.registerProcessor = function(dependant) {\n Processor$2$1 = dependant;\n};\nvar root$1 = Root$5$1;\nRoot$5$1.default = Root$5$1;\nContainer$4$1.registerRoot(Root$5$1);\nvar list$2$1 = {\n comma: function comma(string) {\n return list$2$1.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$1.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$1 = list$2$1;\nlist$2$1.default = list$2$1;\nvar Container$3$1 = container$1;\nvar list$1$1 = list_1$1;\nvar Rule$3$1 = /*#__PURE__*/ function(Container$3$1) {\n _inherits(Rule, Container$3$1);\n function Rule(defaults) {\n var _this;\n _this = Container$3$1.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3$1);\nvar rule$1 = Rule$3$1;\nRule$3$1.default = Rule$3$1;\nContainer$3$1.registerRule(Rule$3$1);\nvar Declaration$2$1 = declaration$1;\nvar tokenizer2$1 = tokenize$1;\nvar Comment$2$1 = comment$1;\nvar AtRule$2$1 = atRule$1;\nvar Root$4$1 = root$1;\nvar Rule$2$1 = rule$1;\nvar SAFE_COMMENT_NEIGHBOR$1 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$1(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4$1();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$1();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$1();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2$1(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$1();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$1(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$1();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$1[prev] && !SAFE_COMMENT_NEIGHBOR$1[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$1();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser$1 = Parser$1$1;\nvar Container$2$1 = container$1;\nvar Parser2$1 = parser$1;\nvar Input$2$1 = input$1;\nfunction parse$3$1(css, opts) {\n var input2 = new Input$2$1(css, opts);\n var parser2 = new Parser2$1(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$1 = parse$3$1;\nparse$3$1.default = parse$3$1;\nContainer$2$1.registerParse(parse$3$1);\nvar isClean$3 = symbols$1.isClean, my$3 = symbols$1.my;\nvar MapGenerator$1$1 = mapGenerator$1;\nvar stringify$2$1 = stringify_1$1;\nvar Container$1$1 = container$1;\nvar Document$2$1 = document$1$1;\nvar warnOnce$1$1 = warnOnce$2$1;\nvar Result$2$1 = result$1;\nvar parse$2$1 = parse_1$1;\nvar Root$3$1 = root$1;\nvar TYPE_TO_CLASS_NAME$1 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$1 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$1 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$1 = 0;\nfunction isPromise$1(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$1(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$1[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$1,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$1,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$1(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$1,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$1,\n \"RootExit\"\n ];\n } else {\n events = getEvents$1(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$1(node2) {\n node2[isClean$3] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$1(i2);\n });\n return node2;\n}\nvar postcss$2$1 = {};\nvar LazyResult$2$1 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$1(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2$1)) {\n root2 = cleanMarks$1(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$1;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$3]) {\n Container$1$1.rebuild(root2);\n }\n }\n this.result = new Result$2$1(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$1, {\n postcss: postcss$2$1,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$1[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$1[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$1(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$3]) return [\n 3,\n 14\n ];\n root2[isClean$3] = true;\n stack = [\n toStack$1(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$1(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$1(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$1;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$3]){\n root2[isClean$3] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$3]) {\n child[isClean$3] = true;\n stack.push(toStack$1(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$1) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$3] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$3] = true;\n var events = getEvents$1(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$1) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$3]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2$1.registerPostcss = function(dependant) {\n postcss$2$1 = dependant;\n};\nvar lazyResult$1 = LazyResult$2$1;\nLazyResult$2$1.default = LazyResult$2$1;\nRoot$3$1.registerLazyResult(LazyResult$2$1);\nDocument$2$1.registerLazyResult(LazyResult$2$1);\nvar MapGenerator2$1 = mapGenerator$1;\nvar stringify$1$1 = stringify_1$1;\nvar warnOnce2$1 = warnOnce$2$1;\nvar parse$1$1 = parse_1$1;\nvar Result$1$1 = result$1;\nvar NoWorkResult$1$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$1;\n this.result = new Result$1$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2$1(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult$1 = NoWorkResult$1$1;\nNoWorkResult$1$1.default = NoWorkResult$1$1;\nvar NoWorkResult2$1 = noWorkResult$1;\nvar LazyResult$1$1 = lazyResult$1;\nvar Document$1$1 = document$1$1;\nvar Root$2$1 = root$1;\nvar Processor$1$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2$1(this, css, opts);\n } else {\n return new LazyResult$1$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor$1 = Processor$1$1;\nProcessor$1$1.default = Processor$1$1;\nRoot$2$1.registerProcessor(Processor$1$1);\nDocument$1$1.registerProcessor(Processor$1$1);\nvar Declaration$1$1 = declaration$1;\nvar PreviousMap2$1 = previousMap$1;\nvar Comment$1$1 = comment$1;\nvar AtRule$1$1 = atRule$1;\nvar Input$1$1 = input$1;\nvar Root$1$1 = root$1;\nvar Rule$1$1 = rule$1;\nfunction fromJSON$1$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$1(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2$1.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$1(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$1 = fromJSON$1$1;\nfromJSON$1$1.default = fromJSON$1$1;\nvar CssSyntaxError2$1 = cssSyntaxError$1;\nvar Declaration2$1 = declaration$1;\nvar LazyResult2$1 = lazyResult$1;\nvar Container2$1 = container$1;\nvar Processor2$1 = processor$1;\nvar stringify$5$1 = stringify_1$1;\nvar fromJSON$2 = fromJSON_1$1;\nvar Document22 = document$1$1;\nvar Warning2$1 = warning$1;\nvar Comment2$1 = comment$1;\nvar AtRule2$1 = atRule$1;\nvar Result2$1 = result$1;\nvar Input2$1 = input$1;\nvar parse$5 = parse_1$1;\nvar list$3 = list_1$1;\nvar Rule2$1 = rule$1;\nvar Root2$1 = root$1;\nvar Node2$1 = node$1;\nfunction postcss$3() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2$1(plugins);\n}\npostcss$3.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2$1().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$3([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$3.stringify = stringify$5$1;\npostcss$3.parse = parse$5;\npostcss$3.fromJSON = fromJSON$2;\npostcss$3.list = list$3;\npostcss$3.comment = function(defaults) {\n return new Comment2$1(defaults);\n};\npostcss$3.atRule = function(defaults) {\n return new AtRule2$1(defaults);\n};\npostcss$3.decl = function(defaults) {\n return new Declaration2$1(defaults);\n};\npostcss$3.rule = function(defaults) {\n return new Rule2$1(defaults);\n};\npostcss$3.root = function(defaults) {\n return new Root2$1(defaults);\n};\npostcss$3.document = function(defaults) {\n return new Document22(defaults);\n};\npostcss$3.CssSyntaxError = CssSyntaxError2$1;\npostcss$3.Declaration = Declaration2$1;\npostcss$3.Container = Container2$1;\npostcss$3.Processor = Processor2$1;\npostcss$3.Document = Document22;\npostcss$3.Comment = Comment2$1;\npostcss$3.Warning = Warning2$1;\npostcss$3.AtRule = AtRule2$1;\npostcss$3.Result = Result2$1;\npostcss$3.Input = Input2$1;\npostcss$3.Rule = Rule2$1;\npostcss$3.Root = Root2$1;\npostcss$3.Node = Node2$1;\nLazyResult2$1.registerPostcss(postcss$3);\nvar postcss_1$1 = postcss$3;\npostcss$3.default = postcss$3;\nvar postcss$1$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(postcss_1$1);\npostcss$1$1.stringify;\npostcss$1$1.fromJSON;\npostcss$1$1.plugin;\npostcss$1$1.parse;\npostcss$1$1.list;\npostcss$1$1.document;\npostcss$1$1.comment;\npostcss$1$1.atRule;\npostcss$1$1.rule;\npostcss$1$1.decl;\npostcss$1$1.root;\npostcss$1$1.CssSyntaxError;\npostcss$1$1.Declaration;\npostcss$1$1.Container;\npostcss$1$1.Processor;\npostcss$1$1.Document;\npostcss$1$1.Comment;\npostcss$1$1.Warning;\npostcss$1$1.AtRule;\npostcss$1$1.Result;\npostcss$1$1.Input;\npostcss$1$1.Rule;\npostcss$1$1.Root;\npostcss$1$1.Node;\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = function(obj, key, value) {\n return key in obj ? __defProp2(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField2 = function(obj, key, value) {\n return __defNormalProp2(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction getDefaultExportFromCjs$2(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$2(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$2 = {\n exports: {}\n};\nvar x$2 = String;\nvar create$2 = function create$2() {\n return {\n isColorSupported: false,\n reset: x$2,\n bold: x$2,\n dim: x$2,\n italic: x$2,\n underline: x$2,\n inverse: x$2,\n hidden: x$2,\n strikethrough: x$2,\n black: x$2,\n red: x$2,\n green: x$2,\n yellow: x$2,\n blue: x$2,\n magenta: x$2,\n cyan: x$2,\n white: x$2,\n gray: x$2,\n bgBlack: x$2,\n bgRed: x$2,\n bgGreen: x$2,\n bgYellow: x$2,\n bgBlue: x$2,\n bgMagenta: x$2,\n bgCyan: x$2,\n bgWhite: x$2\n };\n};\npicocolors_browser$2.exports = create$2();\npicocolors_browser$2.exports.createColors = create$2;\nvar picocolors_browserExports$2 = picocolors_browser$2.exports;\nvar __viteBrowserExternal$3 = {};\nvar __viteBrowserExternal$1$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$3\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$2 = /* @__PURE__ */ getAugmentedNamespace$2(__viteBrowserExternal$1$2);\nvar pico$2 = picocolors_browserExports$2;\nvar terminalHighlight$1$2 = require$$2$2;\nvar CssSyntaxError$3$2 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError2, Error1);\n function CssSyntaxError2(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError2);\n }\n return _this;\n }\n var _proto = CssSyntaxError2.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$2.isColorSupported;\n if (terminalHighlight$1$2) {\n if (color) css = terminalHighlight$1$2(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$2_createColors = pico$2.createColors(true), bold = _pico$2_createColors.bold, gray = _pico$2_createColors.gray, red = _pico$2_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError2;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$2 = CssSyntaxError$3$2;\nCssSyntaxError$3$2.default = CssSyntaxError$3$2;\nvar symbols$2 = {};\nsymbols$2.isClean = Symbol(\"isClean\");\nsymbols$2.my = Symbol(\"my\");\nvar DEFAULT_RAW$2 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$2(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$2 = /*#__PURE__*/ function() {\n function Stringifier2(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier2.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$2[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$2(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$2[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier2;\n}();\nvar stringifier$2 = Stringifier$2$2;\nStringifier$2$2.default = Stringifier$2$2;\nvar Stringifier$1$2 = stringifier$2;\nfunction stringify$4$2(node2, builder) {\n var str = new Stringifier$1$2(builder);\n str.stringify(node2);\n}\nvar stringify_1$2 = stringify$4$2;\nstringify$4$2.default = stringify$4$2;\nvar isClean$2$2 = symbols$2.isClean, my$2$2 = symbols$2.my;\nvar CssSyntaxError$2$2 = cssSyntaxError$2;\nvar Stringifier22 = stringifier$2;\nvar stringify$3$2 = stringify_1$2;\nfunction cloneNode$2(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$2(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$2(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$2 = /*#__PURE__*/ function() {\n function Node3(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$2] = false;\n this[my$2$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node3.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$2(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$2]) {\n this[isClean$2$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier22();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$2;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node3, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node3;\n}();\nvar node$2 = Node$4$2;\nNode$4$2.default = Node$4$2;\nvar Node$3$2 = node$2;\nvar Declaration$4$2 = /*#__PURE__*/ function(Node$3$2) {\n _inherits(Declaration2, Node$3$2);\n function Declaration2(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$2.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration2, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration2;\n}(Node$3$2);\nvar declaration$2 = Declaration$4$2;\nDeclaration$4$2.default = Declaration$4$2;\nvar urlAlphabet$2 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$2 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$2[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$2 = {\n nanoid: nanoid$1$2\n};\nvar SourceMapConsumer$2$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$2$2 = require$$2$2.SourceMapGenerator;\nvar existsSync$2 = require$$2$2.existsSync, readFileSync$2 = require$$2$2.readFileSync;\nvar dirname$1$2 = require$$2$2.dirname, join$2 = require$$2$2.join;\nfunction fromBase64$2(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$2 = /*#__PURE__*/ function() {\n function PreviousMap2(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$2(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap2.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$2(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$2(path);\n if (existsSync$2(path)) {\n this.mapFile = path;\n return readFileSync$2(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$2)) {\n return SourceMapGenerator$2$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$2(dirname$1$2(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap2;\n}();\nvar previousMap$2 = PreviousMap$2$2;\nPreviousMap$2$2.default = PreviousMap$2$2;\nvar SourceMapConsumer$1$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$1$2 = require$$2$2.SourceMapGenerator;\nvar fileURLToPath$2 = require$$2$2.fileURLToPath, pathToFileURL$1$2 = require$$2$2.pathToFileURL;\nvar isAbsolute$2 = require$$2$2.isAbsolute, resolve$1$2 = require$$2$2.resolve;\nvar nanoid$3 = nonSecure$2.nanoid;\nvar terminalHighlight$3 = require$$2$2;\nvar CssSyntaxError$1$2 = cssSyntaxError$2;\nvar PreviousMap$1$2 = previousMap$2;\nvar fromOffsetCache$2 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$2 = Boolean(SourceMapConsumer$1$2 && SourceMapGenerator$1$2);\nvar pathAvailable$1$2 = Boolean(resolve$1$2 && isAbsolute$2);\nvar Input$4$2 = /*#__PURE__*/ function() {\n function Input2(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$2 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$2(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$2(opts.from);\n }\n }\n if (pathAvailable$1$2 && sourceMapAvailable$1$2) {\n var map = new PreviousMap$1$2(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input2.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$2(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$2(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$2) {\n result2.input.url = pathToFileURL$1$2(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$2]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$2] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$2];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$2(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$2(from.source)) {\n fromUrl = pathToFileURL$1$2(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$2(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$2) {\n result2.file = fileURLToPath$2(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input2, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input2;\n}();\nvar input$2 = Input$4$2;\nInput$4$2.default = Input$4$2;\nif (terminalHighlight$3 && terminalHighlight$3.registerInput) {\n terminalHighlight$3.registerInput(Input$4$2);\n}\nvar SourceMapConsumer$4 = require$$2$2.SourceMapConsumer, SourceMapGenerator$4 = require$$2$2.SourceMapGenerator;\nvar dirname$3 = require$$2$2.dirname, relative$2 = require$$2$2.relative, resolve$3 = require$$2$2.resolve, sep$2 = require$$2$2.sep;\nvar pathToFileURL$3 = require$$2$2.pathToFileURL;\nvar Input$3$2 = input$2;\nvar sourceMapAvailable$3 = Boolean(SourceMapConsumer$4 && SourceMapGenerator$4);\nvar pathAvailable$3 = Boolean(dirname$3 && resolve$3 && relative$2 && sep$2);\nvar MapGenerator$2$2 = /*#__PURE__*/ function() {\n function MapGenerator2(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator2.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$3(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$4(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$3 && sourceMapAvailable$3 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$4.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$3(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$3(resolve$3(from, this.mapOpts.annotation));\n }\n var path = relative$2(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$2(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$3) {\n var fileURL = pathToFileURL$3(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$2 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator2;\n}();\nvar mapGenerator$2 = MapGenerator$2$2;\nvar Node$2$2 = node$2;\nvar Comment$4$2 = /*#__PURE__*/ function(Node$2$2) {\n _inherits(Comment2, Node$2$2);\n function Comment2(defaults) {\n var _this;\n _this = Node$2$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment2;\n}(Node$2$2);\nvar comment$2 = Comment$4$2;\nComment$4$2.default = Comment$4$2;\nvar isClean$1$2 = symbols$2.isClean, my$1$2 = symbols$2.my;\nvar Declaration$3$2 = declaration$2;\nvar Comment$3$2 = comment$2;\nvar Node$1$2 = node$2;\nvar parse$4$2, Rule$4$2, AtRule$4$2, Root$6$2;\nfunction cleanSource$2(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$2(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$2(node2) {\n node2[isClean$1$2] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$2(i2);\n }\n }\n}\nvar Container$7$2 = /*#__PURE__*/ function(Node$1$2) {\n _inherits(Container2, Node$1$2);\n function Container2() {\n return Node$1$2.apply(this, arguments) || this;\n }\n var _proto = Container2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$2.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$2(parse$4$2(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$2(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$2(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$2(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$2(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$2]) Container2.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$2]) markDirtyUp$2(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container2, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container2;\n}(Node$1$2);\nContainer$7$2.registerParse = function(dependant) {\n parse$4$2 = dependant;\n};\nContainer$7$2.registerRule = function(dependant) {\n Rule$4$2 = dependant;\n};\nContainer$7$2.registerAtRule = function(dependant) {\n AtRule$4$2 = dependant;\n};\nContainer$7$2.registerRoot = function(dependant) {\n Root$6$2 = dependant;\n};\nvar container$2 = Container$7$2;\nContainer$7$2.default = Container$7$2;\nContainer$7$2.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$2.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$2.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$2.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$2.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$2.prototype);\n }\n node2[my$1$2] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$2.rebuild(child);\n });\n }\n};\nvar Container$6$2 = container$2;\nvar LazyResult$4$2, Processor$3$2;\nvar Document$3$2 = /*#__PURE__*/ function(Container$6$2) {\n _inherits(Document23, Container$6$2);\n function Document23(defaults) {\n var _this;\n _this = Container$6$2.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document23.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$2(new Processor$3$2(), this, opts);\n return lazy.stringify();\n };\n return Document23;\n}(Container$6$2);\nDocument$3$2.registerLazyResult = function(dependant) {\n LazyResult$4$2 = dependant;\n};\nDocument$3$2.registerProcessor = function(dependant) {\n Processor$3$2 = dependant;\n};\nvar document$1$2 = Document$3$2;\nDocument$3$2.default = Document$3$2;\nvar printed$2 = {};\nvar warnOnce$2$2 = function warnOnce2(message) {\n if (printed$2[message]) return;\n printed$2[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$2 = /*#__PURE__*/ function() {\n function Warning2(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning2.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning2;\n}();\nvar warning$2 = Warning$2$2;\nWarning$2$2.default = Warning$2$2;\nvar Warning$1$2 = warning$2;\nvar Result$3$2 = /*#__PURE__*/ function() {\n function Result2(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result2.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$2(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result2, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result2;\n}();\nvar result$2 = Result$3$2;\nResult$3$2.default = Result$3$2;\nvar SINGLE_QUOTE$2 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$2 = '\"'.charCodeAt(0);\nvar BACKSLASH$2 = \"\\\\\".charCodeAt(0);\nvar SLASH$2 = \"/\".charCodeAt(0);\nvar NEWLINE$2 = \"\\n\".charCodeAt(0);\nvar SPACE$2 = \" \".charCodeAt(0);\nvar FEED$2 = \"\\f\".charCodeAt(0);\nvar TAB$2 = \"\t\".charCodeAt(0);\nvar CR$2 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$2 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$2 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$2 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$2 = \")\".charCodeAt(0);\nvar OPEN_CURLY$2 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$2 = \"}\".charCodeAt(0);\nvar SEMICOLON$2 = \";\".charCodeAt(0);\nvar ASTERISK$2 = \"*\".charCodeAt(0);\nvar COLON$2 = \":\".charCodeAt(0);\nvar AT$2 = \"@\".charCodeAt(0);\nvar RE_AT_END$2 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$2 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$2 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$2 = /[\\da-f]/i;\nvar tokenize$2 = function tokenizer2(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$2:\n case SPACE$2:\n case TAB$2:\n case CR$2:\n case FEED$2:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$2 || code === NEWLINE$2 || code === TAB$2 || code === CR$2 || code === FEED$2);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$2:\n case CLOSE_SQUARE$2:\n case OPEN_CURLY$2:\n case CLOSE_CURLY$2:\n case COLON$2:\n case SEMICOLON$2:\n case CLOSE_PARENTHESES$2:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$2:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$2 && n2 !== DOUBLE_QUOTE$2 && n2 !== SPACE$2 && n2 !== NEWLINE$2 && n2 !== TAB$2 && n2 !== FEED$2 && n2 !== CR$2) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$2.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$2:\n case DOUBLE_QUOTE$2:\n {\n quote = code === SINGLE_QUOTE$2 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$2:\n {\n RE_AT_END$2.lastIndex = pos + 1;\n RE_AT_END$2.test(css);\n if (RE_AT_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$2.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$2:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$2){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$2 && code !== SPACE$2 && code !== NEWLINE$2 && code !== TAB$2 && code !== CR$2 && code !== FEED$2) {\n next += 1;\n if (RE_HEX_ESCAPE$2.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$2.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$2) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$2 && css.charCodeAt(pos + 1) === ASTERISK$2) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$2.lastIndex = pos + 1;\n RE_WORD_END$2.test(css);\n if (RE_WORD_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$2.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$2 = container$2;\nvar AtRule$3$2 = /*#__PURE__*/ function(Container$5$2) {\n _inherits(AtRule2, Container$5$2);\n function AtRule2(defaults) {\n var _this;\n _this = Container$5$2.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_append = Container$5$2.prototype.append).call.apply(_Container$5$2_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_prepend = Container$5$2.prototype.prepend).call.apply(_Container$5$2_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule2;\n}(Container$5$2);\nvar atRule$2 = AtRule$3$2;\nAtRule$3$2.default = AtRule$3$2;\nContainer$5$2.registerAtRule(AtRule$3$2);\nvar Container$4$2 = container$2;\nvar LazyResult$3$2, Processor$2$2;\nvar Root$5$2 = /*#__PURE__*/ function(Container$4$2) {\n _inherits(Root2, Container$4$2);\n function Root2(defaults) {\n var _this;\n _this = Container$4$2.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root2.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$2.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$2.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$2(new Processor$2$2(), this, opts);\n return lazy.stringify();\n };\n return Root2;\n}(Container$4$2);\nRoot$5$2.registerLazyResult = function(dependant) {\n LazyResult$3$2 = dependant;\n};\nRoot$5$2.registerProcessor = function(dependant) {\n Processor$2$2 = dependant;\n};\nvar root$2 = Root$5$2;\nRoot$5$2.default = Root$5$2;\nContainer$4$2.registerRoot(Root$5$2);\nvar list$2$2 = {\n comma: function comma(string) {\n return list$2$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$2 = list$2$2;\nlist$2$2.default = list$2$2;\nvar Container$3$2 = container$2;\nvar list$1$2 = list_1$2;\nvar Rule$3$2 = /*#__PURE__*/ function(Container$3$2) {\n _inherits(Rule2, Container$3$2);\n function Rule2(defaults) {\n var _this;\n _this = Container$3$2.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule2, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$2.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule2;\n}(Container$3$2);\nvar rule$2 = Rule$3$2;\nRule$3$2.default = Rule$3$2;\nContainer$3$2.registerRule(Rule$3$2);\nvar Declaration$2$2 = declaration$2;\nvar tokenizer22 = tokenize$2;\nvar Comment$2$2 = comment$2;\nvar AtRule$2$2 = atRule$2;\nvar Root$4$2 = root$2;\nvar Rule$2$2 = rule$2;\nvar SAFE_COMMENT_NEIGHBOR$2 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$2(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$2 = /*#__PURE__*/ function() {\n function Parser2(input2) {\n this.input = input2;\n this.root = new Root$4$2();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser2.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer22(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$2(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$2[prev] && !SAFE_COMMENT_NEIGHBOR$2[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser2;\n}();\nvar parser$2 = Parser$1$2;\nvar Container$2$2 = container$2;\nvar Parser22 = parser$2;\nvar Input$2$2 = input$2;\nfunction parse$3$2(css, opts) {\n var input2 = new Input$2$2(css, opts);\n var parser2 = new Parser22(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$2 = parse$3$2;\nparse$3$2.default = parse$3$2;\nContainer$2$2.registerParse(parse$3$2);\nvar isClean$4 = symbols$2.isClean, my$4 = symbols$2.my;\nvar MapGenerator$1$2 = mapGenerator$2;\nvar stringify$2$2 = stringify_1$2;\nvar Container$1$2 = container$2;\nvar Document$2$2 = document$1$2;\nvar warnOnce$1$2 = warnOnce$2$2;\nvar Result$2$2 = result$2;\nvar parse$2$2 = parse_1$2;\nvar Root$3$2 = root$2;\nvar TYPE_TO_CLASS_NAME$2 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$2 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$2 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$2 = 0;\nfunction isPromise$2(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$2(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$2[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$2,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$2,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$2(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$2,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$2,\n \"RootExit\"\n ];\n } else {\n events = getEvents$2(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$2(node2) {\n node2[isClean$4] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$2(i2);\n });\n return node2;\n}\nvar postcss$2$2 = {};\nvar LazyResult$2$2 = /*#__PURE__*/ function() {\n function LazyResult2(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$2(css);\n } else if (_instanceof(css, LazyResult2) || _instanceof(css, Result$2$2)) {\n root2 = cleanMarks$2(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$4]) {\n Container$1$2.rebuild(root2);\n }\n }\n this.result = new Result$2$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$2, {\n postcss: postcss$2$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$2[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$2[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$2(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$4]) return [\n 3,\n 14\n ];\n root2[isClean$4] = true;\n stack = [\n toStack$2(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$2(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$2(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$2(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$4]){\n root2[isClean$4] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$4]) {\n child[isClean$4] = true;\n stack.push(toStack$2(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$2) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$4] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$4] = true;\n var events = getEvents$2(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$2) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$4]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult2;\n}();\nLazyResult$2$2.registerPostcss = function(dependant) {\n postcss$2$2 = dependant;\n};\nvar lazyResult$2 = LazyResult$2$2;\nLazyResult$2$2.default = LazyResult$2$2;\nRoot$3$2.registerLazyResult(LazyResult$2$2);\nDocument$2$2.registerLazyResult(LazyResult$2$2);\nvar MapGenerator22 = mapGenerator$2;\nvar stringify$1$2 = stringify_1$2;\nvar warnOnce22 = warnOnce$2$2;\nvar parse$1$2 = parse_1$2;\nvar Result$1$2 = result$2;\nvar NoWorkResult$1$2 = /*#__PURE__*/ function() {\n function NoWorkResult2(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$2;\n this.result = new Result$1$2(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator22(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce22(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$2;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult2;\n}();\nvar noWorkResult$2 = NoWorkResult$1$2;\nNoWorkResult$1$2.default = NoWorkResult$1$2;\nvar NoWorkResult22 = noWorkResult$2;\nvar LazyResult$1$2 = lazyResult$2;\nvar Document$1$2 = document$1$2;\nvar Root$2$2 = root$2;\nvar Processor$1$2 = /*#__PURE__*/ function() {\n function Processor2(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor2.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult22(this, css, opts);\n } else {\n return new LazyResult$1$2(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor2;\n}();\nvar processor$2 = Processor$1$2;\nProcessor$1$2.default = Processor$1$2;\nRoot$2$2.registerProcessor(Processor$1$2);\nDocument$1$2.registerProcessor(Processor$1$2);\nvar Declaration$1$2 = declaration$2;\nvar PreviousMap22 = previousMap$2;\nvar Comment$1$2 = comment$2;\nvar AtRule$1$2 = atRule$2;\nvar Input$1$2 = input$2;\nvar Root$1$2 = root$2;\nvar Rule$1$2 = rule$2;\nfunction fromJSON$1$2(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$2(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$2.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap22.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$2(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$2(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$2(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$2(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$2(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$2(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$2 = fromJSON$1$2;\nfromJSON$1$2.default = fromJSON$1$2;\nvar CssSyntaxError22 = cssSyntaxError$2;\nvar Declaration22 = declaration$2;\nvar LazyResult22 = lazyResult$2;\nvar Container22 = container$2;\nvar Processor22 = processor$2;\nvar stringify$6 = stringify_1$2;\nvar fromJSON$3 = fromJSON_1$2;\nvar Document222 = document$1$2;\nvar Warning22 = warning$2;\nvar Comment22 = comment$2;\nvar AtRule22 = atRule$2;\nvar Result22 = result$2;\nvar Input22 = input$2;\nvar parse$6 = parse_1$2;\nvar list$4 = list_1$2;\nvar Rule22 = rule$2;\nvar Root22 = root$2;\nvar Node22 = node$2;\nfunction postcss$4() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor22(plugins);\n}\npostcss$4.plugin = function plugin2(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor22().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$4([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$4.stringify = stringify$6;\npostcss$4.parse = parse$6;\npostcss$4.fromJSON = fromJSON$3;\npostcss$4.list = list$4;\npostcss$4.comment = function(defaults) {\n return new Comment22(defaults);\n};\npostcss$4.atRule = function(defaults) {\n return new AtRule22(defaults);\n};\npostcss$4.decl = function(defaults) {\n return new Declaration22(defaults);\n};\npostcss$4.rule = function(defaults) {\n return new Rule22(defaults);\n};\npostcss$4.root = function(defaults) {\n return new Root22(defaults);\n};\npostcss$4.document = function(defaults) {\n return new Document222(defaults);\n};\npostcss$4.CssSyntaxError = CssSyntaxError22;\npostcss$4.Declaration = Declaration22;\npostcss$4.Container = Container22;\npostcss$4.Processor = Processor22;\npostcss$4.Document = Document222;\npostcss$4.Comment = Comment22;\npostcss$4.Warning = Warning22;\npostcss$4.AtRule = AtRule22;\npostcss$4.Result = Result22;\npostcss$4.Input = Input22;\npostcss$4.Rule = Rule22;\npostcss$4.Root = Root22;\npostcss$4.Node = Node22;\nLazyResult22.registerPostcss(postcss$4);\nvar postcss_1$2 = postcss$4;\npostcss$4.default = postcss$4;\nvar postcss$1$2 = /* @__PURE__ */ getDefaultExportFromCjs$2(postcss_1$2);\npostcss$1$2.stringify;\npostcss$1$2.fromJSON;\npostcss$1$2.plugin;\npostcss$1$2.parse;\npostcss$1$2.list;\npostcss$1$2.document;\npostcss$1$2.comment;\npostcss$1$2.atRule;\npostcss$1$2.rule;\npostcss$1$2.decl;\npostcss$1$2.root;\npostcss$1$2.CssSyntaxError;\npostcss$1$2.Declaration;\npostcss$1$2.Container;\npostcss$1$2.Processor;\npostcss$1$2.Document;\npostcss$1$2.Comment;\npostcss$1$2.Warning;\npostcss$1$2.AtRule;\npostcss$1$2.Result;\npostcss$1$2.Input;\npostcss$1$2.Rule;\npostcss$1$2.Root;\npostcss$1$2.Node;\nvar BaseRRNode = /*#__PURE__*/ function() {\n function BaseRRNode() {\n for(var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++){\n _args[_key] = arguments[_key];\n }\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n var _proto = BaseRRNode.prototype;\n _proto.contains = function contains(node2) {\n if (!_instanceof(node2, BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while(node2.parentNode){\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.appendChild = function appendChild(_newChild) {\n throw new Error(\"RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.insertBefore = function insertBefore(_newChild, _refChild) {\n throw new Error(\"RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.removeChild = function removeChild(_node) {\n throw new Error(\"RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n _proto.toString = function toString() {\n return \"RRNode\";\n };\n _create_class(BaseRRNode, [\n {\n key: \"childNodes\",\n get: function get() {\n var childNodes2 = [];\n var childIterator = this.firstChild;\n while(childIterator){\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n }\n ]);\n return BaseRRNode;\n}();\nvar testableAccessors$2 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$2 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$2 = {};\nvar isAngularZonePresent$2 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$2(key) {\n if (untaintedBasePrototype$2[key]) return untaintedBasePrototype$2[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$2 ? testableAccessors$2[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$2 ? testableMethods$2[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$2()) {\n untaintedBasePrototype$2[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$2[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$2 = {};\nfunction getUntaintedAccessor$2(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$2[cacheKey]) return untaintedAccessorCache$2[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$2[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$2 = {};\nfunction getUntaintedMethod$2(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$2[cacheKey]) return untaintedMethodCache$2[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$2[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"textContent\");\n}\nfunction contains$2(n2, other) {\n return getUntaintedMethod$2(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$2(n2) {\n return getUntaintedMethod$2(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$2(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$2(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$2(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$2(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$2(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$2() {\n return getUntaintedPrototype$2(\"MutationObserver\").constructor;\n}\nfunction patch$2(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$2 = {\n childNodes: childNodes$2,\n parentNode: parentNode$2,\n parentElement: parentElement$2,\n textContent: textContent$2,\n contains: contains$2,\n getRootNode: getRootNode$2,\n host: host$2,\n styleSheets: styleSheets$2,\n shadowRoot: shadowRoot$2,\n querySelector: querySelector$2,\n querySelectorAll: querySelectorAll$2,\n mutationObserver: mutationObserverCtor$2,\n patch: patch$2\n};\nfunction on(type, fn, target) {\n if (target === void 0) target = document;\n var options = {\n capture: true,\n passive: true\n };\n target.addEventListener(type, fn, options);\n return function() {\n return target.removeEventListener(type, fn, options);\n };\n}\nvar DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nvar _mirror = {\n map: {},\n getId: function getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode: function getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap: function removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has: function has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset: function reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get: function get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options) {\n if (options === void 0) options = {};\n var timeout = null;\n var previous = 0;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n var context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(function() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win) {\n if (win === void 0) win = window;\n var original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked ? d : {\n set: function set(value) {\n var _this = this;\n setTimeout(function() {\n d.set.call(_this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n });\n return function() {\n return hookSetter(target, key, original || {}, true);\n };\n}\nvar nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = function() {\n return /* @__PURE__ */ new Date().getTime();\n };\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n var doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index$2.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index$2.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n var el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index$2.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n var el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex$1(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {}\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n var id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n var parent = index$2.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win) {\n if (win === void 0) win = window;\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2));\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (_instanceof(n2, BaseRRNode) && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index$2.shadowRoot(n2));\n}\nvar StyleSheetMirror = /*#__PURE__*/ function() {\n function StyleSheetMirror() {\n __publicField$1(this, \"id\", 1);\n __publicField$1(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n var _proto = StyleSheetMirror.prototype;\n _proto.getId = function getId(stylesheet) {\n var _this_styleIDMap_get;\n return (_this_styleIDMap_get = this.styleIDMap.get(stylesheet)) != null ? _this_styleIDMap_get : -1;\n };\n _proto.has = function has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n };\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */ _proto.add = function add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n var newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n };\n _proto.getStyle = function getStyle(id) {\n return this.idStyleMap.get(id) || null;\n };\n _proto.reset = function reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n };\n _proto.generateId = function generateId() {\n return this.id++;\n };\n _proto.remove = function remove(stylesheet) {\n var id = this.styleIDMap.get(stylesheet);\n if (id !== void 0) {\n this.styleIDMap.delete(stylesheet);\n this.idStyleMap.delete(id);\n return true;\n }\n return false;\n };\n return StyleSheetMirror;\n}();\nfunction getShadowHost(n2) {\n var _a2;\n var shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index$2.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index$2.host(index$2.getRootNode(n2))) shadowHost = index$2.host(index$2.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n var rootShadowHost = n2;\n var shadowHost;\n while(shadowHost = getShadowHost(rootShadowHost))rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n var shadowHost = getRootShadowHost(n2);\n return index$2.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n return index$2.contains(doc, n2) || shadowHostInDom(n2);\n}\nvar EventType = /* @__PURE__ */ function(EventType2) {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n}(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ function(IncrementalSource2) {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n}(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ function(MouseInteractions2) {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n}(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ function(PointerTypes2) {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n}(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ function(CanvasContext2) {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n}(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ function(MediaInteractions2) {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n}(MediaInteractions || {});\nvar NodeType = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nvar DoubleLinkedList = /*#__PURE__*/ function() {\n function DoubleLinkedList() {\n __publicField$1(this, \"length\", 0);\n __publicField$1(this, \"head\", null);\n __publicField$1(this, \"tail\", null);\n }\n var _proto = DoubleLinkedList.prototype;\n _proto.get = function get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n var current = this.head;\n for(var index2 = 0; index2 < position; index2++){\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n };\n _proto.addNode = function addNode(n2) {\n var node2 = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node2;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n var current = n2.previousSibling.__ln.next;\n node2.next = current;\n node2.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node2;\n if (current) {\n current.previous = node2;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n var current1 = n2.nextSibling.__ln.previous;\n node2.previous = current1;\n node2.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node2;\n if (current1) {\n current1.next = node2;\n }\n } else {\n if (this.head) {\n this.head.previous = node2;\n }\n node2.next = this.head;\n this.head = node2;\n }\n if (node2.next === null) {\n this.tail = node2;\n }\n this.length++;\n };\n _proto.removeNode = function removeNode(n2) {\n var current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n };\n return DoubleLinkedList;\n}();\nvar moveKey = function(id, parentId) {\n return id + \"@\" + parentId;\n};\nvar MutationBuffer = /*#__PURE__*/ function() {\n function MutationBuffer() {\n var _this = this;\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"texts\", []);\n __publicField$1(this, \"attributes\", []);\n __publicField$1(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"removes\", []);\n __publicField$1(this, \"mapRemoves\", []);\n __publicField$1(this, \"movedMap\", {});\n /**\n * the browser MutationObserver emits multiple mutations after\n * a delay for performance reasons, making tracing added nodes hard\n * in our `processMutations` callback function.\n * For example, if we append an element el_1 into body, and then append\n * another element el_2 into el_1, these two mutations may be passed to the\n * callback function together when the two operations were done.\n * Generally we need to trace child nodes of newly added nodes, but in this\n * case if we count el_2 as el_1's child node in the first mutation record,\n * then we will count el_2 again in the second mutation record which was\n * duplicated.\n * To avoid of duplicate counting added nodes, we use a Set to store\n * added nodes and its child nodes during iterate mutation records. Then\n * collect added nodes from the Set which have no duplicate copy. But\n * this also causes newly added nodes will not be serialized with id ASAP,\n * which means all the id related calculation should be lazy too.\n */ __publicField$1(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"removesSubTreeCache\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"blockClass\");\n __publicField$1(this, \"blockSelector\");\n __publicField$1(this, \"maskTextClass\");\n __publicField$1(this, \"maskTextSelector\");\n __publicField$1(this, \"inlineStylesheet\");\n __publicField$1(this, \"maskInputOptions\");\n __publicField$1(this, \"maskTextFn\");\n __publicField$1(this, \"maskInputFn\");\n __publicField$1(this, \"keepIframeSrcFn\");\n __publicField$1(this, \"recordCanvas\");\n __publicField$1(this, \"inlineImages\");\n __publicField$1(this, \"slimDOMOptions\");\n __publicField$1(this, \"dataURLOptions\");\n __publicField$1(this, \"doc\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"iframeManager\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"shadowDomManager\");\n __publicField$1(this, \"canvasManager\");\n __publicField$1(this, \"processedNodeManager\");\n __publicField$1(this, \"unattachedDoc\");\n __publicField$1(this, \"processMutations\", function(mutations) {\n mutations.forEach(_this.processMutation);\n _this.emit();\n });\n __publicField$1(this, \"emit\", function() {\n if (_this.frozen || _this.locked) {\n return;\n }\n var adds = [];\n var addedIds = /* @__PURE__ */ new Set();\n var addList = new DoubleLinkedList();\n var getNextId = function(n2) {\n var ns = n2;\n var nextId = IGNORED_NODE;\n while(nextId === IGNORED_NODE){\n ns = ns && ns.nextSibling;\n nextId = ns && _this.mirror.getId(ns);\n }\n return nextId;\n };\n var pushAdd = function(n2) {\n var parent = index$2.parentNode(n2);\n if (!parent || !inDom(n2)) {\n return;\n }\n var cssCaptured = false;\n if (n2.nodeType === Node.TEXT_NODE) {\n var parentTag = parent.tagName;\n if (parentTag === \"TEXTAREA\") {\n return;\n } else if (parentTag === \"STYLE\" && _this.addedSet.has(parent)) {\n cssCaptured = true;\n }\n }\n var parentId = isShadowRoot(parent) ? _this.mirror.getId(getShadowHost(n2)) : _this.mirror.getId(parent);\n var nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n var sn = serializeNodeWithId(n2, {\n doc: _this.doc,\n mirror: _this.mirror,\n blockClass: _this.blockClass,\n blockSelector: _this.blockSelector,\n maskTextClass: _this.maskTextClass,\n maskTextSelector: _this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: _this.inlineStylesheet,\n maskInputOptions: _this.maskInputOptions,\n maskTextFn: _this.maskTextFn,\n maskInputFn: _this.maskInputFn,\n slimDOMOptions: _this.slimDOMOptions,\n dataURLOptions: _this.dataURLOptions,\n recordCanvas: _this.recordCanvas,\n inlineImages: _this.inlineImages,\n onSerialize: function(currentN) {\n if (isSerializedIframe(currentN, _this.mirror)) {\n _this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, _this.mirror)) {\n _this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n2)) {\n _this.shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), _this.doc);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n _this.iframeManager.attachIframe(iframe, childSn);\n _this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(link, childSn) {\n _this.stylesheetManager.attachLinkElement(link, childSn);\n },\n cssCaptured: cssCaptured\n });\n if (sn) {\n adds.push({\n parentId: parentId,\n nextId: nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while(_this.mapRemoves.length){\n var removedNode = _this.mapRemoves.shift();\n _this.cleanupRemovedNode(removedNode);\n _this.mirror.removeNodeFromMap(removedNode);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(_this.movedSet), _step; !(_step = _iterator()).done;){\n var n2 = _step.value;\n if (isParentRemoved(_this.removesSubTreeCache, n2, _this.mirror) && !_this.movedSet.has(index$2.parentNode(n2))) {\n continue;\n }\n pushAdd(n2);\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(_this.addedSet), _step1; !(_step1 = _iterator1()).done;){\n var n21 = _step1.value;\n if (!isAncestorInSet(_this.droppedSet, n21) && !isParentRemoved(_this.removesSubTreeCache, n21, _this.mirror)) {\n pushAdd(n21);\n } else if (isAncestorInSet(_this.movedSet, n21)) {\n pushAdd(n21);\n } else {\n _this.droppedSet.add(n21);\n }\n }\n var candidate = null;\n while(addList.length){\n var node2 = null;\n if (candidate) {\n var parentId = _this.mirror.getId(index$2.parentNode(candidate.value));\n var nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node2 = candidate;\n }\n }\n if (!node2) {\n var tailNode = addList.tail;\n while(tailNode){\n var _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n var parentId1 = _this.mirror.getId(index$2.parentNode(_node.value));\n var nextId1 = getNextId(_node.value);\n if (nextId1 === -1) continue;\n else if (parentId1 !== -1) {\n node2 = _node;\n break;\n } else {\n var unhandledNode = _node.value;\n var parent = index$2.parentNode(unhandledNode);\n if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n var shadowHost = index$2.host(parent);\n var parentId2 = _this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node2 = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node2) {\n while(addList.head){\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node2.previous;\n addList.removeNode(node2.value);\n pushAdd(node2.value);\n }\n var payload = {\n texts: _this.texts.map(function(text) {\n var n2 = text.node;\n var parent = index$2.parentNode(n2);\n if (parent && parent.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(parent);\n }\n return {\n id: _this.mirror.getId(n2),\n value: text.value\n };\n }).filter(function(text) {\n return !addedIds.has(text.id);\n }).filter(function(text) {\n return _this.mirror.has(text.id);\n }),\n attributes: _this.attributes.map(function(attribute) {\n var attributes = attribute.attributes;\n if (typeof attributes.style === \"string\") {\n var diffAsStr = JSON.stringify(attribute.styleDiff);\n var unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: _this.mirror.getId(attribute.node),\n attributes: attributes\n };\n }).filter(function(attribute) {\n return !addedIds.has(attribute.id);\n }).filter(function(attribute) {\n return _this.mirror.has(attribute.id);\n }),\n removes: _this.removes,\n adds: adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n _this.texts = [];\n _this.attributes = [];\n _this.attributeMap = /* @__PURE__ */ new WeakMap();\n _this.removes = [];\n _this.addedSet = /* @__PURE__ */ new Set();\n _this.movedSet = /* @__PURE__ */ new Set();\n _this.droppedSet = /* @__PURE__ */ new Set();\n _this.removesSubTreeCache = /* @__PURE__ */ new Set();\n _this.movedMap = {};\n _this.mutationCb(payload);\n });\n __publicField$1(this, \"genTextAreaValueMutation\", function(textarea) {\n var item = _this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(textarea, item);\n }\n var value = Array.from(index$2.childNodes(textarea), function(cn) {\n return index$2.textContent(cn) || \"\";\n }).join(\"\");\n item.attributes.value = maskInputValue({\n element: textarea,\n maskInputOptions: _this.maskInputOptions,\n tagName: textarea.tagName,\n type: getInputType(textarea),\n value: value,\n maskInputFn: _this.maskInputFn\n });\n });\n __publicField$1(this, \"processMutation\", function(m) {\n if (isIgnored(m.target, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n switch(m.type){\n case \"characterData\":\n {\n var value = index$2.textContent(m.target);\n if (!isBlocked(m.target, _this.blockClass, _this.blockSelector, false) && value !== m.oldValue) {\n _this.texts.push({\n value: needMaskingText(m.target, _this.maskTextClass, _this.maskTextSelector, true) && value ? _this.maskTextFn ? _this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\":\n {\n var target = m.target;\n var attributeName = m.attributeName;\n var value1 = m.target.getAttribute(attributeName);\n if (attributeName === \"value\" || attributeName === \"placeholder\") {\n var type = getInputType(target);\n value1 = maskInputValue({\n element: target,\n maskInputOptions: _this.maskInputOptions,\n tagName: target.tagName,\n type: type,\n value: value1,\n maskInputFn: _this.maskInputFn\n });\n }\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || value1 === m.oldValue) {\n return;\n }\n var item = _this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !_this.keepIframeSrcFn(value1)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(_this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value1);\n if (attributeName === \"style\") {\n if (!_this.unattachedDoc) {\n try {\n _this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n _this.unattachedDoc = _this.doc;\n }\n }\n var old = _this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(target.style)), _step; !(_step = _iterator()).done;){\n var pname = _step.value;\n var newValue = target.style.getPropertyValue(pname);\n var newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [\n newValue,\n newPriority\n ];\n }\n } else {\n item._unchangedStyles[pname] = [\n newValue,\n newPriority\n ];\n }\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(old.style)), _step1; !(_step1 = _iterator1()).done;){\n var pname1 = _step1.value;\n if (target.style.getPropertyValue(pname1) === \"\") {\n item.styleDiff[pname1] = false;\n }\n }\n } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n if (target.matches(\"dialog:modal\")) {\n item.attributes[\"rr_open_mode\"] = \"modal\";\n } else {\n item.attributes[\"rr_open_mode\"] = \"non-modal\";\n }\n }\n }\n break;\n }\n case \"childList\":\n {\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, true)) return;\n if (m.target.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach(function(n2) {\n return _this.genAdds(n2, m.target);\n });\n m.removedNodes.forEach(function(n2) {\n var nodeId = _this.mirror.getId(n2);\n var parentId = isShadowRoot(m.target) ? _this.mirror.getId(index$2.host(m.target)) : _this.mirror.getId(m.target);\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || isIgnored(n2, _this.mirror, _this.slimDOMOptions) || !isSerialized(n2, _this.mirror)) {\n return;\n }\n if (_this.addedSet.has(n2)) {\n deepDelete(_this.addedSet, n2);\n _this.droppedSet.add(n2);\n } else if (_this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, _this.mirror)) ;\n else if (_this.movedSet.has(n2) && _this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(_this.movedSet, n2);\n } else {\n _this.removes.push({\n parentId: parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n processRemoves(n2, _this.removesSubTreeCache);\n }\n _this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n /**\n * Make sure you check if `n`'s parent is blocked before calling this function\n * */ __publicField$1(this, \"genAdds\", function(n2, target) {\n if (_this.processedNodeManager.inOtherBuffer(n2, _this)) return;\n if (_this.addedSet.has(n2) || _this.movedSet.has(n2)) return;\n if (_this.mirror.hasNode(n2)) {\n if (isIgnored(n2, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n _this.movedSet.add(n2);\n var targetId = null;\n if (target && _this.mirror.hasNode(target)) {\n targetId = _this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n _this.movedMap[moveKey(_this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n _this.addedSet.add(n2);\n _this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, _this.blockClass, _this.blockSelector, false)) {\n index$2.childNodes(n2).forEach(function(childN) {\n return _this.genAdds(childN);\n });\n if (hasShadowRoot(n2)) {\n index$2.childNodes(index$2.shadowRoot(n2)).forEach(function(childN) {\n _this.processedNodeManager.add(childN, _this);\n _this.genAdds(childN, n2);\n });\n }\n }\n });\n __publicField$1(this, \"cleanupRemovedNode\", function(node2) {\n if (node2.nodeName === \"IFRAME\") {\n try {\n _this.iframeManager.removeIframe(node2);\n } catch (e2) {}\n } else {\n try {\n _this.stylesheetManager.cleanupStylesheetsForRemovedNode(node2);\n } catch (e2) {}\n }\n node2.childNodes.forEach(function(child) {\n _this.cleanupRemovedNode(child);\n });\n });\n }\n var _proto = MutationBuffer.prototype;\n _proto.init = function init(options) {\n var _this = this;\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach(function(key) {\n _this[key] = options[key];\n });\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n };\n _proto.isFrozen = function isFrozen() {\n return this.frozen;\n };\n _proto.lock = function lock() {\n this.locked = true;\n this.canvasManager.lock();\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n };\n _proto.reset = function reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n };\n _proto.getDoc = function getDoc() {\n return this.doc;\n };\n return MutationBuffer;\n}();\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n index$2.childNodes(n2).forEach(function(childN) {\n return deepDelete(addsSet, childN);\n });\n}\nfunction processRemoves(n2, cache) {\n var queue = [\n n2\n ];\n while(queue.length){\n var next = queue.pop();\n if (cache.has(next)) continue;\n cache.add(next);\n index$2.childNodes(next).forEach(function(n22) {\n return queue.push(n22);\n });\n }\n return;\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.size === 0) return false;\n return _isParentRemoved(removes, n2);\n}\nfunction _isParentRemoved(removes, n2, _mirror2) {\n var node2 = index$2.parentNode(n2);\n if (!node2) return false;\n return removes.has(node2);\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0) return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n var parent = index$2.parentNode(n2);\n if (!parent) {\n return false;\n }\n if (set.has(parent)) {\n return true;\n }\n return _isAncestorInSet(set, parent);\n}\nvar errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nvar callbackWrapper = function(cb) {\n if (!errorHandler) {\n return cb;\n }\n var rrwebWrapped = function() {\n for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){\n rest[_key] = arguments[_key];\n }\n try {\n return cb.apply(void 0, [].concat(rest));\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nvar mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n var path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch (e) {}\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n var mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n var observer = new (mutationObserverCtor$2())(callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer)));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction removeMutationBufferForDoc(doc) {\n for(var i2 = mutationBuffers.length - 1; i2 >= 0; i2--){\n var buffer = mutationBuffers[i2];\n if (buffer.getDoc() === doc) {\n mutationBuffers.splice(i2, 1);\n }\n }\n}\nfunction initMoveObserver(param) {\n var mousemoveCb = param.mousemoveCb, sampling = param.sampling, doc = param.doc, mirror2 = param.mirror;\n if (sampling.mousemove === false) {\n return function() {};\n }\n var threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n var callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n var positions = [];\n var timeBaseline;\n var wrappedCb = throttle(callbackWrapper(function(source) {\n var totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map(function(p) {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n var _ref = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt, clientX = _ref.clientX, clientY = _ref.clientY;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(typeof DragEvent !== \"undefined\" && _instanceof(evt, DragEvent) ? IncrementalSource.Drag : _instanceof(evt, MouseEvent) ? IncrementalSource.MouseMove : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false\n }));\n var handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initMouseInteractionObserver(param) {\n var mouseInteractionCb = param.mouseInteractionCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n if (sampling.mouseInteraction === false) {\n return function() {};\n }\n var disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n var handlers = [];\n var currentPointerType = null;\n var getHandler = function(eventKey) {\n return function(event) {\n var target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var pointerType = null;\n var thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch(event.pointerType){\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen) ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n var e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n var id = mirror2.getId(target);\n var clientX = e2.clientX, clientY = e2.clientY;\n callbackWrapper(mouseInteractionCb)(_extends({\n type: MouseInteractions[thisEventKey],\n id: id,\n x: clientX,\n y: clientY\n }, pointerType !== null && {\n pointerType: pointerType\n }));\n };\n };\n Object.keys(MouseInteractions).filter(function(key) {\n return Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false;\n }).forEach(function(eventKey) {\n var eventName = toLowerCase(eventKey);\n var handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch(MouseInteractions[eventKey]){\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\"mouse\", \"pointer\");\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initScrollObserver(param) {\n var scrollCb = param.scrollCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n var scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id: id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id: id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }), sampling.scroll || 100));\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver(param, param1) {\n var viewportResizeCb = param.viewportResizeCb;\n var win = param1.win;\n var lastH = -1;\n var lastW = -1;\n var updateDimension = callbackWrapper(throttle(callbackWrapper(function() {\n var height = getWindowHeight();\n var width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on(\"resize\", updateDimension, win);\n}\nvar INPUT_TAGS = [\n \"INPUT\",\n \"TEXTAREA\",\n \"SELECT\"\n];\nvar lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver(param) {\n var inputCb = param.inputCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, ignoreClass = param.ignoreClass, ignoreSelector = param.ignoreSelector, maskInputOptions = param.maskInputOptions, maskInputFn = param.maskInputFn, sampling = param.sampling, userTriggeredOnInput = param.userTriggeredOnInput;\n function eventHandler(event) {\n var target = getEventTarget(event);\n var userTriggered = event.isTrusted;\n var tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = index$2.parentElement(target);\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n var text = target.value;\n var isChecked = false;\n var type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions: maskInputOptions,\n tagName: tagName,\n type: type,\n value: text,\n maskInputFn: maskInputFn\n });\n }\n cbWithDedup(target, userTriggeredOnInput ? {\n text: text,\n isChecked: isChecked,\n userTriggered: userTriggered\n } : {\n text: text,\n isChecked: isChecked\n });\n var name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]').forEach(function(el) {\n if (el !== target) {\n var text2 = el.value;\n cbWithDedup(el, userTriggeredOnInput ? {\n text: text2,\n isChecked: !isChecked,\n userTriggered: false\n } : {\n text: text2,\n isChecked: !isChecked\n });\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n var lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n var id = mirror2.getId(target);\n callbackWrapper(inputCb)(_extends({}, v2, {\n id: id\n }));\n }\n }\n var events = sampling.input === \"last\" ? [\n \"change\"\n ] : [\n \"input\",\n \"change\"\n ];\n var handlers = events.map(function(eventName) {\n return on(eventName, callbackWrapper(eventHandler), doc);\n });\n var currentWindow = doc.defaultView;\n if (!currentWindow) {\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n }\n var propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, \"value\");\n var hookProperties = [\n [\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLInputElement.prototype,\n \"checked\"\n ],\n [\n currentWindow.HTMLSelectElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLTextAreaElement.prototype,\n \"value\"\n ],\n // Some UI library use selectedIndex to set select value\n [\n currentWindow.HTMLSelectElement.prototype,\n \"selectedIndex\"\n ],\n [\n currentWindow.HTMLOptionElement.prototype,\n \"selected\"\n ]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n var _handlers;\n (_handlers = handlers).push.apply(_handlers, [].concat(hookProperties.map(function(p) {\n return hookSetter(p[0], p[1], {\n set: function set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n });\n }\n }, false, currentWindow);\n })));\n }\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction getNestedCSSRulePositions(rule2) {\n var positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && _instanceof(childRule.parentRule, CSSGroupingRule) || hasNestedCSSRule(\"CSSMediaRule\") && _instanceof(childRule.parentRule, CSSMediaRule) || hasNestedCSSRule(\"CSSSupportsRule\") && _instanceof(childRule.parentRule, CSSSupportsRule) || hasNestedCSSRule(\"CSSConditionRule\") && _instanceof(childRule.parentRule, CSSConditionRule)) {\n var rules2 = Array.from(childRule.parentRule.cssRules);\n var index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n } else if (childRule.parentStyleSheet) {\n var rules21 = Array.from(childRule.parentStyleSheet.cssRules);\n var index21 = rules21.indexOf(childRule);\n pos.unshift(index21);\n }\n return pos;\n }\n return recurse(rule2, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n var id, styleId;\n if (!sheet) return {};\n if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n else styleId = styleMirror.getId(sheet);\n return {\n styleId: styleId,\n id: id\n };\n}\nfunction initStyleSheetObserver(param, param1) {\n var styleSheetRuleCb = param.styleSheetRuleCb, mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return function() {};\n }\n var insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2) {\n if (index2 === void 0) index2 = this.cssRules.length;\n var rule2 = selector + \" { \" + styleBlock + \" }\";\n return win.CSSStyleSheet.prototype.insertRule.apply(this, [\n rule2,\n index2\n ]);\n };\n var deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.removeRule = function(index2) {\n return win.CSSStyleSheet.prototype.deleteRule.apply(this, [\n index2\n ]);\n };\n var replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n var unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2 || 0\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n });\n return callbackWrapper(function() {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver(param, host2) {\n var mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var _a2, _b, _c;\n var hostId = null;\n if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n else hostId = mirror2.getId(index$2.host(host2));\n var patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n var originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(patchTarget == null ? void 0 : patchTarget.prototype, \"adoptedStyleSheets\") : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor) return function() {};\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: function get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set: function set(sheets) {\n var _a3;\n var result2 = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {}\n }\n return result2;\n }\n });\n return callbackWrapper(function() {\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver(param, param1) {\n var styleDeclarationCb = param.styleDeclarationCb, mirror2 = param.mirror, ignoreCSSAttributes = param.ignoreCSSAttributes, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n var setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0], value = argumentsList[1], priority = argumentsList[2];\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [\n property,\n value,\n priority\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n set: {\n property: property,\n value: value,\n priority: priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n var removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0];\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [\n property\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n remove: {\n property: property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n return callbackWrapper(function() {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver(param) {\n var mediaInteractionCb = param.mediaInteractionCb, blockClass = param.blockClass, blockSelector = param.blockSelector, mirror2 = param.mirror, sampling = param.sampling, doc = param.doc;\n var handler = callbackWrapper(function(type) {\n return throttle(callbackWrapper(function(event) {\n var target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var currentTime = target.currentTime, volume = target.volume, muted = target.muted, playbackRate = target.playbackRate, loop = target.loop;\n mediaInteractionCb({\n type: type,\n id: mirror2.getId(target),\n currentTime: currentTime,\n volume: volume,\n muted: muted,\n playbackRate: playbackRate,\n loop: loop\n });\n }), sampling.media || 500);\n });\n var handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initFontObserver(param) {\n var fontCb = param.fontCb, doc = param.doc;\n var win = doc.defaultView;\n if (!win) {\n return function() {};\n }\n var handlers = [];\n var fontMap = /* @__PURE__ */ new WeakMap();\n var originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n var fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family: family,\n buffer: typeof source !== \"string\",\n descriptors: descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n var restoreHandler = patch$2(doc.fonts, \"add\", function(original) {\n return function(fontFace) {\n setTimeout(callbackWrapper(function() {\n var p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [\n fontFace\n ]);\n };\n });\n handlers.push(function() {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initSelectionObserver(param) {\n var doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, selectionCb = param.selectionCb;\n var collapsed = true;\n var updateSelection = callbackWrapper(function() {\n var selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n collapsed = selection.isCollapsed || false;\n var ranges = [];\n var count = selection.rangeCount || 0;\n for(var i2 = 0; i2 < count; i2++){\n var range = selection.getRangeAt(i2);\n var startContainer = range.startContainer, startOffset = range.startOffset, endContainer = range.endContainer, endOffset = range.endOffset;\n var blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked) continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset: startOffset,\n end: mirror2.getId(endContainer),\n endOffset: endOffset\n });\n }\n selectionCb({\n ranges: ranges\n });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver(param) {\n var doc = param.doc, customElementCb = param.customElementCb;\n var win = doc.defaultView;\n if (!win || !win.customElements) return function() {};\n var restoreHandler = patch$2(win.customElements, \"define\", function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name: name\n }\n });\n } catch (e2) {\n console.warn(\"Custom element callback failed for \" + name);\n }\n return original.apply(this, [\n name,\n constructor,\n options\n ]);\n };\n });\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n var mutationCb = o2.mutationCb, mousemoveCb = o2.mousemoveCb, mouseInteractionCb = o2.mouseInteractionCb, scrollCb = o2.scrollCb, viewportResizeCb = o2.viewportResizeCb, inputCb = o2.inputCb, mediaInteractionCb = o2.mediaInteractionCb, styleSheetRuleCb = o2.styleSheetRuleCb, styleDeclarationCb = o2.styleDeclarationCb, canvasMutationCb = o2.canvasMutationCb, fontCb = o2.fontCb, selectionCb = o2.selectionCb, customElementCb = o2.customElementCb;\n o2.mutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mutation) {\n var _hooks;\n (_hooks = hooks).mutation.apply(_hooks, [].concat(p));\n }\n mutationCb.apply(void 0, [].concat(p));\n };\n o2.mousemoveCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mousemove) {\n var _hooks;\n (_hooks = hooks).mousemove.apply(_hooks, [].concat(p));\n }\n mousemoveCb.apply(void 0, [].concat(p));\n };\n o2.mouseInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mouseInteraction) {\n var _hooks;\n (_hooks = hooks).mouseInteraction.apply(_hooks, [].concat(p));\n }\n mouseInteractionCb.apply(void 0, [].concat(p));\n };\n o2.scrollCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.scroll) {\n var _hooks;\n (_hooks = hooks).scroll.apply(_hooks, [].concat(p));\n }\n scrollCb.apply(void 0, [].concat(p));\n };\n o2.viewportResizeCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.viewportResize) {\n var _hooks;\n (_hooks = hooks).viewportResize.apply(_hooks, [].concat(p));\n }\n viewportResizeCb.apply(void 0, [].concat(p));\n };\n o2.inputCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.input) {\n var _hooks;\n (_hooks = hooks).input.apply(_hooks, [].concat(p));\n }\n inputCb.apply(void 0, [].concat(p));\n };\n o2.mediaInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mediaInteaction) {\n var _hooks;\n (_hooks = hooks).mediaInteaction.apply(_hooks, [].concat(p));\n }\n mediaInteractionCb.apply(void 0, [].concat(p));\n };\n o2.styleSheetRuleCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleSheetRule) {\n var _hooks;\n (_hooks = hooks).styleSheetRule.apply(_hooks, [].concat(p));\n }\n styleSheetRuleCb.apply(void 0, [].concat(p));\n };\n o2.styleDeclarationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleDeclaration) {\n var _hooks;\n (_hooks = hooks).styleDeclaration.apply(_hooks, [].concat(p));\n }\n styleDeclarationCb.apply(void 0, [].concat(p));\n };\n o2.canvasMutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.canvasMutation) {\n var _hooks;\n (_hooks = hooks).canvasMutation.apply(_hooks, [].concat(p));\n }\n canvasMutationCb.apply(void 0, [].concat(p));\n };\n o2.fontCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.font) {\n var _hooks;\n (_hooks = hooks).font.apply(_hooks, [].concat(p));\n }\n fontCb.apply(void 0, [].concat(p));\n };\n o2.selectionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.selection) {\n var _hooks;\n (_hooks = hooks).selection.apply(_hooks, [].concat(p));\n }\n selectionCb.apply(void 0, [].concat(p));\n };\n o2.customElementCb = function() {\n for(var _len = arguments.length, c2 = new Array(_len), _key = 0; _key < _len; _key++){\n c2[_key] = arguments[_key];\n }\n if (hooks.customElement) {\n var _hooks;\n (_hooks = hooks).customElement.apply(_hooks, [].concat(c2));\n }\n customElementCb.apply(void 0, [].concat(c2));\n };\n}\nfunction initObservers(o2, hooks) {\n if (hooks === void 0) hooks = {};\n var currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return function() {};\n }\n mergeHooks(o2, hooks);\n var mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n var mousemoveHandler = initMoveObserver(o2);\n var mouseInteractionHandler = initMouseInteractionObserver(o2);\n var scrollHandler = initScrollObserver(o2);\n var viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n var inputHandler = initInputObserver(o2);\n var mediaInteractionHandler = initMediaInteractionObserver(o2);\n var styleSheetObserver = function() {};\n var adoptedStyleSheetObserver = function() {};\n var styleDeclarationObserver = function() {};\n var fontObserver = function() {};\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, {\n win: currentWindow\n });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n var selectionObserver = initSelectionObserver(o2);\n var customElementObserver = initCustomElementObserver(o2);\n var pluginHandlers = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(o2.plugins), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n pluginHandlers.push(plugin3.observer(plugin3.callback, currentWindow, plugin3.options));\n }\n return callbackWrapper(function() {\n mutationBuffers.forEach(function(b) {\n return b.reset();\n });\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype);\n}\nvar CrossOriginIframeMirror = /*#__PURE__*/ function() {\n function CrossOriginIframeMirror(generateIdFn) {\n __publicField$1(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n var _proto = CrossOriginIframeMirror.prototype;\n _proto.getId = function getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n var idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n var id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n };\n _proto.getIds = function getIds(iframe, remoteId) {\n var _this = this;\n var idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(function(id) {\n return _this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap);\n });\n };\n _proto.getRemoteId = function getRemoteId(iframe, id, map) {\n var remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\") return id;\n var remoteId = remoteIdToIdMap.get(id);\n if (!remoteId) return -1;\n return remoteId;\n };\n _proto.getRemoteIds = function getRemoteIds(iframe, ids) {\n var _this = this;\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map(function(id) {\n return _this.getRemoteId(iframe, id, remoteIdToIdMap);\n });\n };\n _proto.reset = function reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n };\n _proto.getIdToRemoteIdMap = function getIdToRemoteIdMap(iframe) {\n var idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n };\n _proto.getRemoteIdToIdMap = function getRemoteIdToIdMap(iframe) {\n var remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n };\n return CrossOriginIframeMirror;\n}();\nvar IframeManager = /*#__PURE__*/ function() {\n function IframeManager(options) {\n __publicField$1(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField$1(this, \"crossOriginIframeStyleMirror\");\n __publicField$1(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeContentDocumentMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeObserverCleanupMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"wrappedEmit\");\n __publicField$1(this, \"loadListener\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n var _proto = IframeManager.prototype;\n _proto.addIframe = function addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow) this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n };\n _proto.getIframeContentDocument = function getIframeContentDocument(iframeEl) {\n return this.iframeContentDocumentMap.get(iframeEl);\n };\n _proto.setObserverCleanup = function setObserverCleanup(iframeEl, cleanup) {\n this.iframeObserverCleanupMap.set(iframeEl, cleanup);\n };\n _proto.getObserverCleanup = function getObserverCleanup(iframeEl) {\n return this.iframeObserverCleanupMap.get(iframeEl);\n };\n _proto.removeIframe = function removeIframe(iframeEl) {\n var storedDoc = this.iframeContentDocumentMap.get(iframeEl);\n if (storedDoc) {\n this.stylesheetManager.cleanupStylesheetsForRemovedNode(storedDoc);\n this.mirror.removeNodeFromMap(storedDoc, true);\n }\n this.iframes.delete(iframeEl);\n this.iframeContentDocumentMap.delete(iframeEl);\n var observerCleanup = this.iframeObserverCleanupMap.get(iframeEl);\n if (observerCleanup) {\n try {\n observerCleanup();\n } catch (e2) {}\n this.iframeObserverCleanupMap.delete(iframeEl);\n }\n };\n _proto.addLoadListener = function addLoadListener(cb) {\n this.loadListener = cb;\n };\n _proto.attachIframe = function attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (iframeEl.contentDocument) {\n this.iframeContentDocumentMap.set(iframeEl, iframeEl.contentDocument);\n }\n if (this.recordCrossOriginIframes) (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\"message\", this.handleMessage.bind(this));\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0) this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n };\n _proto.handleMessage = function handleMessage(message) {\n var crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin) return;\n var iframeSourceWindow = message.source;\n if (!iframeSourceWindow) return;\n var iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl) return;\n var transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent) this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n };\n _proto.transformCrossOriginEvent = function transformCrossOriginEvent(iframeEl, e2) {\n var _this = this;\n var _a2;\n switch(e2.type){\n case EventType.FullSnapshot:\n {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n var rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded:\n {\n return false;\n }\n case EventType.Plugin:\n {\n return e2;\n }\n case EventType.Custom:\n {\n this.replaceIds(e2.data.payload, iframeEl, [\n \"id\",\n \"parentId\",\n \"previousId\",\n \"nextId\"\n ]);\n return e2;\n }\n case EventType.IncrementalSnapshot:\n {\n switch(e2.data.source){\n case IncrementalSource.Mutation:\n {\n e2.data.adds.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n _this.replaceIdOnNode(n2.node, iframeEl);\n var rootId = _this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && _this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"id\"\n ]);\n });\n e2.data.attributes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n e2.data.texts.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove:\n {\n e2.data.positions.forEach(function(p) {\n _this.replaceIds(p, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize:\n {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleId\"\n ]);\n return e2;\n }\n case IncrementalSource.Font:\n {\n return e2;\n }\n case IncrementalSource.Selection:\n {\n e2.data.ranges.forEach(function(range) {\n _this.replaceIds(range, iframeEl, [\n \"start\",\n \"end\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleIds\"\n ]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach(function(style) {\n _this.replaceStyleIds(style, iframeEl, [\n \"styleId\"\n ]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n };\n _proto.replace = function replace(iframeMirror, obj, iframeEl, keys) {\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n };\n _proto.replaceIds = function replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n };\n _proto.replaceStyleIds = function replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n };\n _proto.replaceIdOnNode = function replaceIdOnNode(node2, iframeEl) {\n var _this = this;\n this.replaceIds(node2, iframeEl, [\n \"id\",\n \"rootId\"\n ]);\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.replaceIdOnNode(child, iframeEl);\n });\n }\n };\n _proto.patchRootIdOnNode = function patchRootIdOnNode(node2, rootId) {\n var _this = this;\n if (node2.type !== NodeType.Document && !node2.rootId) node2.rootId = rootId;\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.patchRootIdOnNode(child, rootId);\n });\n }\n };\n return IframeManager;\n}();\nvar ShadowDomManager = /*#__PURE__*/ function() {\n function ShadowDomManager(options) {\n __publicField$1(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"scrollCb\");\n __publicField$1(this, \"bypassOptions\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n var _proto = ShadowDomManager.prototype;\n _proto.init = function init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n };\n _proto.addShadowRoot = function addShadowRoot(shadowRoot2, doc) {\n var _this = this;\n if (!isNativeShadowDom(shadowRoot2)) return;\n if (this.shadowDoms.has(shadowRoot2)) return;\n this.shadowDoms.add(shadowRoot2);\n var observer = initMutationObserver(_extends({}, this.bypassOptions, {\n doc: doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n }), shadowRoot2);\n this.restoreHandlers.push(function() {\n return observer.disconnect();\n });\n this.restoreHandlers.push(initScrollObserver(_extends({}, this.bypassOptions, {\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot2,\n mirror: this.mirror\n })));\n setTimeout(function() {\n if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0) _this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot2.adoptedStyleSheets, _this.mirror.getId(index$2.host(shadowRoot2)));\n _this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: _this.mirror,\n stylesheetManager: _this.bypassOptions.stylesheetManager\n }, shadowRoot2));\n }, 0);\n };\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */ _proto.observeAttachShadow = function observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n };\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */ _proto.patchAttachShadow = function patchAttachShadow(element, doc) {\n var manager = this;\n this.restoreHandlers.push(patch$2(element.prototype, \"attachShadow\", function(original) {\n return function(option) {\n var sRoot = original.call(this, option);\n var shadowRootEl = index$2.shadowRoot(this);\n if (shadowRootEl && inDom(this)) manager.addShadowRoot(shadowRootEl, doc);\n return sRoot;\n };\n }));\n };\n _proto.reset = function reset() {\n this.restoreHandlers.forEach(function(handler) {\n try {\n handler();\n } catch (e2) {}\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n };\n return ShadowDomManager;\n}();\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor(var i$1 = 0; i$1 < chars.length; i$1++){\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function encode(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for(i2 = 0; i2 < len; i2 += 3){\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nvar canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n var contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nvar saveWebGLVar = function(value, win, ctx) {\n if (!value || !(isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\")) return;\n var name = value.constructor.name;\n var list2 = variableListFor$1(ctx, name);\n var index2 = list2.indexOf(value);\n if (index2 === -1) {\n index2 = list2.length;\n list2.push(value);\n }\n return index2;\n};\nfunction serializeArg(value, win, ctx) {\n if (_instanceof(value, Array)) {\n return value.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n } else if (value === null) {\n return value;\n } else if (_instanceof(value, Float32Array) || _instanceof(value, Float64Array) || _instanceof(value, Int32Array) || _instanceof(value, Uint32Array) || _instanceof(value, Uint8Array) || _instanceof(value, Uint16Array) || _instanceof(value, Int16Array) || _instanceof(value, Int8Array) || _instanceof(value, Uint8ClampedArray)) {\n var name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n Object.values(value)\n ]\n };\n } else if (// SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n _instanceof(value, ArrayBuffer)) {\n var name1 = value.constructor.name;\n var base64 = encode(value);\n return {\n rr_type: name1,\n base64: base64\n };\n } else if (_instanceof(value, DataView)) {\n var name2 = value.constructor.name;\n return {\n rr_type: name2,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (_instanceof(value, HTMLImageElement)) {\n var name3 = value.constructor.name;\n var src = value.src;\n return {\n rr_type: name3,\n src: src\n };\n } else if (_instanceof(value, HTMLCanvasElement)) {\n var name4 = \"HTMLImageElement\";\n var src1 = value.toDataURL();\n return {\n rr_type: name4,\n src: src1\n };\n } else if (_instanceof(value, ImageData)) {\n var name5 = value.constructor.name;\n return {\n rr_type: name5,\n args: [\n serializeArg(value.data, win, ctx),\n value.width,\n value.height\n ]\n };\n } else if (isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\") {\n var name6 = value.constructor.name;\n var index2 = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name6,\n index: index2\n };\n }\n return value;\n}\nvar serializeArgs = function(args, win, ctx) {\n return args.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n};\nvar isInstanceOfWebGLObject = function(value, win) {\n var webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n var supportedWebGLConstructorNames = webGLConstructorNames.filter(function(name) {\n return typeof win[name] === \"function\";\n });\n return Boolean(supportedWebGLConstructorNames.find(function(name) {\n return _instanceof(value, win[name]);\n }));\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n var _loop = function() {\n var prop = _step.value;\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(win.CanvasRenderingContext2D.prototype, prop, function(original) {\n return function() {\n var _this = this;\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n setTimeout(function() {\n var recordArgs = serializeArgs(args, win, _this);\n cb(_this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props2D), _step; !(_step = _iterator()).done;)_loop();\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n var handlers = [];\n try {\n var restoreHandler = patch$2(win.HTMLCanvasElement.prototype, \"getContext\", function(original) {\n return function(contextType) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n var ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this)) this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\n \"webgl\",\n \"webgl2\"\n ].includes(ctxName)) {\n if (args[0] && _type_of(args[0]) === \"object\") {\n var contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [].concat([\n contextType\n ], args));\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n var _loop = function() {\n var prop = _step.value;\n if (//prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)) {\n return \"continue\";\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(prototype, prop, function(original) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var result2 = original.apply(this, args);\n saveWebGLVar(result2, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n var recordArgs = serializeArgs(args, win, this);\n var mutation = {\n type: type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result2;\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: type,\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props = Object.getOwnPropertyNames(prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props), _step; !(_step = _iterator()).done;)_loop();\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n var _handlers;\n var handlers = [];\n (_handlers = handlers).push.apply(_handlers, [].concat(patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, win)));\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n var _handlers1;\n (_handlers1 = handlers).push.apply(_handlers1, [].concat(patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, win)));\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nvar encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nvar decodeBase64 = function(base64) {\n return Uint8Array.from(atob(base64), function(c2) {\n return c2.charCodeAt(0);\n });\n};\nvar blob = typeof window !== \"undefined\" && window.Blob && new Blob([\n decodeBase64(encodedJs)\n], {\n type: \"text/javascript;charset=utf-8\"\n});\nfunction WorkerWrapper(options) {\n var objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL) throw \"\";\n var worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", function() {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\"data:text/javascript;base64,\" + encodedJs, {\n name: options == null ? void 0 : options.name\n });\n } finally{\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nvar CanvasManager = /*#__PURE__*/ function() {\n function CanvasManager(options) {\n var _this = this;\n __publicField$1(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"rafStamps\", {\n latestId: 0,\n invokeId: null\n });\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"resetObservers\");\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"processMutation\", function(target, mutation) {\n var newFrame = _this.rafStamps.invokeId && _this.rafStamps.latestId !== _this.rafStamps.invokeId;\n if (newFrame || !_this.rafStamps.invokeId) _this.rafStamps.invokeId = _this.rafStamps.latestId;\n if (!_this.pendingCanvasMutations.has(target)) {\n _this.pendingCanvasMutations.set(target, []);\n }\n _this.pendingCanvasMutations.get(target).push(mutation);\n });\n var _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? \"all\" : _options_sampling, win = options.win, blockClass = options.blockClass, blockSelector = options.blockSelector, recordCanvas = options.recordCanvas, dataURLOptions = options.dataURLOptions;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\") this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\") this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions: dataURLOptions\n });\n }\n var _proto = CanvasManager.prototype;\n _proto.reset = function reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n };\n _proto.lock = function lock() {\n this.locked = true;\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n };\n _proto.initCanvasFPSObserver = function initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n var _this = this;\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, true);\n var snapshotInProgressMap = /* @__PURE__ */ new Map();\n var worker = new WorkerWrapper();\n worker.onmessage = function(e2) {\n var id = e2.data.id;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data)) return;\n var _e2_data = e2.data, base64 = _e2_data.base64, type = _e2_data.type, width = _e2_data.width, height = _e2_data.height;\n _this.mutationCb({\n id: id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [\n 0,\n 0,\n width,\n height\n ]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [\n {\n rr_type: \"ArrayBuffer\",\n base64: base64\n }\n ],\n type: type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n var timeBetweenSnapshots = 1e3 / fps;\n var lastSnapshotTime = 0;\n var rafId;\n var getCanvas = function() {\n var matchedCanvas = [];\n win.document.querySelectorAll(\"canvas\").forEach(function(canvas) {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n return matchedCanvas;\n };\n var takeCanvasSnapshots = function(timestamp) {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n var _this1 = _this;\n getCanvas().forEach(/*#__PURE__*/ _async_to_generator(function(canvas) {\n var _a2, id, context, bitmap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n id = _this1.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id)) return [\n 2\n ];\n if (canvas.width === 0 || canvas.height === 0) return [\n 2\n ];\n snapshotInProgressMap.set(id, true);\n if ([\n \"webgl\",\n \"webgl2\"\n ].includes(canvas.__context)) {\n context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n return [\n 4,\n createImageBitmap(canvas)\n ];\n case 1:\n bitmap = _state.sent();\n worker.postMessage({\n id: id,\n bitmap: bitmap,\n width: canvas.width,\n height: canvas.height,\n dataURLOptions: options.dataURLOptions\n }, [\n bitmap\n ]);\n return [\n 2\n ];\n }\n });\n }));\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = function() {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n };\n _proto.initCanvasMutationObserver = function initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, false);\n var canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n var canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n this.resetObservers = function() {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n };\n _proto.startPendingCanvasMutationFlusher = function startPendingCanvasMutationFlusher() {\n var _this = this;\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.startRAFTimestamping = function startRAFTimestamping() {\n var _this = this;\n var setLatestRAFTimestamp = function(timestamp) {\n _this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n _proto.flushPendingCanvasMutations = function flushPendingCanvasMutations() {\n var _this = this;\n this.pendingCanvasMutations.forEach(function(_values, canvas) {\n var id = _this.mirror.getId(canvas);\n _this.flushPendingCanvasMutationFor(canvas, id);\n });\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.flushPendingCanvasMutationFor = function flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n var valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1) return;\n var values = valuesWithType.map(function(value) {\n value.type; var rest = _object_without_properties_loose(value, [\n \"type\"\n ]);\n return rest;\n });\n var type = valuesWithType[0].type;\n this.mutationCb({\n id: id,\n type: type,\n commands: values\n });\n this.pendingCanvasMutations.delete(canvas);\n };\n return CanvasManager;\n}();\nvar StylesheetManager = /*#__PURE__*/ function() {\n function StylesheetManager(options) {\n __publicField$1(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"adoptedStyleSheetCb\");\n __publicField$1(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n var _proto = StylesheetManager.prototype;\n _proto.attachLinkElement = function attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes) this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n };\n _proto.trackLinkElement = function trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl)) return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n };\n _proto.adoptStyleSheets = function adoptStyleSheets(sheets, hostId) {\n var _this, _loop = function() {\n var sheet = _step.value;\n var styleId = void 0;\n if (!_this.styleMirror.has(sheet)) {\n styleId = _this.styleMirror.add(sheet);\n styles.push({\n styleId: styleId,\n rules: Array.from(sheet.rules || CSSRule, function(r2, index2) {\n return {\n rule: stringifyRule(r2, sheet.href),\n index: index2\n };\n })\n });\n } else styleId = _this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n };\n if (sheets.length === 0) return;\n var adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n var styles = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(sheets), _step; !(_step = _iterator()).done;)_this = this, _loop();\n if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n };\n _proto.reset = function reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n };\n /**\n * Cleans up stylesheets associated with a removed node.\n *\n * @param removedNode - The node that was removed from the DOM.\n */ _proto.cleanupStylesheetsForRemovedNode = function cleanupStylesheetsForRemovedNode(removedNode) {\n var _this = this;\n try {\n if (removedNode.nodeType === Node.DOCUMENT_NODE) {\n var doc = removedNode;\n if (doc.adoptedStyleSheets) {\n for(var _iterator = _create_for_of_iterator_helper_loose(doc.adoptedStyleSheets), _step; !(_step = _iterator()).done;){\n var sheet = _step.value;\n this.styleMirror.remove(sheet);\n }\n }\n }\n if (removedNode.nodeName === \"STYLE\") {\n var styleEl = removedNode;\n if (styleEl.sheet) {\n this.styleMirror.remove(styleEl.sheet);\n }\n }\n if (removedNode.nodeName === \"LINK\" && removedNode.rel === \"stylesheet\") {\n var linkEl = removedNode;\n if (linkEl.sheet) {\n this.styleMirror.remove(linkEl.sheet);\n }\n }\n if (removedNode.childNodes) {\n removedNode.childNodes.forEach(function(child) {\n _this.cleanupStylesheetsForRemovedNode(child);\n });\n }\n } catch (e2) {}\n };\n // TODO: take snapshot on stylesheet reload by applying event listener\n _proto.trackStylesheetInLinkElement = function trackStylesheetInLinkElement(_linkEl) {};\n return StylesheetManager;\n}();\nvar ProcessedNodeManager = /*#__PURE__*/ function() {\n function ProcessedNodeManager() {\n __publicField$1(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"active\", false);\n }\n var _proto = ProcessedNodeManager.prototype;\n _proto.inOtherBuffer = function inOtherBuffer(node2, thisBuffer) {\n var buffers = this.nodeMap.get(node2);\n return buffers && Array.from(buffers).some(function(buffer) {\n return buffer !== thisBuffer;\n });\n };\n _proto.add = function add(node2, buffer) {\n var _this = this;\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(function() {\n _this.nodeMap = /* @__PURE__ */ new WeakMap();\n _this.active = false;\n });\n }\n this.nodeMap.set(node2, (this.nodeMap.get(node2) || /* @__PURE__ */ new Set()).add(buffer));\n };\n _proto.destroy = function destroy() {};\n return ProcessedNodeManager;\n}();\nfunction toOrigin(url) {\n try {\n var origin = new URL(url).origin;\n return origin !== \"null\" ? origin : null;\n } catch (e) {\n return null;\n }\n}\nfunction buildAllowedOriginSet(origins) {\n if (!Array.isArray(origins) || origins.length === 0) {\n throw new Error(\"[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.\");\n }\n var set = /* @__PURE__ */ new Set();\n for(var i2 = 0; i2 < origins.length; i2++){\n var entry = origins[i2];\n if (typeof entry !== \"string\") {\n throw new Error(\"[rrweb] allowedIframeOrigins[\" + i2 + \"] must be a string, got \" + (typeof entry === \"undefined\" ? \"undefined\" : _type_of(entry)) + \".\");\n }\n var origin = toOrigin(entry);\n if (origin) {\n set.add(origin);\n }\n }\n return Object.freeze(set);\n}\nvar wrappedEmit;\nvar takeFullSnapshot$1;\nvar canvasManager;\nvar recording = false;\ntry {\n if (Array.from([\n 1\n ], function(x2) {\n return x2 * 2;\n })[0] !== 2) {\n var cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nvar mirror = createMirror$2();\nfunction record(options) {\n if (options === void 0) options = {};\n var emit = options.emit, checkoutEveryNms = options.checkoutEveryNms, checkoutEveryNth = options.checkoutEveryNth, _options_blockClass = options.blockClass, blockClass = _options_blockClass === void 0 ? \"rr-block\" : _options_blockClass, _options_blockSelector = options.blockSelector, blockSelector = _options_blockSelector === void 0 ? null : _options_blockSelector, _options_ignoreClass = options.ignoreClass, ignoreClass = _options_ignoreClass === void 0 ? \"rr-ignore\" : _options_ignoreClass, _options_ignoreSelector = options.ignoreSelector, ignoreSelector = _options_ignoreSelector === void 0 ? null : _options_ignoreSelector, _options_maskTextClass = options.maskTextClass, maskTextClass = _options_maskTextClass === void 0 ? \"rr-mask\" : _options_maskTextClass, _options_maskTextSelector = options.maskTextSelector, maskTextSelector = _options_maskTextSelector === void 0 ? null : _options_maskTextSelector, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, maskAllInputs = options.maskAllInputs, _maskInputOptions = options.maskInputOptions, _slimDOMOptions = options.slimDOMOptions, maskInputFn = options.maskInputFn, maskTextFn = options.maskTextFn, hooks = options.hooks, packFn = options.packFn, _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? {} : _options_sampling, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, mousemoveWait = options.mousemoveWait, _options_recordDOM = options.recordDOM, recordDOM = _options_recordDOM === void 0 ? true : _options_recordDOM, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, _options_recordCrossOriginIframes = options.recordCrossOriginIframes, recordCrossOriginIframes = _options_recordCrossOriginIframes === void 0 ? false : _options_recordCrossOriginIframes, allowedIframeOrigins = options.allowedIframeOrigins, _options_recordAfter = options.recordAfter, recordAfter = _options_recordAfter === void 0 ? options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\" : _options_recordAfter, _options_userTriggeredOnInput = options.userTriggeredOnInput, userTriggeredOnInput = _options_userTriggeredOnInput === void 0 ? false : _options_userTriggeredOnInput, _options_collectFonts = options.collectFonts, collectFonts = _options_collectFonts === void 0 ? false : _options_collectFonts, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, plugins = options.plugins, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_ignoreCSSAttributes = options.ignoreCSSAttributes, ignoreCSSAttributes = _options_ignoreCSSAttributes === void 0 ? /* @__PURE__ */ new Set([]) : _options_ignoreCSSAttributes, errorHandler2 = options.errorHandler;\n registerErrorHandler(errorHandler2);\n var validatedOrigins;\n if (recordCrossOriginIframes && allowedIframeOrigins && allowedIframeOrigins.length > 0) {\n validatedOrigins = buildAllowedOriginSet(allowedIframeOrigins);\n if (validatedOrigins.size === 0) {\n validatedOrigins = void 0;\n }\n }\n var inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n var passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return function() {};\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : {\n password: true\n };\n var slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n var lastFullSnapshotEvent;\n var incrementalSnapshotCount = 0;\n var eventProcessor = function(e2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.eventProcessor) {\n e2 = plugin3.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = function(r2, isCheckout) {\n var _a2;\n var e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach(function(buf) {\n return buf.unfreeze();\n });\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n var message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout: isCheckout\n };\n if (validatedOrigins) {\n for(var _iterator = _create_for_of_iterator_helper_loose(validatedOrigins), _step; !(_step = _iterator()).done;){\n var targetOrigin = _step.value;\n window.parent.postMessage(message, targetOrigin);\n }\n } else {\n window.parent.postMessage(message, \"*\");\n }\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n var exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n var exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot$1(true);\n }\n }\n };\n var wrappedMutationEmit = function(m) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Mutation\n }, m)\n });\n };\n var wrappedScrollEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Scroll\n }, p)\n });\n };\n var wrappedCanvasMutationEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CanvasMutation\n }, p)\n });\n };\n var wrappedAdoptedStyleSheetEmit = function(a2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.AdoptedStyleSheet\n }, a2)\n });\n };\n var stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n var iframeManager = new IframeManager({\n mirror: mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes: recordCrossOriginIframes,\n wrappedEmit: wrappedEmit\n });\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.getMirror) plugin3.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n var processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas: recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass: blockClass,\n blockSelector: blockSelector,\n mirror: mirror,\n sampling: sampling.canvas,\n dataURLOptions: dataURLOptions\n });\n var shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n dataURLOptions: dataURLOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n sampling: sampling,\n slimDOMOptions: slimDOMOptions,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n canvasManager: canvasManager,\n keepIframeSrcFn: keepIframeSrcFn,\n processedNodeManager: processedNodeManager\n },\n mirror: mirror\n });\n takeFullSnapshot$1 = function(isCheckout) {\n if (isCheckout === void 0) isCheckout = false;\n if (!recordDOM) {\n return;\n }\n wrappedEmit({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n }, isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach(function(buf) {\n return buf.lock();\n });\n var node2 = snapshot(document, {\n mirror: mirror,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOM: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n onSerialize: function(n2) {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), document);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(linkEl, childSn) {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (!node2) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit({\n type: EventType.FullSnapshot,\n data: {\n node: node2,\n initialOffset: getWindowScroll(window)\n }\n }, isCheckout);\n mutationBuffers.forEach(function(buf) {\n return buf.unlock();\n });\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n try {\n var handlers = [];\n var observe = function(doc) {\n var _a2;\n return callbackWrapper(initObservers)({\n mutationCb: wrappedMutationEmit,\n mousemoveCb: function(positions, source) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: source,\n positions: positions\n }\n });\n },\n mouseInteractionCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MouseInteraction\n }, d)\n });\n },\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.ViewportResize\n }, d)\n });\n },\n inputCb: function(v2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Input\n }, v2)\n });\n },\n mediaInteractionCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MediaInteraction\n }, p)\n });\n },\n styleSheetRuleCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleSheetRule\n }, r2)\n });\n },\n styleDeclarationCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleDeclaration\n }, r2)\n });\n },\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Font\n }, p)\n });\n },\n selectionCb: function(p) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Selection\n }, p)\n });\n },\n customElementCb: function(c2) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CustomElement\n }, c2)\n });\n },\n blockClass: blockClass,\n ignoreClass: ignoreClass,\n ignoreSelector: ignoreSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n maskInputOptions: maskInputOptions,\n inlineStylesheet: inlineStylesheet,\n sampling: sampling,\n recordDOM: recordDOM,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n userTriggeredOnInput: userTriggeredOnInput,\n collectFonts: collectFonts,\n doc: doc,\n maskInputFn: maskInputFn,\n maskTextFn: maskTextFn,\n keepIframeSrcFn: keepIframeSrcFn,\n blockSelector: blockSelector,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n mirror: mirror,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n shadowDomManager: shadowDomManager,\n processedNodeManager: processedNodeManager,\n canvasManager: canvasManager,\n ignoreCSSAttributes: ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter(function(p) {\n return p.observer;\n })) == null ? void 0 : _a2.map(function(p) {\n return {\n observer: p.observer,\n options: p.options,\n callback: function(payload) {\n return wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload: payload\n }\n });\n }\n };\n })) || []\n }, hooks);\n };\n iframeManager.addLoadListener(function(iframeEl) {\n try {\n var iframeDoc = iframeEl.contentDocument;\n var iframeHandler = observe(iframeDoc);\n handlers.push(iframeHandler);\n var existingCleanup = iframeManager.getObserverCleanup(iframeEl);\n iframeManager.setObserverCleanup(iframeEl, function() {\n if (existingCleanup) {\n try {\n existingCleanup();\n } catch (e2) {}\n }\n try {\n iframeHandler();\n var idx = handlers.indexOf(iframeHandler);\n if (idx !== -1) handlers.splice(idx, 1);\n removeMutationBufferForDoc(iframeDoc);\n } catch (e2) {}\n });\n } catch (error) {\n console.warn(error);\n }\n });\n var init = function() {\n takeFullSnapshot$1();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(on(\"DOMContentLoaded\", function() {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\") init();\n }));\n handlers.push(on(\"load\", function() {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\") init();\n }, window));\n }\n return function() {\n handlers.forEach(function(handler) {\n try {\n handler();\n } catch (error) {\n var msg = String(error).toLowerCase();\n if (!msg.includes(\"cross-origin\")) {\n console.warn(error);\n }\n }\n });\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = function(tag, payload) {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag: tag,\n payload: payload\n }\n });\n};\nrecord.freezePage = function() {\n mutationBuffers.forEach(function(buf) {\n return buf.freeze();\n });\n};\nrecord.takeFullSnapshot = function(isCheckout) {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot$1(isCheckout);\n};\nrecord.mirror = mirror;\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nrecord.addCustomEvent;\nrecord.freezePage;\nrecord.takeFullSnapshot;\nvar testableAccessors = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype = {};\nvar isAngularZonePresent = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key]) return untaintedBasePrototype[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a, _b;\n return Boolean((_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods ? testableMethods[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a;\n return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache[cacheKey]) return untaintedAccessorCache[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache[cacheKey]) return untaintedMethodCache[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n if (!n || !(\"host\" in n)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n return n.styleSheets;\n}\nfunction shadowRoot(n) {\n if (!n || !(\"shadowRoot\" in n)) return null;\n return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nfunction patch$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index = {\n childNodes: childNodes,\n parentNode: parentNode,\n parentElement: parentElement,\n textContent: textContent,\n contains: contains,\n getRootNode: getRootNode,\n host: host,\n styleSheets: styleSheets,\n shadowRoot: shadowRoot,\n querySelector: querySelector,\n querySelectorAll: querySelectorAll,\n mutationObserver: mutationObserverCtor,\n patch: patch$1\n};\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n}\nfunction getDefaultExportFromCjs(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace(n) {\n if (n.__esModule) return n;\n var f = n.default;\n if (typeof f == \"function\") {\n var a = function a2() {\n if (_instanceof(this, a2)) {\n return Reflect.construct(f, arguments, this.constructor);\n }\n return f.apply(this, arguments);\n };\n a.prototype = f.prototype;\n } else a = {};\n Object.defineProperty(a, \"__esModule\", {\n value: true\n });\n Object.keys(n).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n, k);\n Object.defineProperty(a, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n[k];\n }\n });\n });\n return a;\n}\nvar picocolors_browser = {\n exports: {}\n};\nvar x = String;\nvar create = function create() {\n return {\n isColorSupported: false,\n reset: x,\n bold: x,\n dim: x,\n italic: x,\n underline: x,\n inverse: x,\n hidden: x,\n strikethrough: x,\n black: x,\n red: x,\n green: x,\n yellow: x,\n blue: x,\n magenta: x,\n cyan: x,\n white: x,\n gray: x,\n bgBlack: x,\n bgRed: x,\n bgGreen: x,\n bgYellow: x,\n bgBlue: x,\n bgMagenta: x,\n bgCyan: x,\n bgWhite: x\n };\n};\npicocolors_browser.exports = create();\npicocolors_browser.exports.createColors = create;\nvar picocolors_browserExports = picocolors_browser.exports;\nvar __viteBrowserExternal = {};\nvar __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);\nvar pico = picocolors_browserExports;\nvar terminalHighlight$1 = require$$2;\nvar CssSyntaxError$3 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin2) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin2) {\n _this.plugin = plugin2;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico.isColorSupported;\n if (terminalHighlight$1) {\n if (color) css = terminalHighlight$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico_createColors = pico.createColors(true), bold = _pico_createColors.bold, gray = _pico_createColors.gray, red = _pico_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError = CssSyntaxError$3;\nCssSyntaxError$3.default = CssSyntaxError$3;\nvar symbols = {};\nsymbols.isClean = Symbol(\"isClean\");\nsymbols.my = Symbol(\"my\");\nvar DEFAULT_RAW = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i = 0; i < node2.nodes.length; i++){\n var child = node2.nodes[i];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i) {\n value = i.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== \"undefined\") {\n value = i.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i) {\n if (i.type !== \"decl\") {\n value = i.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && (i.parent !== root2 || root2.first !== i)) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.between !== \"undefined\") {\n value = i.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i) {\n var p = i.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i.raws.before !== \"undefined\") {\n var parts = i.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length && i.last.type === \"decl\") {\n value = i.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier = Stringifier$2;\nStringifier$2.default = Stringifier$2;\nvar Stringifier$1 = stringifier;\nfunction stringify$4(node2, builder) {\n var str = new Stringifier$1(builder);\n str.stringify(node2);\n}\nvar stringify_1 = stringify$4;\nstringify$4.default = stringify$4;\nvar isClean$2 = symbols.isClean, my$2 = symbols.my;\nvar CssSyntaxError$2 = cssSyntaxError;\nvar Stringifier2 = stringifier;\nvar stringify$3 = stringify_1;\nfunction cloneNode(obj, parent) {\n var cloned = new obj.constructor();\n for(var i in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n continue;\n }\n if (i === \"proxyCache\") continue;\n var value = obj[i];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i === \"parent\" && type === \"object\") {\n if (parent) cloned[i] = parent;\n } else if (i === \"source\") {\n cloned[i] = value;\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(function(j) {\n return cloneNode(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode(value);\n cloned[i] = value;\n }\n }\n return cloned;\n}\nvar Node$4 = /*#__PURE__*/ function() {\n function Node1(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2] = false;\n this[my$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node1.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s.input.from + \":\" + s.start.line + \":\" + s.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2]) {\n this[isClean$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i = 0; i < index2; i++){\n if (string[i] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i) {\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.toJSON) {\n return i.toJSON(null, inputs);\n } else {\n return i;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i) {\n result2 += i;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i in opts)data[i] = opts[i];\n return result2.warn(text, data);\n };\n _create_class(Node1, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node1;\n}();\nvar node = Node$4;\nNode$4.default = Node$4;\nvar Node$3 = node;\nvar Declaration$4 = /*#__PURE__*/ function(Node$3) {\n _inherits(Declaration, Node$3);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3);\nvar declaration = Declaration$4;\nDeclaration$4.default = Declaration$4;\nvar urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i = size;\n while(i--){\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure = {\n nanoid: nanoid$1\n};\nvar SourceMapConsumer$2 = require$$2.SourceMapConsumer, SourceMapGenerator$2 = require$$2.SourceMapGenerator;\nvar existsSync = require$$2.existsSync, readFileSync = require$$2.readFileSync;\nvar dirname$1 = require$$2.dirname, join = require$$2.join;\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1(path);\n if (existsSync(path)) {\n this.mapFile = path;\n return readFileSync(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2)) {\n return SourceMapGenerator$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join(dirname$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap = PreviousMap$2;\nPreviousMap$2.default = PreviousMap$2;\nvar SourceMapConsumer$1 = require$$2.SourceMapConsumer, SourceMapGenerator$1 = require$$2.SourceMapGenerator;\nvar fileURLToPath = require$$2.fileURLToPath, pathToFileURL$1 = require$$2.pathToFileURL;\nvar isAbsolute = require$$2.isAbsolute, resolve$1 = require$$2.resolve;\nvar nanoid = nonSecure.nanoid;\nvar terminalHighlight = require$$2;\nvar CssSyntaxError$1 = cssSyntaxError;\nvar PreviousMap$1 = previousMap;\nvar fromOffsetCache = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1 = Boolean(SourceMapConsumer$1 && SourceMapGenerator$1);\nvar pathAvailable$1 = Boolean(resolve$1 && isAbsolute);\nvar Input$4 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1(opts.from);\n }\n }\n if (pathAvailable$1 && sourceMapAvailable$1) {\n var map = new PreviousMap$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1) {\n result2.input.url = pathToFileURL$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i = 0, l = lines.length; i < l; i++){\n lineToIndex[i] = prevIndex;\n prevIndex += lines[i].length + 1;\n }\n this[fromOffsetCache] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath) {\n result2.file = fileURLToPath(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input = Input$4;\nInput$4.default = Input$4;\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input$4);\n}\nvar SourceMapConsumer = require$$2.SourceMapConsumer, SourceMapGenerator = require$$2.SourceMapGenerator;\nvar dirname = require$$2.dirname, relative = require$$2.relative, resolve = require$$2.resolve, sep = require$$2.sep;\nvar pathToFileURL = require$$2.pathToFileURL;\nvar Input$3 = input;\nvar sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\nvar pathAvailable = Boolean(dirname && resolve && relative && sep);\nvar MapGenerator$2 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i = this.root.nodes.length - 1; i >= 0; i--){\n node2 = this.root.nodes[i];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i) {\n result2 += i;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname(resolve(from, this.mapOpts.annotation));\n }\n var path = relative(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL) {\n var fileURL = pathToFileURL(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator = MapGenerator$2;\nvar Node$2 = node;\nvar Comment$4 = /*#__PURE__*/ function(Node$2) {\n _inherits(Comment, Node$2);\n function Comment(defaults) {\n var _this;\n _this = Node$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2);\nvar comment = Comment$4;\nComment$4.default = Comment$4;\nvar isClean$1 = symbols.isClean, my$1 = symbols.my;\nvar Declaration$3 = declaration;\nvar Comment$3 = comment;\nvar Node$1 = node;\nvar parse$4, Rule$4, AtRule$4, Root$6;\nfunction cleanSource(nodes) {\n return nodes.map(function(i) {\n if (i.nodes) i.nodes = cleanSource(i.nodes);\n delete i.source;\n return i;\n });\n}\nfunction markDirtyUp(node2) {\n node2[isClean$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n markDirtyUp(i);\n }\n }\n}\nvar Container$7 = /*#__PURE__*/ function(Node$1) {\n _inherits(Container, Node$1);\n function Container() {\n return Node$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i) {\n if (typeof i === \"function\") {\n return function(child, index2) {\n return i(child.toProxy(), index2);\n };\n } else {\n return i;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i) {\n return i.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource(parse$4(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.parent) i.parent.removeChild(i, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i1 = _step1.value;\n if (i1.parent) i1.parent.removeChild(i1, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i) {\n if (!i[my$1]) Container.rebuild(i);\n i = i.proxyOf;\n if (i.parent) i.parent.removeChild(i);\n if (i[isClean$1]) markDirtyUp(i);\n if (typeof i.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i.parent = _this.proxyOf;\n return i;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i) {\n var result2;\n try {\n result2 = callback(child, i);\n } catch (e) {\n throw child.addToError(e);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i) {\n if (child.type === \"atrule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i) {\n if (child.type === \"comment\") {\n return callback(child, i);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i) {\n if (child.type === \"decl\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i) {\n if (child.type === \"rule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1);\nContainer$7.registerParse = function(dependant) {\n parse$4 = dependant;\n};\nContainer$7.registerRule = function(dependant) {\n Rule$4 = dependant;\n};\nContainer$7.registerAtRule = function(dependant) {\n AtRule$4 = dependant;\n};\nContainer$7.registerRoot = function(dependant) {\n Root$6 = dependant;\n};\nvar container = Container$7;\nContainer$7.default = Container$7;\nContainer$7.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6.prototype);\n }\n node2[my$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7.rebuild(child);\n });\n }\n};\nvar Container$6 = container;\nvar LazyResult$4, Processor$3;\nvar Document$3 = /*#__PURE__*/ function(Container$6) {\n _inherits(Document, Container$6);\n function Document(defaults) {\n var _this;\n _this = Container$6.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4(new Processor$3(), this, opts);\n return lazy.stringify();\n };\n return Document;\n}(Container$6);\nDocument$3.registerLazyResult = function(dependant) {\n LazyResult$4 = dependant;\n};\nDocument$3.registerProcessor = function(dependant) {\n Processor$3 = dependant;\n};\nvar document$1 = Document$3;\nDocument$3.default = Document$3;\nvar printed = {};\nvar warnOnce$2 = function warnOnce(message) {\n if (printed[message]) return;\n printed[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning = Warning$2;\nWarning$2.default = Warning$2;\nvar Warning$1 = warning;\nvar Result$3 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i) {\n return i.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result = Result$3;\nResult$3.default = Result$3;\nvar SINGLE_QUOTE = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE = '\"'.charCodeAt(0);\nvar BACKSLASH = \"\\\\\".charCodeAt(0);\nvar SLASH = \"/\".charCodeAt(0);\nvar NEWLINE = \"\\n\".charCodeAt(0);\nvar SPACE = \" \".charCodeAt(0);\nvar FEED = \"\\f\".charCodeAt(0);\nvar TAB = \"\t\".charCodeAt(0);\nvar CR = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES = \")\".charCodeAt(0);\nvar OPEN_CURLY = \"{\".charCodeAt(0);\nvar CLOSE_CURLY = \"}\".charCodeAt(0);\nvar SEMICOLON = \";\".charCodeAt(0);\nvar ASTERISK = \"*\".charCodeAt(0);\nvar COLON = \":\".charCodeAt(0);\nvar AT = \"@\".charCodeAt(0);\nvar RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE = /[\\da-f]/i;\nvar tokenize = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE:\n {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT:\n {\n RE_AT_END.lastIndex = pos + 1;\n RE_AT_END.test(css);\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n next += 1;\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END.lastIndex = pos + 1;\n RE_WORD_END.test(css);\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5 = container;\nvar AtRule$3 = /*#__PURE__*/ function(Container$5) {\n _inherits(AtRule, Container$5);\n function AtRule(defaults) {\n var _this;\n _this = Container$5.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_append = Container$5.prototype.append).call.apply(_Container$5_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_prepend = Container$5.prototype.prepend).call.apply(_Container$5_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5);\nvar atRule = AtRule$3;\nAtRule$3.default = AtRule$3;\nContainer$5.registerAtRule(AtRule$3);\nvar Container$4 = container;\nvar LazyResult$3, Processor$2;\nvar Root$5 = /*#__PURE__*/ function(Container$4) {\n _inherits(Root, Container$4);\n function Root(defaults) {\n var _this;\n _this = Container$4.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3(new Processor$2(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4);\nRoot$5.registerLazyResult = function(dependant) {\n LazyResult$3 = dependant;\n};\nRoot$5.registerProcessor = function(dependant) {\n Processor$2 = dependant;\n};\nvar root = Root$5;\nRoot$5.default = Root$5;\nContainer$4.registerRoot(Root$5);\nvar list$2 = {\n comma: function comma(string) {\n return list$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1 = list$2;\nlist$2.default = list$2;\nvar Container$3 = container;\nvar list$1 = list_1;\nvar Rule$3 = /*#__PURE__*/ function(Container$3) {\n _inherits(Rule, Container$3);\n function Rule(defaults) {\n var _this;\n _this = Container$3.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3);\nvar rule = Rule$3;\nRule$3.default = Rule$3;\nContainer$3.registerRule(Rule$3);\nvar Declaration$2 = declaration;\nvar tokenizer2 = tokenize;\nvar Comment$2 = comment;\nvar AtRule$2 = atRule;\nvar Root$4 = root;\nvar Rule$2 = rule;\nvar SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition(tokens) {\n for(var i = tokens.length - 1; i >= 0; i--){\n var token = tokens[i];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i = tokens.length - 1; i >= 0; i--){\n token = tokens[i];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i) {\n return i[0] !== \"space\" && i[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i) {\n return i[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i = 0; i < length; i += 1){\n token = tokens[i];\n type = token[0];\n if (type === \"space\" && i === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i - 1] ? tokens[i - 1][0] : \"empty\";\n next = tokens[i + 1] ? tokens[i + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i) {\n return all + i[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i = from; i < tokens.length; i++){\n result2 += tokens[i][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser = Parser$1;\nvar Container$2 = container;\nvar Parser2 = parser;\nvar Input$2 = input;\nfunction parse$3(css, opts) {\n var input2 = new Input$2(css, opts);\n var parser2 = new Parser2(input2);\n try {\n parser2.parse();\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e;\n }\n return parser2.root;\n}\nvar parse_1 = parse$3;\nparse$3.default = parse$3;\nContainer$2.registerParse(parse$3);\nvar isClean = symbols.isClean, my = symbols.my;\nvar MapGenerator$1 = mapGenerator;\nvar stringify$2 = stringify_1;\nvar Container$1 = container;\nvar Document$2 = document$1;\nvar warnOnce$1 = warnOnce$2;\nvar Result$2 = result;\nvar parse$2 = parse_1;\nvar Root$3 = root;\nvar TYPE_TO_CLASS_NAME = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN = 0;\nfunction isPromise(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN,\n \"RootExit\"\n ];\n } else {\n events = getEvents(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks(node2) {\n node2[isClean] = false;\n if (node2.nodes) node2.nodes.forEach(function(i) {\n return cleanMarks(i);\n });\n return node2;\n}\nvar postcss$2 = {};\nvar LazyResult$2 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2)) {\n root2 = cleanMarks(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my]) {\n Container$1.rebuild(root2);\n }\n }\n this.result = new Result$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2, {\n postcss: postcss$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin2) {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.prepare) {\n return _extends({}, plugin2, plugin2.prepare(_this.result));\n } else {\n return plugin2;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin2 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin2.postcssPlugin;\n error.setMessage();\n } else if (plugin2.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin2.postcssPlugin;\n var pluginVer = plugin2.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin2, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin2,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\") {\n for(var event in plugin2){\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin2.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS[event]) {\n if (_type_of(plugin2[event]) === \"object\") {\n for(var filter in plugin2[event]){\n if (filter === \"*\") {\n add(plugin2, event, plugin2[event][filter]);\n } else {\n add(plugin2, event + \"-\" + filter.toLowerCase(), plugin2[event][filter]);\n }\n }\n } else if (typeof plugin2[event] === \"function\") {\n add(plugin2, event, plugin2[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i, plugin2, promise, error, root2, stack, promise1, e, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i = 0;\n _state.label = 1;\n case 1:\n if (!(i < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin2 = _this.plugins[i];\n promise = _this.runOnRoot(plugin2);\n if (!isPromise(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean]) return [\n 3,\n 14\n ];\n root2[isClean] = true;\n stack = [\n toStack(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin2, visitor, roots, e;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin2;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e = _state.sent();\n throw _this.handleError(e);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin2) {\n var _this = this;\n this.result.lastPlugin = plugin2;\n try {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin2.Once(root2, _this.helpers);\n });\n if (isPromise(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin2.Once(this.result.root, this.helpers);\n } else if (typeof plugin2 === \"function\") {\n return plugin2(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n var promise = this.runOnRoot(plugin2);\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean]){\n root2[isClean] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin2;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e) {\n throw this.handleError(e, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin2 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin2;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e) {\n throw this.handleError(e, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean]) {\n child[isClean] = true;\n stack.push(toStack(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean] = true;\n var events = getEvents(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2.registerPostcss = function(dependant) {\n postcss$2 = dependant;\n};\nvar lazyResult = LazyResult$2;\nLazyResult$2.default = LazyResult$2;\nRoot$3.registerLazyResult(LazyResult$2);\nDocument$2.registerLazyResult(LazyResult$2);\nvar MapGenerator2 = mapGenerator;\nvar stringify$1 = stringify_1;\nvar warnOnce2 = warnOnce$2;\nvar parse$1 = parse_1;\nvar Result$1 = result;\nvar NoWorkResult$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1;\n this.result = new Result$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult = NoWorkResult$1;\nNoWorkResult$1.default = NoWorkResult$1;\nvar NoWorkResult2 = noWorkResult;\nvar LazyResult$1 = lazyResult;\nvar Document$1 = document$1;\nvar Root$2 = root;\nvar Processor$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.postcss === true) {\n i = i();\n } else if (i.postcss) {\n i = i.postcss;\n }\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.postcssPlugin) {\n normalized.push(i);\n } else if (typeof i === \"function\") {\n normalized.push(i);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2(this, css, opts);\n } else {\n return new LazyResult$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin2) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin2\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor = Processor$1;\nProcessor$1.default = Processor$1;\nRoot$2.registerProcessor(Processor$1);\nDocument$1.registerProcessor(Processor$1);\nvar Declaration$1 = declaration;\nvar PreviousMap2 = previousMap;\nvar Comment$1 = comment;\nvar AtRule$1 = atRule;\nvar Input$1 = input;\nvar Root$1 = root;\nvar Rule$1 = rule;\nfunction fromJSON$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n) {\n return fromJSON$1(n);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n) {\n return fromJSON$1(n, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1 = fromJSON$1;\nfromJSON$1.default = fromJSON$1;\nvar CssSyntaxError2 = cssSyntaxError;\nvar Declaration2 = declaration;\nvar LazyResult2 = lazyResult;\nvar Container2 = container;\nvar Processor2 = processor;\nvar stringify$5 = stringify_1;\nvar fromJSON = fromJSON_1;\nvar Document2 = document$1;\nvar Warning2 = warning;\nvar Comment2 = comment;\nvar AtRule2 = atRule;\nvar Result2 = result;\nvar Input2 = input;\nvar parse = parse_1;\nvar list = list_1;\nvar Rule2 = rule;\nvar Root2 = root;\nvar Node2 = node;\nfunction postcss() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2(plugins);\n}\npostcss.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss.stringify = stringify$5;\npostcss.parse = parse;\npostcss.fromJSON = fromJSON;\npostcss.list = list;\npostcss.comment = function(defaults) {\n return new Comment2(defaults);\n};\npostcss.atRule = function(defaults) {\n return new AtRule2(defaults);\n};\npostcss.decl = function(defaults) {\n return new Declaration2(defaults);\n};\npostcss.rule = function(defaults) {\n return new Rule2(defaults);\n};\npostcss.root = function(defaults) {\n return new Root2(defaults);\n};\npostcss.document = function(defaults) {\n return new Document2(defaults);\n};\npostcss.CssSyntaxError = CssSyntaxError2;\npostcss.Declaration = Declaration2;\npostcss.Container = Container2;\npostcss.Processor = Processor2;\npostcss.Document = Document2;\npostcss.Comment = Comment2;\npostcss.Warning = Warning2;\npostcss.AtRule = AtRule2;\npostcss.Result = Result2;\npostcss.Input = Input2;\npostcss.Rule = Rule2;\npostcss.Root = Root2;\npostcss.Node = Node2;\nLazyResult2.registerPostcss(postcss);\nvar postcss_1 = postcss;\npostcss.default = postcss;\nvar postcss$1 = /* @__PURE__ */ getDefaultExportFromCjs(postcss_1);\npostcss$1.stringify;\npostcss$1.fromJSON;\npostcss$1.plugin;\npostcss$1.parse;\npostcss$1.list;\npostcss$1.document;\npostcss$1.comment;\npostcss$1.atRule;\npostcss$1.rule;\npostcss$1.decl;\npostcss$1.root;\npostcss$1.CssSyntaxError;\npostcss$1.Declaration;\npostcss$1.Container;\npostcss$1.Processor;\npostcss$1.Document;\npostcss$1.Comment;\npostcss$1.Warning;\npostcss$1.AtRule;\npostcss$1.Result;\npostcss$1.Input;\npostcss$1.Rule;\npostcss$1.Root;\npostcss$1.Node;\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = function(obj, key, value) {\n return key in obj ? __defProp(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField = function(obj, key, value) {\n return __defNormalProp(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar StackFrame = /*#__PURE__*/ function() {\n function StackFrame(obj) {\n __publicField(this, \"fileName\");\n __publicField(this, \"functionName\");\n __publicField(this, \"lineNumber\");\n __publicField(this, \"columnNumber\");\n this.fileName = obj.fileName || \"\";\n this.functionName = obj.functionName || \"\";\n this.lineNumber = obj.lineNumber;\n this.columnNumber = obj.columnNumber;\n }\n var _proto = StackFrame.prototype;\n _proto.toString = function toString() {\n var lineNumber = this.lineNumber || \"\";\n var columnNumber = this.columnNumber || \"\";\n if (this.functionName) return this.functionName + \" (\" + this.fileName + \":\" + lineNumber + \":\" + columnNumber + \")\";\n return this.fileName + \":\" + lineNumber + \":\" + columnNumber;\n };\n return StackFrame;\n}();\nvar FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\nvar CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nvar SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nvar ErrorStackParser = {\n /**\n * Given an Error object, extract the most information from it.\n */ parse: function parse(error) {\n if (!error) {\n return [];\n }\n if (// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error.stacktrace !== \"undefined\" || // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error[\"opera#sourceloc\"] !== \"undefined\") {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n console.warn(\"[console-record-plugin]: Failed to parse error object:\", error);\n return [];\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function extractLocation(urlLike) {\n if (urlLike.indexOf(\":\") === -1) {\n return [\n urlLike\n ];\n }\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, \"\"));\n if (!parts) throw new Error(\"Cannot parse given url: \" + urlLike);\n return [\n parts[1],\n parts[2] || void 0,\n parts[3] || void 0\n ];\n },\n parseV8OrIE: function parseV8OrIE(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\"(eval \") > -1) {\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g, \"\");\n }\n var sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\");\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(\" \") || void 0;\n var fileName = [\n \"eval\",\n \"\"\n ].indexOf(locationParts[0]) > -1 ? void 0 : locationParts[0];\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n },\n parseFFOrSafari: function parseFFOrSafari(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\" > eval\") > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, \":$1\");\n }\n if (line.indexOf(\"@\") === -1 && line.indexOf(\":\") === -1) {\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : void 0;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, \"\"));\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }\n }, this);\n },\n parseOpera: function parseOpera(e) {\n if (!e.stacktrace || e.message.indexOf(\"\\n\") > -1 && e.message.split(\"\\n\").length > e.stacktrace.split(\"\\n\").length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split(\"\\n\");\n var result = [];\n for(var i = 2, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n parseOpera10: function parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split(\"\\n\");\n var result = [];\n for(var i = 0, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n functionName: match[3] || void 0,\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function parseOpera11(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function(line) {\n var tokens = line.split(\"@\");\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = tokens.shift() || \"\";\n var functionName = functionCall.replace(//, \"$2\").replace(/\\([^)]*\\)/g, \"\") || void 0;\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n }\n};\nfunction pathToSelector(node) {\n if (!node || !node.outerHTML) {\n return \"\";\n }\n var path = \"\";\n while(node.parentElement){\n var name = node.localName;\n if (!name) {\n break;\n }\n name = name.toLowerCase();\n var parent = node.parentElement;\n var domSiblings = [];\n if (parent.children && parent.children.length > 0) {\n for(var i = 0; i < parent.children.length; i++){\n var sibling = parent.children[i];\n if (sibling.localName && sibling.localName.toLowerCase) {\n if (sibling.localName.toLowerCase() === name) {\n domSiblings.push(sibling);\n }\n }\n }\n }\n if (domSiblings.length > 1) {\n name += \":eq(\" + domSiblings.indexOf(node) + \")\";\n }\n path = name + (path ? \">\" + path : \"\");\n node = parent;\n }\n return path;\n}\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isObjTooDeep(obj, limit) {\n if (limit === 0) {\n return true;\n }\n var keys = Object.keys(obj);\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (isObject(obj[key]) && isObjTooDeep(obj[key], limit - 1)) {\n return true;\n }\n }\n return false;\n}\nfunction stringify(obj, stringifyOptions) {\n var options = {\n numOfKeysLimit: 50,\n depthOfLimit: 4\n };\n Object.assign(options, stringifyOptions);\n var stack = [];\n var keys = [];\n return JSON.stringify(obj, function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) {\n if (stack[0] === value) {\n value = \"[Circular ~]\";\n } else {\n value = \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n }\n }\n } else {\n stack.push(value);\n }\n if (value === null) return value;\n if (value === void 0) return \"undefined\";\n if (shouldIgnore(value)) {\n return toString(value);\n }\n if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"bigint\") {\n return value.toString() + \"n\";\n }\n if (_instanceof(value, Event)) {\n var eventResult = {};\n for(var eventKey in value){\n var eventValue = value[eventKey];\n if (Array.isArray(eventValue)) {\n eventResult[eventKey] = pathToSelector(eventValue.length ? eventValue[0] : null);\n } else {\n eventResult[eventKey] = eventValue;\n }\n }\n return eventResult;\n } else if (_instanceof(value, Node)) {\n if (_instanceof(value, HTMLElement)) {\n return value ? value.outerHTML : \"\";\n }\n return value.nodeName;\n } else if (_instanceof(value, Error)) {\n return value.stack ? value.stack + \"\\nEnd of stack for Error object\" : value.name + \": \" + value.message;\n }\n return value;\n });\n function shouldIgnore(_obj) {\n if (isObject(_obj) && Object.keys(_obj).length > options.numOfKeysLimit) {\n return true;\n }\n if (typeof _obj === \"function\") {\n return true;\n }\n if (isObject(_obj) && isObjTooDeep(_obj, options.depthOfLimit)) {\n return true;\n }\n return false;\n }\n function toString(_obj) {\n var str = _obj.toString();\n if (options.stringLengthLimit && str.length > options.stringLengthLimit) {\n str = \"\" + str.slice(0, options.stringLengthLimit) + \"...\";\n }\n return str;\n }\n}\nvar defaultLogOptions = {\n level: [\n \"assert\",\n \"clear\",\n \"count\",\n \"countReset\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"info\",\n \"log\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"trace\",\n \"warn\"\n ],\n lengthThreshold: 1e3,\n logger: \"console\"\n};\nfunction initLogObserver(cb, win, options) {\n var logOptions = options ? Object.assign({}, defaultLogOptions, options) : defaultLogOptions;\n var loggerType = logOptions.logger;\n if (!loggerType) {\n return function() {};\n }\n var logger;\n if (typeof loggerType === \"string\") {\n logger = win[loggerType];\n } else {\n logger = loggerType;\n }\n var logCount = 0;\n var inStack = false;\n var cancelHandlers = [];\n if (logOptions.level.includes(\"error\")) {\n var errorHandler = function(event) {\n var message = event.message, error = event.error;\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n var payload = [\n stringify(message, logOptions.stringifyOptions)\n ];\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"error\", errorHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"error\", errorHandler);\n });\n var unhandledrejectionHandler = function(event) {\n var error;\n var payload;\n if (_instanceof(event.reason, Error)) {\n error = event.reason;\n payload = [\n stringify(\"Uncaught (in promise) \" + error.name + \": \" + error.message, logOptions.stringifyOptions)\n ];\n } else {\n error = new Error();\n payload = [\n stringify(\"Uncaught (in promise)\", logOptions.stringifyOptions),\n stringify(event.reason, logOptions.stringifyOptions)\n ];\n }\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n });\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(logOptions.level), _step; !(_step = _iterator()).done;){\n var levelType = _step.value;\n cancelHandlers.push(replace(logger, levelType));\n }\n return function() {\n cancelHandlers.forEach(function(h) {\n return h();\n });\n };\n function replace(_logger, level) {\n var _this = this;\n if (!_logger[level]) {\n return function() {};\n }\n return patch(_logger, level, function(original) {\n var _this1 = _this;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n original.apply(_this1, args);\n if (level === \"assert\" && !!args[0]) {\n return;\n }\n if (inStack) {\n return;\n }\n inStack = true;\n try {\n var trace = ErrorStackParser.parse(new Error()).map(function(stackFrame) {\n return stackFrame.toString();\n }).splice(1);\n var argsForPayload = level === \"assert\" ? args.slice(1) : args;\n var payload = argsForPayload.map(function(s) {\n return stringify(s, logOptions.stringifyOptions);\n });\n logCount++;\n if (logCount < logOptions.lengthThreshold) {\n cb({\n level: level,\n trace: trace,\n payload: payload\n });\n } else if (logCount === logOptions.lengthThreshold) {\n cb({\n level: \"warn\",\n trace: [],\n payload: [\n stringify(\"The number of log records reached the threshold.\")\n ]\n });\n }\n } catch (error) {\n original.apply(void 0, [].concat([\n \"rrweb logger error:\",\n error\n ], args));\n } finally{\n inStack = false;\n }\n };\n });\n }\n}\nvar PLUGIN_NAME = \"rrweb/console@1\";\nvar getRecordConsolePlugin = function(options) {\n return {\n name: PLUGIN_NAME,\n observer: initLogObserver,\n options: options\n };\n};\n\nexport { EventType, IncrementalSource, classMatchesRegex, getRecordConsolePlugin, record };\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","import { Promise } from '../promise-polyfill';\nimport { window } from '../window';\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar IDBStorageWrapper = function (dbName, storeName, versionData) {\n this.dbName = dbName;\n this.storeName = storeName;\n this.version = versionData.version;\n this.storeNamesInDb = versionData.storeNames;\n /**\n * @type {Promise|null}\n */\n this.dbPromise = null;\n};\n\nIDBStorageWrapper.prototype._openDb = function () {\n var dbName = this.dbName;\n var version = this.version;\n var storeNamesInDb = this.storeNamesInDb;\n return new Promise(function (resolve, reject) {\n var openRequest = window.indexedDB.open(dbName, version);\n openRequest['onerror'] = function () {\n reject(openRequest.error);\n };\n\n openRequest['onsuccess'] = function () {\n resolve(openRequest.result);\n };\n\n openRequest['onupgradeneeded'] = function (ev) {\n var db = ev.target.result;\n\n storeNamesInDb.forEach(function (storeName) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n });\n };\n });\n};\n\nIDBStorageWrapper.prototype.init = function () {\n if (!window.indexedDB) {\n return Promise.reject('indexedDB is not supported in this browser');\n }\n\n if (!this.dbPromise) {\n this.dbPromise = this._openDb();\n }\n\n return this.dbPromise\n .then(function (dbOrError) {\n if (dbOrError instanceof window['IDBDatabase']) {\n return Promise.resolve();\n } else {\n return Promise.reject(dbOrError);\n }\n });\n};\n\nIDBStorageWrapper.prototype.isInitialized = function () {\n return !!this.dbPromise;\n};\n\n/**\n * @param {IDBTransactionMode} mode\n * @param {function(IDBObjectStore): void} storeCb\n */\nIDBStorageWrapper.prototype.makeTransaction = function (mode, storeCb) {\n var storeName = this.storeName;\n var doTransaction = function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction(storeName, mode);\n transaction.oncomplete = function () {\n resolve(transaction);\n };\n transaction.onabort = transaction.onerror = function () {\n reject(transaction.error);\n };\n\n storeCb(transaction.objectStore(storeName));\n });\n };\n\n return this.dbPromise\n .then(doTransaction)\n .catch(function (err) {\n if (err && err['name'] === 'InvalidStateError') {\n // try reopening the DB if the connection is closed\n this.dbPromise = this._openDb();\n return this.dbPromise.then(doTransaction);\n } else {\n return Promise.reject(err);\n }\n }.bind(this));\n};\n\nIDBStorageWrapper.prototype.setItem = function (key, value) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.put(value, key);\n });\n};\n\nIDBStorageWrapper.prototype.getItem = function (key) {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.get(key);\n }).then(function () {\n return req.result;\n });\n};\n\nIDBStorageWrapper.prototype.removeItem = function (key) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.delete(key);\n });\n};\n\nIDBStorageWrapper.prototype.getAll = function () {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.getAll();\n }).then(function () {\n return req.result;\n });\n};\n\nexport {\n IDBStorageWrapper\n};\n","var MIXPANEL_BROWSER_DB_NAME = 'mixpanelBrowserDb';\nvar RECORDING_EVENTS_STORE_NAME = 'mixpanelRecordingEvents';\nvar RECORDING_REGISTRY_STORE_NAME = 'mixpanelRecordingRegistry';\n\n// Keeping these two properties closeby, as adding additional stores to a DB in IndexedDB requires a version increment\nvar RECORDER_VERSION_DATA = {\n version: 1,\n storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME]\n};\n\nexport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n};\n","/**\n * GDPR utils\n *\n * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection\n * and privacy for all individuals within the European Union. It addresses the export of personal\n * data outside the EU. The GDPR aims primarily to give control back to citizens and residents\n * over their personal data and to simplify the regulatory environment for international business\n * by unifying the regulation within the EU.\n *\n * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK.\n * These functions are used internally by the SDK and are not intended to be publicly exposed.\n */\n\nimport { _, console, getLocalStorage, localStorageSupported } from './utils';\nimport { window } from './window';\n\n/**\n * A function used to track a Mixpanel event (e.g. MixpanelLib.track)\n * @callback trackFunction\n * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc.\n * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself.\n * @param {Function} [callback] If provided, the callback function will be called after tracking the event.\n */\n\n/** Public **/\n\nvar GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_';\n\n/**\n * Opt the user in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function optIn(token, options) {\n _optInOut(true, token, options);\n}\n\n/**\n * Opt the user out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not\n */\nexport function optOut(token, options) {\n _optInOut(false, token, options);\n}\n\n/**\n * Check whether the user has opted in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} whether the user has opted in to the given opt type\n */\nexport function hasOptedIn(token, options) {\n return _getStorageValue(token, options) === '1';\n}\n\n/**\n * Check whether the user has opted out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the user has opted out of the given opt type\n */\nexport function hasOptedOut(token, options) {\n if (_hasDoNotTrackFlagOn(options)) {\n console.warn('This browser has \"Do Not Track\" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the \"Do Not Track\" browser setting, initialize the Mixpanel instance with the config \"ignore_dnt: true\"');\n return true;\n }\n var optedOut = _getStorageValue(token, options) === '0';\n if (optedOut) {\n console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.');\n }\n return optedOut;\n}\n\n/**\n * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @template {Function} M\n * @param {M} method - wrapped method to be executed if the user has not opted out\n * @returns {M} the wrapped method\n */\nexport function addOptOutCheckMixpanelLib(method) {\n return _addOptOutCheck(method, function(name) {\n return this.get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @template {Function} M\n * @param {M} method - wrapped method to be executed if the user has not opted out\n * @returns {M} the wrapped method\n */\nexport function addOptOutCheckMixpanelPeople(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @template {Function} M\n * @param {M} method - wrapped method to be executed if the user has not opted out\n * @returns {M} the wrapped method\n */\nexport function addOptOutCheckMixpanelGroup(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function clearOptInOut(token, options) {\n options = options || {};\n _getStorage(options).remove(\n _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain\n );\n}\n\n/** Private **/\n\n/**\n * Get storage util\n * @param {Object} [options]\n * @param {string} [options.persistenceType]\n * @returns {object} either _.cookie or _.localstorage\n */\nfunction _getStorage(options) {\n options = options || {};\n return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie;\n}\n\n/**\n * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the name of the cookie for the given opt type\n */\nfunction _getStorageKey(token, options) {\n options = options || {};\n return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token;\n}\n\n/**\n * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the value of the cookie for the given opt type\n */\nfunction _getStorageValue(token, options) {\n return _getStorage(options).get(_getStorageKey(token, options));\n}\n\n/**\n * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag\n * in localStorage if it can be written, otherwise in a cookie. Read that store first, and\n * the other one if no flag is there.\n * @param {string} token - Mixpanel project tracking token\n * @param {string} persistenceType - configured persistence type\n * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name\n * @returns {string} the persistence type to read\n */\nfunction _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) {\n if (persistenceType !== 'localStorage') {\n return persistenceType;\n }\n var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie';\n var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null;\n if (hasFlag) {\n return writtenTo;\n }\n return writtenTo === 'localStorage' ? 'cookie' : 'localStorage';\n}\n\n/**\n * Check whether the user has set the DNT/doNotTrack setting to true in their browser\n * @param {Object} [options]\n * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the DNT setting is true\n */\nfunction _hasDoNotTrackFlagOn(options) {\n if (options && options.ignoreDnt) {\n return false;\n }\n var win = (options && options.window) || window;\n var nav = win['navigator'] || {};\n var hasDntOn = false;\n\n _.each([\n nav['doNotTrack'], // standard\n nav['msDoNotTrack'],\n win['doNotTrack']\n ], function(dntValue) {\n if (_.includes([true, 1, '1', 'yes'], dntValue)) {\n hasDntOn = true;\n }\n });\n\n return hasDntOn;\n}\n\n/**\n * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type\n * @param {boolean} optValue - whether to opt the user in or out for the given opt type\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction _optInOut(optValue, token, options) {\n if (!_.isString(token) || !token.length) {\n console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token');\n return;\n }\n\n options = options || {};\n\n _getStorage(options).set(\n _getStorageKey(token, options),\n optValue ? 1 : 0,\n _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null,\n !!options.crossSubdomainCookie,\n !!options.secureCookie,\n !!options.crossSiteCookie,\n options.cookieDomain\n );\n\n if (options.track && optValue) { // only track event if opting in (optValue=true)\n options.track(options.trackEventName || '$opt_in', options.trackProperties, {\n 'send_immediately': true\n });\n }\n}\n\n/**\n * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction _addOptOutCheck(method, getConfigValue) {\n return function() {\n var optedOut = false;\n\n try {\n var token = getConfigValue.call(this, 'token');\n var ignoreDnt = getConfigValue.call(this, 'ignore_dnt');\n var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type');\n var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix');\n var win = getConfigValue.call(this, 'window'); // used to override window during browser tests\n\n if (token) { // if there was an issue getting the token, continue method execution as normal\n optedOut = hasOptedOut(token, {\n ignoreDnt: ignoreDnt,\n persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix),\n persistencePrefix: persistencePrefix,\n window: win\n });\n }\n } catch(err) {\n console.error('Unexpected error when checking tracking opt-out status: ' + err);\n }\n\n if (!optedOut) {\n return method.apply(this, arguments);\n }\n\n var callback = arguments[arguments.length - 1];\n if (typeof(callback) === 'function') {\n callback(0);\n }\n\n return;\n };\n}\n","import { Promise } from './promise-polyfill';\nimport { console_with_prefix, localStorageSupported, getLocalStorage, _ } from './utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n * console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function(key, options) {\n options = options || {};\n\n this.storageKey = key;\n this.storage = options.storage || getLocalStorage();\n this.pollIntervalMS = options.pollIntervalMS || 100;\n this.timeoutMS = options.timeoutMS || 2000;\n\n // dependency-inject promise implementation for testing purposes\n this.promiseImpl = options.promiseImpl || Promise;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function(lockedCB, pid) {\n var Promise = this.promiseImpl;\n return new Promise(_.bind(function (resolve, reject) {\n var i = pid || (new Date().getTime() + '|' + Math.random());\n var startTime = new Date().getTime();\n var key = this.storageKey;\n var pollIntervalMS = this.pollIntervalMS;\n var timeoutMS = this.timeoutMS;\n var storage = this.storage;\n\n var keyX = key + ':X';\n var keyY = key + ':Y';\n var keyZ = key + ':Z';\n\n var delay = function(cb) {\n if (new Date().getTime() - startTime > timeoutMS) {\n logger.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n storage.removeItem(keyZ);\n storage.removeItem(keyY);\n loop();\n return;\n }\n setTimeout(function() {\n try {\n cb();\n } catch(err) {\n reject(err);\n }\n }, pollIntervalMS * (Math.random() + 0.1));\n };\n\n var waitFor = function(predicate, cb) {\n if (predicate()) {\n cb();\n } else {\n delay(function() {\n waitFor(predicate, cb);\n });\n }\n };\n\n var getSetY = function() {\n var valY = storage.getItem(keyY);\n if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases)\n return false;\n } else {\n storage.setItem(keyY, i);\n if (storage.getItem(keyY) === i) {\n return true;\n } else {\n if (!localStorageSupported(storage, true)) {\n reject(new Error('localStorage support dropped while acquiring lock'));\n }\n return false;\n }\n }\n };\n\n var loop = function() {\n storage.setItem(keyX, i);\n\n waitFor(getSetY, function() {\n if (storage.getItem(keyX) === i) {\n criticalSection();\n return;\n }\n\n delay(function() {\n if (storage.getItem(keyY) !== i) {\n loop();\n return;\n }\n waitFor(function() {\n return !storage.getItem(keyZ);\n }, criticalSection);\n });\n });\n };\n\n var criticalSection = function() {\n storage.setItem(keyZ, '1');\n var removeLock = function () {\n storage.removeItem(keyZ);\n if (storage.getItem(keyY) === i) {\n storage.removeItem(keyY);\n }\n if (storage.getItem(keyX) === i) {\n storage.removeItem(keyX);\n }\n };\n\n lockedCB()\n .then(function (ret) {\n removeLock();\n resolve(ret);\n })\n .catch(function (err) {\n removeLock();\n reject(err);\n });\n };\n\n try {\n if (localStorageSupported(storage, true)) {\n loop();\n } else {\n throw new Error('localStorage support check failed');\n }\n } catch(err) {\n reject(err);\n }\n }, this));\n};\n\nexport { SharedLock };\n","import { Promise } from '../promise-polyfill';\nimport { _, JSONParse, JSONStringify, getLocalStorage } from '../utils'; // eslint-disable-line camelcase\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar LocalStorageWrapper = function (storageOverride) {\n this.storage = storageOverride || getLocalStorage();\n};\n\nLocalStorageWrapper.prototype.init = function () {\n if (!this.storage) {\n return Promise.reject(new Error('localStorage is not available'));\n }\n return Promise.resolve();\n};\n\nLocalStorageWrapper.prototype.isInitialized = function () {\n return true;\n};\n\nLocalStorageWrapper.prototype.setItem = function (key, value) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.setItem(key, JSONStringify(value));\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nLocalStorageWrapper.prototype.getItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n var item;\n try {\n item = JSONParse(this.storage.getItem(key));\n } catch (e) {\n reject(e);\n }\n resolve(item);\n }, this));\n};\n\nLocalStorageWrapper.prototype.removeItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.removeItem(key);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nexport { LocalStorageWrapper };\n","import { SharedLock } from './shared-lock';\nimport { batchedThrottle, cheap_guid, console_with_prefix, localStorageSupported, _ } from './utils'; // eslint-disable-line camelcase\nimport { LocalStorageWrapper } from './storage/local-storage';\nimport { Promise } from './promise-polyfill';\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function (storageKey, options) {\n options = options || {};\n this.storageKey = storageKey;\n this.usePersistence = options.usePersistence;\n if (this.usePersistence) {\n this.queueStorage = options.queueStorage || new LocalStorageWrapper();\n this.lock = new SharedLock(storageKey, {\n storage: options.sharedLockStorage,\n timeoutMS: options.sharedLockTimeoutMS,\n });\n }\n this.reportError = options.errorReporter || _.bind(logger.error, logger);\n\n this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n this.memQueue = [];\n this.initialized = false;\n\n if (options.enqueueThrottleMs) {\n this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs);\n } else {\n this.enqueuePersisted = _.bind(function (queueEntry) {\n return this._enqueuePersisted([queueEntry]);\n }, this);\n }\n};\n\nRequestQueue.prototype.ensureInit = function () {\n if (this.initialized || !this.usePersistence) {\n return Promise.resolve();\n }\n\n return this.queueStorage\n .init()\n .then(_.bind(function () {\n this.initialized = true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error initializing queue persistence. Disabling persistence', err);\n this.initialized = true;\n this.usePersistence = false;\n }, this));\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function (item, flushInterval) {\n var queueEntry = {\n 'id': cheap_guid(),\n 'flushAfter': new Date().getTime() + flushInterval * 2,\n 'payload': item\n };\n\n if (!this.usePersistence) {\n this.memQueue.push(queueEntry);\n return Promise.resolve(true);\n } else {\n return this.enqueuePersisted(queueEntry);\n }\n};\n\nRequestQueue.prototype._enqueuePersisted = function (queueEntries) {\n var enqueueItem = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n return this.saveToStorage(storedQueue.concat(queueEntries));\n }, this))\n .then(_.bind(function (succeeded) {\n // only add to in-memory queue when storage succeeds\n if (succeeded) {\n this.memQueue = this.memQueue.concat(queueEntries);\n }\n\n return succeeded;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error enqueueing items', err, queueEntries);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(enqueueItem, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function (batchSize) {\n var batch = this.memQueue.slice(0, batchSize);\n if (this.usePersistence && batch.length < batchSize) {\n // don't need lock just to read events; localStorage is thread-safe\n // and the worst that could happen is a duplicate send of some\n // orphaned events, which will be deduplicated on the server side\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n if (storedQueue.length) {\n // item IDs already in batch; don't duplicate out of storage\n var idsInBatch = {}; // poor man's Set\n _.each(batch, function (item) {\n idsInBatch[item['id']] = true;\n });\n\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n item.orphaned = true;\n batch.push(item);\n if (batch.length >= batchSize) {\n break;\n }\n }\n }\n }\n\n return batch;\n }, this));\n } else {\n return Promise.resolve(batch);\n }\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function (items, idSet) {\n var filteredItems = [];\n _.each(items, function (item) {\n if (item['id'] && !idSet[item['id']]) {\n filteredItems.push(item);\n }\n });\n return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function (ids) {\n var idSet = {}; // poor man's Set\n _.each(ids, function (id) {\n idSet[id] = true;\n });\n\n this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n var removeFromStorage = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n // an extra check: did storage report success but somehow\n // the items are still there?\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (item['id'] && !!idSet[item['id']]) {\n throw new Error('Item not removed from storage');\n }\n }\n return true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error removing items', err, ids);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(removeFromStorage, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n if (!localStorageSupported(this.lock.storage, true)) {\n // Looks like localStorage writes have stopped working sometime after\n // initialization (probably full), and so nobody can acquire locks\n // anymore. Consider it temporarily safe to remove items without the\n // lock, since nobody's writing successfully anyway.\n return removeFromStorage()\n .then(_.bind(function (success) {\n if (!success) {\n // OK, we couldn't even write out the smaller queue. Try clearing it\n // entirely.\n return this.queueStorage.removeItem(this.storageKey).then(function () {\n return success;\n });\n }\n return success;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n return false;\n }, this));\n } else {\n return false;\n }\n }, this));\n }\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function (existingItems, itemsToUpdate) {\n var newItems = [];\n _.each(existingItems, function (item) {\n var id = item['id'];\n if (id in itemsToUpdate) {\n var newPayload = itemsToUpdate[id];\n if (newPayload !== null) {\n item['payload'] = newPayload;\n newItems.push(item);\n }\n } else {\n // no update\n newItems.push(item);\n }\n });\n return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function (itemsToUpdate) {\n this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n return this.lock\n .withLock(_.bind(function lockAcquired() {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n return this.saveToStorage(storedQueue);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error updating items', itemsToUpdate, err);\n return false;\n }, this));\n }, this), this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.getItem(this.storageKey);\n }, this))\n .then(_.bind(function (storageEntry) {\n if (storageEntry) {\n if (!_.isArray(storageEntry)) {\n this.reportError('Invalid storage entry:', storageEntry);\n storageEntry = null;\n }\n }\n return storageEntry || [];\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error retrieving queue', err);\n return [];\n }, this));\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function (queue) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.setItem(this.storageKey, queue);\n }, this))\n .then(function () {\n return true;\n })\n .catch(_.bind(function (err) {\n this.reportError('Error saving queue', err);\n return false;\n }, this));\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function () {\n this.memQueue = [];\n\n if (this.usePersistence) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.removeItem(this.storageKey);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n }, this));\n } else {\n return Promise.resolve();\n }\n};\n\nexport { RequestQueue };\n","import { Config } from './config';\nimport { Promise } from './promise-polyfill';\nimport { RequestQueue } from './request-queue';\nimport { console_with_prefix, isOnline, _ } from './utils'; // eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function(storageKey, options) {\n this.errorReporter = options.errorReporter;\n this.queue = new RequestQueue(storageKey, {\n errorReporter: _.bind(this.reportError, this),\n queueStorage: options.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n sharedLockTimeoutMS: options.sharedLockTimeoutMS,\n usePersistence: options.usePersistence,\n enqueueThrottleMs: options.enqueueThrottleMs\n });\n\n this.libConfig = options.libConfig;\n this.sendRequest = options.sendRequestFunc;\n this.beforeSendHook = options.beforeSendHook;\n this.stopAllBatching = options.stopAllBatchingFunc;\n\n // seed variable batch size + flush interval with configured values\n this.batchSize = this.libConfig['batch_size'];\n this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n\n this.stopped = !this.libConfig['batch_autostart'];\n this.consecutiveRemovalFailures = 0;\n\n // extra client-side dedupe\n this.itemIdsSentSuccessfully = {};\n\n // Make the flush occur at the interval specified by flushIntervalMs, default behavior will attempt consecutive flushes\n // as long as the queue is not empty. This is useful for high-frequency events like Session Replay where we might end up\n // in a request loop and get ratelimited by the server.\n this.flushOnlyOnInterval = options.flushOnlyOnInterval || false;\n\n this._flushPromise = null;\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function(item) {\n return this.queue.enqueue(item, this.flushInterval);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function() {\n this.stopped = false;\n this.consecutiveRemovalFailures = 0;\n return this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function() {\n this.stopped = true;\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n this.timeoutID = null;\n }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function() {\n return this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function() {\n this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function() {\n this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function(flushMS) {\n this.flushInterval = flushMS;\n if (!this.stopped) { // don't schedule anymore if batching has been stopped\n this.timeoutID = setTimeout(_.bind(function() {\n if (!this.stopped) {\n this._flushPromise = this.flush();\n }\n }, this), this.flushInterval);\n }\n};\n\n/**\n * Send a request using the sendRequest callback, but promisified.\n * TODO: sendRequest should be promisified in the first place.\n */\nRequestBatcher.prototype.sendRequestPromise = function(data, options) {\n return new Promise(_.bind(function(resolve) {\n this.sendRequest(data, options, resolve);\n }, this));\n};\n\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function(options) {\n if (this.requestInProgress) {\n logger.log('Flush: Request already in progress');\n return Promise.resolve();\n }\n\n this.requestInProgress = true;\n\n options = options || {};\n var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n var startTime = new Date().getTime();\n var currentBatchSize = this.batchSize;\n\n return this.queue.fillBatch(currentBatchSize)\n .then(_.bind(function(batch) {\n\n // if there's more items in the queue than the batch size, attempt\n // to flush again after the current batch is done.\n var attemptSecondaryFlush = batch.length === currentBatchSize;\n var dataForRequest = [];\n var transformedItems = {};\n _.each(batch, function(item) {\n var payload = item['payload'];\n if (this.beforeSendHook && !item.orphaned) {\n payload = this.beforeSendHook(payload);\n }\n if (payload) {\n // mp_sent_by_lib_version prop captures which lib version actually\n // sends each event (regardless of which version originally queued\n // it for sending)\n if (payload['event'] && payload['properties']) {\n payload['properties'] = _.extend(\n {},\n payload['properties'],\n {'mp_sent_by_lib_version': Config.LIB_VERSION}\n );\n }\n var addPayload = true;\n var itemId = item['id'];\n if (itemId) {\n if ((this.itemIdsSentSuccessfully[itemId] || 0) > 5) {\n this.reportError('[dupe] item ID sent too many times, not sending', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n addPayload = false;\n }\n } else {\n this.reportError('[dupe] found item with no ID', {item: item});\n }\n\n if (addPayload) {\n dataForRequest.push(payload);\n }\n }\n transformedItems[item['id']] = payload;\n }, this);\n\n if (dataForRequest.length < 1) {\n this.requestInProgress = false;\n this.resetFlush();\n return Promise.resolve(); // nothing to do\n }\n\n var removeItemsFromQueue = _.bind(function () {\n return this.queue\n .removeItemsByID(\n _.map(batch, function (item) {\n return item['id'];\n })\n )\n .then(_.bind(function (succeeded) {\n // client-side dedupe\n _.each(batch, _.bind(function(item) {\n var itemId = item['id'];\n if (itemId) {\n this.itemIdsSentSuccessfully[itemId] = this.itemIdsSentSuccessfully[itemId] || 0;\n this.itemIdsSentSuccessfully[itemId]++;\n if (this.itemIdsSentSuccessfully[itemId] > 5) {\n this.reportError('[dupe] item ID sent too many times', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n }\n } else {\n this.reportError('[dupe] found item with no ID while removing', {item: item});\n }\n }, this));\n\n if (succeeded) {\n this.consecutiveRemovalFailures = 0;\n if (this.flushOnlyOnInterval && !attemptSecondaryFlush) {\n this.resetFlush(); // schedule next batch with a delay\n return Promise.resolve();\n } else {\n return this.flush(); // handle next batch if the queue isn't empty\n }\n } else {\n if (++this.consecutiveRemovalFailures > 5) {\n this.reportError('Too many queue failures; disabling batching system.');\n this.stopAllBatching();\n } else {\n this.resetFlush();\n }\n return Promise.resolve();\n }\n }, this));\n }, this);\n\n var batchSendCallback = _.bind(function(res) {\n this.requestInProgress = false;\n\n try {\n\n // handle API response in a try-catch to make sure we can reset the\n // flush operation if something goes wrong\n\n if (options.unloading) {\n // update persisted data to include hook transformations\n return this.queue.updatePayloads(transformedItems);\n } else if (\n _.isObject(res) &&\n res.error === 'timeout' &&\n new Date().getTime() - startTime >= timeoutMS\n ) {\n this.reportError('Network timeout; retrying');\n return this.flush();\n } else if (\n _.isObject(res) &&\n (\n res.httpStatusCode >= 500\n || res.httpStatusCode === 429\n || (res.httpStatusCode <= 0 && !isOnline())\n || res.error === 'timeout'\n )\n ) {\n // network or API error, or 429 Too Many Requests, retry\n var retryMS = this.flushInterval * 2;\n if (res.retryAfter) {\n retryMS = (parseInt(res.retryAfter, 10) * 1000) || retryMS;\n }\n retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n this.reportError('Error; retry in ' + retryMS + ' ms');\n this.scheduleFlush(retryMS);\n return Promise.resolve();\n } else if (_.isObject(res) && res.httpStatusCode === 413) {\n // 413 Payload Too Large\n if (batch.length > 1) {\n var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n this.reportError('413 response; reducing batch size to ' + this.batchSize);\n this.resetFlush();\n return Promise.resolve();\n } else {\n this.reportError('Single-event request too large; dropping', batch);\n this.resetBatchSize();\n return removeItemsFromQueue();\n }\n } else {\n // successful network request+response; remove each item in batch from queue\n // (even if it was e.g. a 400, in which case retrying won't help)\n return removeItemsFromQueue();\n }\n } catch(err) {\n this.reportError('Error handling API response', err);\n this.resetFlush();\n }\n }, this);\n var requestOptions = {\n method: 'POST',\n verbose: true,\n ignore_json_errors: true, // eslint-disable-line camelcase\n timeout_ms: timeoutMS // eslint-disable-line camelcase\n };\n if (options.unloading) {\n requestOptions.transport = 'sendBeacon';\n }\n logger.log('MIXPANEL REQUEST:', dataForRequest);\n return this.sendRequestPromise(dataForRequest, requestOptions).then(batchSendCallback);\n }, this))\n .catch(_.bind(function(err) {\n this.reportError('Error flushing request queue', err);\n this.resetFlush();\n }, this));\n};\n\n/**\n * Log error to global logger and optional user-defined logger.\n */\nRequestBatcher.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n if (this.errorReporter) {\n try {\n if (!(err instanceof Error)) {\n err = new Error(msg);\n }\n this.errorReporter(msg, err);\n } catch(err) {\n logger.error(err);\n }\n }\n};\n\nexport { RequestBatcher };\n","import { _ } from '../utils';\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n * @returns {boolean}\n */\nvar isRecordingExpired = function(serializedRecording) {\n var now = Date.now();\n return !serializedRecording || now > serializedRecording['maxExpires'] || now > serializedRecording['idleExpires'];\n};\n\n\nvar RECORD_ENQUEUE_THROTTLE_MS = 250;\n\nvar validateAllowedOrigins = function(origins, logger) {\n if (!_.isArray(origins)) {\n if (origins) {\n logger.critical('record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled.');\n }\n return [];\n }\n var valid = [];\n for (var i = 0; i < origins.length; i++) {\n try {\n var origin = new URL(origins[i]).origin;\n if (origin === 'null') {\n logger.critical(origins[i] + ' has an opaque origin. Skipping this entry.');\n continue;\n }\n valid.push(origin);\n } catch (e) {\n logger.critical(origins[i] + ' is not a valid origin URL. Skipping this entry.');\n }\n }\n return valid;\n};\n\nexport {\n isRecordingExpired,\n RECORD_ENQUEUE_THROTTLE_MS,\n validateAllowedOrigins\n};\n","// stateless utils\n// mostly from https://github.com/mixpanel/mixpanel-js/blob/989ada50f518edab47b9c4fd9535f9fbd5ec5fc0/src/autotrack-utils.js\n\nimport { _, console_with_prefix, document, safewrap } from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\n\nvar EV_CHANGE = 'change';\nvar EV_CLICK = 'click';\nvar EV_HASHCHANGE = 'hashchange';\nvar EV_INPUT = 'input';\nvar EV_LOAD = 'load';\nvar EV_MP_LOCATION_CHANGE = 'mp_locationchange';\nvar EV_POPSTATE = 'popstate';\n// TODO scrollend isn't available in Safari: document or polyfill?\nvar EV_SCROLLEND = 'scrollend';\nvar EV_SCROLL = 'scroll';\nvar EV_SELECT = 'select';\nvar EV_SUBMIT = 'submit';\nvar EV_TOGGLE = 'toggle';\nvar EV_VISIBILITYCHANGE = 'visibilitychange';\n\nvar CLICK_EVENT_PROPS = [\n 'clientX', 'clientY',\n 'offsetX', 'offsetY',\n 'pageX', 'pageY',\n 'screenX', 'screenY',\n 'x', 'y'\n];\nvar OPT_IN_CLASSES = ['mp-include'];\nvar OPT_OUT_CLASSES = ['mp-no-track'];\nvar SENSITIVE_DATA_CLASSES = OPT_OUT_CLASSES.concat(['mp-sensitive']);\nvar TRACKED_ATTRS = [\n 'aria-label', 'aria-labelledby', 'aria-describedby',\n 'href', 'name', 'role', 'title', 'type'\n];\n\nvar INTERACTIVE_ARIA_ROLES = {\n 'button': true,\n 'checkbox': true,\n 'combobox': true,\n 'grid': true,\n 'link': true,\n 'listbox': true,\n 'menu': true,\n 'menubar': true,\n 'menuitem': true,\n 'menuitemcheckbox': true,\n 'menuitemradio': true,\n 'navigation': true,\n 'option': true,\n 'radio': true,\n 'radiogroup': true,\n 'searchbox': true,\n 'slider': true,\n 'spinbutton': true,\n 'switch': true,\n 'tab': true,\n 'tablist': true,\n 'textbox': true,\n 'tree': true,\n 'treegrid': true,\n 'treeitem': true\n};\n\nvar ALWAYS_NON_INTERACTIVE_TAGS = {\n // Document metadata\n 'base': true,\n 'head': true,\n 'html': true,\n 'link': true,\n 'meta': true,\n 'script': true,\n 'style': true,\n 'title': true,\n // Text formatting\n 'br': true,\n 'hr': true,\n 'wbr': true,\n // Other\n 'noscript': true,\n 'picture': true,\n 'source': true,\n 'template': true,\n 'track': true\n};\n\n// Common container tags that need additional checks\nvar TEXT_CONTAINER_TAGS = {\n 'article': true,\n 'div': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'p': true,\n 'section': true,\n 'span': true\n};\n\nvar EVENT_HANDLER_ATTRIBUTES = [\n 'onclick', 'onmousedown', 'onmouseup', 'onpointerdown', 'onpointerup', 'ontouchend', 'ontouchstart'\n];\n\nvar MAX_DEPTH = 5;\n\nvar logger = console_with_prefix('autocapture');\n\n\nfunction getClasses(el) {\n var classes = {};\n var classList = getClassName(el).split(' ');\n for (var i = 0; i < classList.length; i++) {\n var cls = classList[i];\n if (cls) {\n classes[cls] = true;\n }\n }\n return classes;\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n * @param {Element} el - element to get the className of\n * @returns {string} the element's class\n */\nfunction getClassName(el) {\n switch(typeof el.className) {\n case 'string':\n return el.className;\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n return el.className.baseVal || el.getAttribute('class') || '';\n default: // future proof\n return '';\n }\n}\n\nfunction getPreviousElementSibling(el) {\n if (el.previousElementSibling) {\n return el.previousElementSibling;\n } else {\n do {\n el = el.previousSibling;\n } while (el && !isElementNode(el));\n return el;\n }\n}\n\nfunction getPropertiesFromElement(el, ev, blockAttrsSet, extraAttrs, allowElementCallback, allowSelectors) {\n var props = {\n '$classes': getClassName(el).split(' '),\n '$tag_name': el.tagName.toLowerCase()\n };\n var elId = el.id;\n if (elId) {\n props['$id'] = elId;\n }\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors)) {\n _.each(TRACKED_ATTRS.concat(extraAttrs), function(attr) {\n if (el.hasAttribute(attr) && !blockAttrsSet[attr]) {\n var attrVal = el.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$attr-' + attr] = attrVal;\n }\n }\n });\n }\n\n var nthChild = 1;\n var nthOfType = 1;\n var currentElem = el;\n while (currentElem = getPreviousElementSibling(currentElem)) { // eslint-disable-line no-cond-assign\n nthChild++;\n if (currentElem.tagName === el.tagName) {\n nthOfType++;\n }\n }\n props['$nth_child'] = nthChild;\n props['$nth_of_type'] = nthOfType;\n\n return props;\n}\n\nfunction getPropsForDOMEvent(ev, config) {\n var allowElementCallback = config.allowElementCallback;\n var allowSelectors = config.allowSelectors || [];\n var blockAttrs = config.blockAttrs || [];\n var blockElementCallback = config.blockElementCallback;\n var blockSelectors = config.blockSelectors || [];\n var captureTextContent = config.captureTextContent || false;\n var captureExtraAttrs = config.captureExtraAttrs || [];\n var capturedForHeatMap = config.capturedForHeatMap || false;\n\n // convert array to set every time, as the config may have changed\n var blockAttrsSet = {};\n _.each(blockAttrs, function(attr) {\n blockAttrsSet[attr] = true;\n });\n\n var props = null;\n\n var target = typeof ev.target === 'undefined' ? ev.srcElement : ev.target;\n if (isTextNode(target)) { // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = target.parentNode;\n }\n\n if (\n shouldTrackDomEvent(target, ev) &&\n isElementAllowed(target, ev, allowElementCallback, allowSelectors) &&\n !isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n var targetElementList = [target];\n var curEl = target;\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n targetElementList.push(curEl.parentNode);\n curEl = curEl.parentNode;\n }\n\n var elementsJson = [];\n var href, explicitNoTrack = false;\n _.each(targetElementList, function(el) {\n var shouldTrackDetails = shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors);\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (!blockAttrsSet['href'] && el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href');\n href = shouldTrackDetails && shouldTrackValue(href) && href;\n }\n\n if (isElementBlocked(el, ev, blockElementCallback, blockSelectors)) {\n explicitNoTrack = true;\n }\n\n elementsJson.push(getPropertiesFromElement(el, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors));\n }, this);\n\n if (!explicitNoTrack) {\n var docElement = document['documentElement'];\n props = {\n '$event_type': ev.type,\n '$host': window.location.host,\n '$pathname': window.location.pathname,\n '$elements': elementsJson,\n '$el_attr__href': href,\n '$viewportHeight': Math.max(docElement['clientHeight'], window['innerHeight'] || 0),\n '$viewportWidth': Math.max(docElement['clientWidth'], window['innerWidth'] || 0),\n '$pageHeight': document['body']['offsetHeight'] || 0,\n '$pageWidth': document['body']['offsetWidth'] || 0,\n };\n _.each(captureExtraAttrs, function(attr) {\n if (!blockAttrsSet[attr] && target.hasAttribute(attr)) {\n var attrVal = target.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$el_attr__' + attr] = attrVal;\n }\n }\n });\n\n if (captureTextContent) {\n elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (ev.type === EV_CLICK) {\n _.each(CLICK_EVENT_PROPS, function(prop) {\n if (prop in ev) {\n props['$' + prop] = ev[prop];\n }\n });\n if (capturedForHeatMap) {\n props['$captured_for_heatmap'] = true;\n }\n target = guessRealClickTarget(ev);\n }\n // prioritize text content from \"real\" click target if different from original target\n if (captureTextContent) {\n var elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (target) {\n // target may have been recalculated; check allowlists and blocklists again\n if (\n !isElementAllowed(target, ev, allowElementCallback, allowSelectors) ||\n isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n return null;\n }\n\n var targetProps = getPropertiesFromElement(target, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors);\n props['$target'] = targetProps;\n // pull up more props onto main event props\n props['$el_classes'] = targetProps['$classes'];\n _.extend(props, _.strip_empty_properties({\n '$el_id': targetProps['$id'],\n '$el_tag_name': targetProps['$tag_name']\n }));\n }\n }\n }\n\n return props;\n}\n\n\n/**\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {string} the element's direct text content\n */\nfunction getSafeText(el, ev, allowElementCallback, allowSelectors) {\n var elText = '';\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) && el.childNodes && el.childNodes.length) {\n _.each(el.childNodes, function(child) {\n if (isTextNode(child) && child.textContent) {\n elText += child.textContent.trim()\n // scrub potentially sensitive values\n .split(/(\\s+)/).filter(shouldTrackValue).join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ').replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255);\n }\n });\n }\n\n return elText.trim();\n}\n\nfunction guessRealClickTarget(ev) {\n var target = ev.target;\n var composedPath = ev['composedPath']();\n for (var i = 0; i < composedPath.length; i++) {\n var node = composedPath[i];\n if (\n isTag(node, 'a') ||\n isTag(node, 'button') ||\n isTag(node, 'input') ||\n isTag(node, 'select') ||\n (node.getAttribute && node.getAttribute('role') === 'button')\n ) {\n target = node;\n break;\n }\n if (node === target) {\n break;\n }\n }\n return target;\n}\n\nfunction isElementAllowed(el, ev, allowElementCallback, allowSelectors) {\n if (allowElementCallback) {\n try {\n if (!allowElementCallback(el, ev)) {\n return false;\n }\n } catch (err) {\n logger.critical('Error while checking element in allowElementCallback', err);\n return false;\n }\n }\n\n if (!allowSelectors.length) {\n // no allowlist; all elements are fair game\n return true;\n }\n\n for (var i = 0; i < allowSelectors.length; i++) {\n var sel = allowSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n return false;\n}\n\nfunction isElementBlocked(el, ev, blockElementCallback, blockSelectors) {\n var i;\n\n if (blockElementCallback) {\n try {\n if (blockElementCallback(el, ev)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking element in blockElementCallback', err);\n return true;\n }\n }\n\n if (blockSelectors && blockSelectors.length) {\n // programmatically prevent tracking of elements that match CSS selectors\n for (i = 0; i < blockSelectors.length; i++) {\n var sel = blockSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n }\n\n // allow users to programmatically prevent tracking of elements by adding default classes such as 'mp-no-track'\n var classes = getClasses(el);\n for (i = 0; i < OPT_OUT_CLASSES.length; i++) {\n if (classes[OPT_OUT_CLASSES[i]]) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM node has nodeType Node.ELEMENT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of the correct nodeType\n */\nfunction isElementNode(node) {\n return node && node.nodeType === 1; // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nfunction isTag(el, tag) {\n return el && el.tagName && el.tagName.toLowerCase() === tag.toLowerCase();\n}\n\n/*\n * Check whether a DOM node is a TEXT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of type Node.TEXT_NODE\n */\nfunction isTextNode(node) {\n return node && node.nodeType === 3; // Node.TEXT_NODE - use integer constant for browser portability\n}\n\nfunction minDOMApisSupported() {\n try {\n var testEl = document.createElement('div');\n return !!testEl['matches'];\n } catch (err) {\n return false;\n }\n}\n\nfunction weakSetSupported() {\n return typeof WeakSet !== 'undefined';\n}\n\n/*\n * Check whether a DOM event should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} ev - event to check\n * @returns {boolean} whether the event should be tracked\n */\nfunction shouldTrackDomEvent(el, ev) {\n if (!el || isTag(el, 'html') || !isElementNode(el)) {\n return false;\n }\n var tag = el.tagName.toLowerCase();\n switch (tag) {\n case 'form':\n return ev.type === EV_SUBMIT;\n case 'input':\n if (['button', 'submit'].indexOf(el.getAttribute('type')) === -1) {\n return ev.type === EV_CHANGE;\n } else {\n return ev.type === EV_CLICK;\n }\n case 'select':\n case 'textarea':\n return ev.type === EV_CHANGE;\n default:\n return ev.type === EV_CLICK;\n }\n}\n\nfunction elementLooksSensitive(el) {\n var name = (el.name || el.id || '').toString().toLowerCase();\n if (typeof name === 'string') { // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n var sensitiveNameRegex = /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i;\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM element should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) {\n var i;\n\n if (!isElementAllowed(el, ev, allowElementCallback, allowSelectors)) {\n return false;\n }\n\n for (var curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode) {\n var classes = getClasses(curEl);\n for (i = 0; i < SENSITIVE_DATA_CLASSES.length; i++) {\n if (classes[SENSITIVE_DATA_CLASSES[i]]) {\n return false;\n }\n }\n }\n\n var elClasses = getClasses(el);\n for (i = 0; i < OPT_IN_CLASSES.length; i++) {\n if (elClasses[OPT_IN_CLASSES[i]]) {\n return true;\n }\n }\n\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n if (\n isTag(el, 'input') ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return false;\n }\n\n // don't include hidden or password fields\n var type = el.type || '';\n if (typeof type === 'string') { // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch(type.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n if (elementLooksSensitive(el)) {\n return false;\n }\n\n return true;\n}\n\n\n/*\n * Check whether a string value should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackValue(value) {\n if (value === null || _.isUndefined(value)) {\n return false;\n }\n\n if (typeof value === 'string') {\n value = value.trim();\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n var ccRegex = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false;\n }\n\n // check to see if input value looks like a social security number\n var ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(value)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Creates a cross-browser compatible scroll end function with appropriate event listener.\n * For browsers that support scrollend, returns the original function with scrollend event.\n * For browsers without scrollend support, returns a debounced function that triggers\n * 100ms after the last scroll event to simulate scrollend behavior.\n * @param {Function} originalFunction - The function to call when scrolling ends\n * @returns {Object} Object containing listener function and eventType string\n * @returns {Function} returns.listener - The wrapped function to use as event listener\n * @returns {string} returns.eventType - The event type to listen for ('scrollend' or 'scroll')\n */\nfunction getPolyfillScrollEndFunction(originalFunction) {\n var supportsScrollEnd = 'onscrollend' in window;\n var polyfillFunction = safewrap(originalFunction);\n var polyfillEvent = EV_SCROLLEND;\n if (!supportsScrollEnd) {\n // Polyfill for browsers without scrollend support: wait 100ms after the last scroll event\n // https://developer.chrome.com/blog/scrollend-a-new-javascript-event\n var scrollTimer = null;\n var scrollDelayMs = 100;\n\n polyfillFunction = safewrap(function() {\n clearTimeout(scrollTimer);\n scrollTimer = setTimeout(originalFunction, scrollDelayMs);\n });\n\n polyfillEvent = EV_SCROLL;\n }\n\n return {\n listener: polyfillFunction,\n eventType: polyfillEvent\n };\n}\n\nfunction hasInlineEventHandlers(element) {\n for (var i = 0; i < EVENT_HANDLER_ATTRIBUTES.length; i++) {\n if (element.hasAttribute(EVENT_HANDLER_ATTRIBUTES[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction hasInteractiveAriaRole(element) {\n var role = element.getAttribute('role');\n if (!role) return false;\n\n // Handle invalid markup where multiple roles might be specified\n // Only the first token is recognized per ARIA spec\n var primaryRole = role.trim().split(/\\s+/)[0].toLowerCase();\n\n return INTERACTIVE_ARIA_ROLES[primaryRole];\n}\n\nfunction hasAnyInteractivityIndicators(element) {\n var tagName = element.tagName.toLowerCase();\n\n // Check for interactive HTML elements\n if (tagName === 'button' ||\n tagName === 'input' ||\n tagName === 'select' ||\n tagName === 'textarea' ||\n tagName === 'details' ||\n tagName === 'dialog') {\n return true;\n }\n\n if (element.isContentEditable) {\n return true;\n }\n\n if (element.onclick || element.onmousedown || element.onmouseup || element.ontouchstart || element.ontouchend) {\n return true;\n }\n\n if (hasInlineEventHandlers(element)) {\n return true;\n }\n\n if (hasInteractiveAriaRole(element)) {\n return true;\n }\n\n if (tagName === 'a' && element.hasAttribute('href')) {\n return true;\n }\n\n if (element.hasAttribute('tabindex')) {\n return true;\n }\n\n return false;\n}\n\n\nfunction isDefinitelyNonInteractive(element) {\n if (!element || !element.tagName) {\n return true;\n }\n\n var tagName = element.tagName.toLowerCase();\n\n // These tags are definitely non-interactive\n if (ALWAYS_NON_INTERACTIVE_TAGS[tagName]) {\n return true;\n }\n\n // For all other elements, we can only be certain they're non-interactive if they lack ALL indicators of interactivity\n // Check for any signs of interactivity\n if (hasAnyInteractivityIndicators(element)) {\n return false;\n }\n\n // Check parent chain for interactive context\n var parent = element.parentElement;\n var depth = 0;\n\n while (parent && depth < MAX_DEPTH) {\n if (hasAnyInteractivityIndicators(parent)) {\n return false; // Element is inside an interactive parent\n }\n\n if (parent.getRootNode && parent.getRootNode() !== document) {\n var root = parent.getRootNode();\n if (root.host && hasAnyInteractivityIndicators(root.host)) {\n return false; // Inside an interactive shadow host\n }\n }\n\n parent = parent.parentElement;\n depth++;\n }\n\n // Pure text containers without any interactive context\n if (TEXT_CONTAINER_TAGS[tagName]) {\n // These are non-interactive ONLY if they have no interactive indicators (already checked as part of hasAnyInteractivityIndicators)\n return true;\n }\n\n // Default: we can't be certain it's non-interactive\n return false;\n}\n\n/**\n * Get the composed path of a click event for elements embedded in shadow DOM.\n * @param {Event} event - event to get the composed path from\n * @returns {Array} the composed path of the click event\n*/\nfunction getClickEventComposedPath(event) {\n if ('composedPath' in event) {\n return event['composedPath']();\n }\n\n return [];\n}\n\n/**\n * Get the element from a click event, accounting for elements embedded in shadow DOM.\n * @param {Event} event - event to get the target from\n * @returns {Element | null} the element that was the target of the click event\n */\nfunction getClickEventTargetElement(event) {\n var path = getClickEventComposedPath(event);\n\n if (path && path.length > 0) {\n return path[0];\n }\n\n return event['target'] || event['srcElement'];\n}\n\nexport {\n EV_CHANGE, EV_CLICK, EV_HASHCHANGE, EV_INPUT, EV_LOAD,EV_MP_LOCATION_CHANGE, EV_POPSTATE,\n EV_SCROLL, EV_SCROLLEND, EV_SELECT, EV_SUBMIT, EV_TOGGLE, EV_VISIBILITYCHANGE,\n elementLooksSensitive,\n getClickEventComposedPath,\n getClickEventTargetElement,\n getPolyfillScrollEndFunction,\n getPropsForDOMEvent,\n getSafeText,\n isDefinitelyNonInteractive,\n logger,\n minDOMApisSupported,\n shouldTrackDomEvent, shouldTrackElementDetails, shouldTrackValue,\n weakSetSupported\n};\n","/**\n * @typedef {Object} MaskingConfig\n * @property {string} maskingSelector - Combined CSS selector string to mask\n * @property {string} unmaskingSelector - Combined CSS selector string to unmask\n * @property {boolean} maskAll - Whether to mask all by default\n * @property {RegExp} [_legacyClassRegex] - Legacy class regex for backwards compatibility\n */\n\n/**\n * @typedef {Object} PrivacyConfig\n * @property {MaskingConfig} input - Input masking configuration\n * @property {MaskingConfig} text - Text masking configuration\n */\n\nimport { classMatchesRegex } from './rrweb-entrypoint';\nimport { elementLooksSensitive } from '../autocapture/utils';\n\nvar COMMON_MASK_CLASSES_SELECTOR = '.mp-mask, .fs-mask, .amp-mask, .rr-mask, .ph-mask';\nvar RRWEB_PASSWORD_ATTRIBUTE = 'data-rr-is-password';\nvar ALWAYS_MASKED_INPUT_TYPES = ['password', 'email', 'tel', 'hidden'];\n\n/**\n * Normalizes a selector value to an array of selectors\n * @param {string|string[]|undefined} selector\n * @returns {string[]}\n */\nfunction normalizeSelectors(selector) {\n if (!selector) {\n return [];\n }\n if (Array.isArray(selector)) {\n return selector;\n }\n return [selector];\n}\n\n/**\n * Reads flat config options and normalizes them into internal privacy config structure\n * @param {Object} mixpanelInstance\n * @returns {PrivacyConfig} privacyConfig\n */\nfunction getPrivacyConfig(mixpanelInstance) {\n var privacyConfig = {\n input: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n },\n text: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n }\n };\n\n // Input related config\n var maskInputSelector = mixpanelInstance.get_config('record_mask_input_selector');\n var unmaskInputSelector = mixpanelInstance.get_config('record_unmask_input_selector');\n var maskAllInputs = mixpanelInstance.get_config('record_mask_all_inputs');\n\n privacyConfig.input.maskingSelector = normalizeSelectors(maskInputSelector).join(',');\n privacyConfig.input.unmaskingSelector = normalizeSelectors(unmaskInputSelector).join(',');\n if (maskAllInputs !== undefined) {\n privacyConfig.input.maskAll = maskAllInputs;\n }\n\n // Text related config\n var maskTextSelector = mixpanelInstance.get_config('record_mask_text_selector');\n var unmaskTextSelector = mixpanelInstance.get_config('record_unmask_text_selector');\n var maskAllText = mixpanelInstance.get_config('record_mask_all_text');\n var legacyMaskTextClass = mixpanelInstance.get_config('record_mask_text_class');\n\n var textMaskingSelectors = normalizeSelectors(maskTextSelector);\n\n // Handle legacy record_mask_text_class\n if (legacyMaskTextClass) {\n if (legacyMaskTextClass instanceof RegExp) {\n // For RegExp classes, we'll need to handle this differently in the shouldMaskText function\n privacyConfig.text._legacyClassRegex = legacyMaskTextClass;\n } else {\n // String class name - convert to selector\n var classSelector = '.' + legacyMaskTextClass;\n if (textMaskingSelectors.indexOf(classSelector) === -1) {\n textMaskingSelectors.push(classSelector);\n }\n }\n }\n\n privacyConfig.text.maskingSelector = textMaskingSelectors.join(',');\n privacyConfig.text.unmaskingSelector = normalizeSelectors(unmaskTextSelector).join(',');\n\n // Migrate old config: if only record_mask_text_selector is specified, set maskAll to false\n // preserves behavior where the masking selector defaulted to \"*\"\n if (maskAllText === undefined && maskTextSelector !== undefined) {\n privacyConfig.text.maskAll = false;\n } else if (maskAllText !== undefined) {\n privacyConfig.text.maskAll = maskAllText;\n }\n\n return privacyConfig;\n}\n\n/**\n * Checks if element matches a combined CSS selector\n * @param {HTMLElement} element\n * @param {string} selector - Combined CSS selector (comma-separated)\n * @returns {boolean}\n */\nfunction elementMatchesSelector(element, selector) {\n if (!selector) {\n return false;\n }\n return !!element.closest(selector);\n}\n\n/**\n * Determines if an input should be masked based on privacy config\n * @param {HTMLElement} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskInput(element, privacyConfig) {\n var inputType = (element.getAttribute('type') || '').toLowerCase();\n if (ALWAYS_MASKED_INPUT_TYPES.indexOf(inputType) !== -1) {\n return true;\n }\n\n var autocomplete = (element.getAttribute('autocomplete') || '').toLowerCase();\n if (autocomplete && autocomplete !== '' && autocomplete !== 'off') {\n return true;\n }\n\n if (element.hasAttribute(RRWEB_PASSWORD_ATTRIBUTE)) {\n return true;\n }\n\n if (elementLooksSensitive(element)) {\n return true;\n }\n\n if (privacyConfig.input.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.input.unmaskingSelector)) {\n return false;\n }\n\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.input.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\n/**\n * Determines if text should be masked based on privacy config\n * @param {HTMLElement|null} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskText(element, privacyConfig) {\n if (!element) {\n return false;\n }\n\n // Check legacy class regex if present (for backwards compatibility)\n if (privacyConfig.text._legacyClassRegex) {\n if (classMatchesRegex(element, privacyConfig.text._legacyClassRegex, true)) {\n return true;\n }\n }\n\n if (privacyConfig.text.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.text.unmaskingSelector)) {\n return false;\n }\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.text.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\nexport {\n COMMON_MASK_CLASSES_SELECTOR,\n getPrivacyConfig,\n shouldMaskInput,\n shouldMaskText\n};\n","/**\n * This is a port of the open rrweb network plugin in this PR https://github.com/rrweb-io/rrweb/pull/1105\n * the hope is that eventually this can be replaced with the official plugin once it's published (and we sync the mixpanel rrweb fork)\n *\n * This plugin incorporates some important fixes for fetch/XHR body recording that are not yet in the main rrweb repo, as well as makes\n * header and body recording more restrictive by requiring an allowlist instead of content type / blocklist.\n *\n */\nimport { urlMatchesRegexList, console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('network-plugin');\n\n/**\n * Get the time origin for converting performance timestamps to absolute timestamps.\n * Uses Date.now() - performance.now() instead of performance.timeOrigin because\n * browsers can report timeOrigin values that are skewed from actual time, and some\n * browsers (notably older Safari versions) don't implement timeOrigin at all.\n * See: https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L49-L70\n * @param {Window} win\n * @returns {number}\n */\nfunction getTimeOrigin(win) {\n return Math.round(Date.now() - win.performance.now());\n}\n\n/**\n * @typedef {import('../index.d.ts').InitiatorType} InitiatorType\n * @typedef {import('../index.d.ts').NetworkRequest} NetworkRequest\n * @typedef {import('../index.d.ts').NetworkRecordOptions} NetworkRecordOptions\n * @typedef {import('../index.d.ts').NetworkData} NetworkData\n */\n\n/**\n * @typedef {Record} Headers\n */\n\n/**\n * @typedef {string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream | null} Body\n */\n\n/**\n * @callback networkCallback\n * @param {NetworkData} data\n * @returns {void}\n */\n\n/**\n * @callback listenerHandler\n * @returns {void}\n */\n\n/**\n * @typedef {(PerformanceNavigationTiming | PerformanceResourceTiming) & { responseStatus?: number }} ObservedPerformanceEntry\n */\n\n/**\n * @typedef {Object} RecordPlugin\n * @property {string} name\n * @property {(callback: networkCallback, win: Window, options: NetworkRecordOptions) => listenerHandler} observer\n * @property {NetworkRecordOptions} [options]\n */\n\n/** @type {Required} */\nvar defaultNetworkOptions = {\n initiatorTypes: [\n 'audio',\n 'beacon',\n 'body',\n 'css',\n 'early-hint',\n 'embed',\n 'fetch',\n 'frame',\n 'iframe',\n 'icon',\n 'image',\n 'img',\n 'input',\n 'link',\n 'navigation',\n 'object',\n 'ping',\n 'script',\n 'track',\n 'video',\n 'xmlhttprequest',\n ],\n ignoreRequestFn: function() { return false; },\n recordHeaders: {\n request: [],\n response: [],\n },\n recordBodyUrls: {\n request: [],\n response: [],\n },\n recordInitialRequests: false,\n};\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceNavigationTiming}\n */\nfunction isNavigationTiming(entry) {\n return entry.entryType === 'navigation';\n}\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceResourceTiming}\n */\nfunction isResourceTiming (entry) {\n return entry.entryType === 'resource';\n}\n\nexport function findLast(array, predicate) {\n var length = array.length;\n for (var i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i];\n }\n }\n}\n\n/**\n * Monkey-patches a method on an object with a wrapped version, returning a function that restores the original.\n * Adapted from Sentry's `fill` utility:\n * https://github.com/getsentry/sentry-javascript/blob/de5c5cbe177b4334386e747857225eec36a91ea1/packages/core/src/utils/object.ts#L67-L95\n *\n * @param {object} source - The object containing the method to patch\n * @param {string} name - The method name to patch\n * @param {function} replacementFactory - A function that receives the original method and returns the replacement\n * @returns {function} A function that restores the original method\n */\nexport function patch(source, name, replacementFactory) {\n if (!(name in source) || typeof source[name] !== 'function') {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacementFactory(original);\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n}\n\n\n/**\n * Maximum body size to record (1MB)\n */\nvar MAX_BODY_SIZE = 1024 * 1024;\n\n/**\n * Truncate string if it exceeds max size\n * @param {string} str\n * @returns {string}\n */\nexport function truncateBody(str) {\n if (!str || typeof str !== 'string') {\n return str;\n }\n if (str.length > MAX_BODY_SIZE) {\n logger.error('Body truncated from ' + str.length + ' to ' + MAX_BODY_SIZE + ' characters');\n return str.substring(0, MAX_BODY_SIZE) + '... [truncated]';\n }\n return str;\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initPerformanceObserver(cb, win, options) {\n if (!win.PerformanceObserver) {\n logger.error('PerformanceObserver not supported');\n return function() {\n //\n };\n }\n if (options.recordInitialRequests) {\n var initialPerformanceEntries = win.performance\n .getEntries()\n .filter(function(entry) {\n return isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType));\n });\n cb({\n requests: initialPerformanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n isInitial: true,\n });\n }\n var observer = new win.PerformanceObserver(function(entries) {\n var performanceEntries = entries\n .getEntries()\n .filter(function(entry) {\n return isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType) &&\n entry.initiatorType !== 'xmlhttprequest' &&\n entry.initiatorType !== 'fetch';\n });\n cb({\n requests: performanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n });\n });\n observer.observe({ entryTypes: ['navigation', 'resource'] });\n return function() {\n observer.disconnect();\n };\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for headers instead of supporting boolean options\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordHeaders']} recordHeaders\n * @param {string} headerName\n * @returns {boolean}\n */\nexport function shouldRecordHeader(type, recordHeaders, headerName) {\n if (!recordHeaders[type] || recordHeaders[type].length === 0) {\n return false;\n }\n\n return recordHeaders[type].includes(headerName.toLowerCase());\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for URLs instead of supporting boolean options or by content type\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordBodyUrls']} recordBodyUrls\n * @param {string} url\n * @returns {boolean}\n */\nexport function shouldRecordBody(type, recordBodyUrls, url) {\n if (!recordBodyUrls[type] || recordBodyUrls[type].length === 0) {\n return false;\n }\n\n return urlMatchesRegexList(url, recordBodyUrls[type]);\n}\n\nfunction tryReadXHRBody(body) {\n if (body === null || body === undefined) {\n return null;\n }\n\n var result;\n if (typeof body === 'string') {\n result = body;\n } else if (body instanceof Document) {\n result = body.textContent;\n } else if (body instanceof FormData) {\n result = _.HTTPBuildQuery(body);\n } else if (_.isObject(body)) {\n try {\n result = JSON.stringify(body);\n } catch (e) {\n return 'Failed to stringify response object';\n }\n } else {\n return 'Cannot read body of type ' + typeof body;\n }\n\n return truncateBody(result);\n}\n\n/**\n * @param {Request | Response} r\n * @returns {Promise}\n */\nfunction tryReadFetchBody(r) {\n return new Promise(function(resolve) {\n var timeout = setTimeout(function() {\n resolve('Timeout while trying to read body');\n }, 500);\n try {\n r.clone()\n .text()\n .then(\n function(txt) {\n clearTimeout(timeout);\n resolve(truncateBody(txt));\n },\n function(reason) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(reason));\n }\n );\n } catch (e) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(e));\n }\n });\n}\n\n/**\n * @param {Window} win\n * @param {string} initiatorType\n * @param {string} url\n * @param {number} [after]\n * @param {number} [before]\n * @param {number} [attempt]\n * @returns {Promise}\n */\nfunction getRequestPerformanceEntry(win, initiatorType, url, after, before, attempt) {\n if (attempt === undefined) {\n attempt = 0;\n }\n if (attempt > 10) {\n logger.error('Cannot find performance entry');\n return Promise.resolve(null);\n }\n var urlPerformanceEntries = /** @type {PerformanceResourceTiming[]} */ (\n win.performance.getEntriesByName(url)\n );\n var performanceEntry = findLast(\n urlPerformanceEntries,\n function(entry) {\n return isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (!after || entry.startTime >= after) &&\n (!before || entry.startTime <= before);\n }\n );\n if (!performanceEntry) {\n return new Promise(function(resolve) {\n setTimeout(resolve, 50 * attempt);\n }).then(function() {\n return getRequestPerformanceEntry(\n win,\n initiatorType,\n url,\n after,\n before,\n attempt + 1\n );\n });\n }\n return Promise.resolve(performanceEntry);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initXhrObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return function() {\n //\n };\n }\n var restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n function(/** @type {typeof XMLHttpRequest.prototype.open} */ originalOpen) {\n return function(\n /** @type {string} */ method,\n /** @type {string | URL} */ url,\n /** @type {boolean} */ async,\n username, password\n ) {\n if (async === undefined) {\n async = true;\n }\n var xhr = /** @type {XMLHttpRequest} */ (this);\n var req = new Request(url, { method: method });\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n /** @type {Headers} */\n var requestHeaders = {};\n var originalSetRequestHeader = xhr.setRequestHeader.bind(xhr);\n xhr.setRequestHeader = function(/** @type {string} */ header, /** @type {string} */ value) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n return originalSetRequestHeader(header, value);\n };\n networkRequest.requestHeaders = requestHeaders;\n\n var originalSend = xhr.send.bind(xhr);\n xhr.send = function(/** @type {Body} */ body) {\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n networkRequest.requestBody = tryReadXHRBody(body);\n }\n after = win.performance.now();\n return originalSend(body);\n };\n xhr.addEventListener('readystatechange', function() {\n if (xhr.readyState !== xhr.DONE) {\n return;\n }\n before = win.performance.now();\n /** @type {Headers} */\n var responseHeaders = {};\n var rawHeaders = xhr.getAllResponseHeaders();\n if (rawHeaders) {\n var headers = rawHeaders.trim().split(/[\\r\\n]+/);\n headers.forEach(function(line) {\n if (!line) return;\n var colonIndex = line.indexOf(': ');\n if (colonIndex === -1) return;\n var header = line.substring(0, colonIndex);\n var value = line.substring(colonIndex + 2);\n if (header && shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n }\n networkRequest.responseHeaders = responseHeaders;\n if (\n shouldRecordBody('response', options.recordBodyUrls, req.url)\n ) {\n networkRequest.responseBody = tryReadXHRBody(xhr.response);\n }\n getRequestPerformanceEntry(\n win,\n 'xmlhttprequest',\n req.url,\n after,\n before\n )\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for XHR request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: xhr.status,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function(e) {\n logger.error('Error recording XHR request to ' + req.url + ': ' + String(e));\n });\n });\n\n originalOpen.call(xhr, method, url, async, username, password);\n };\n }\n );\n return function() {\n restorePatch();\n };\n}\n\n/**\n * Build the Request used to inspect an outgoing fetch call.\n *\n * Constructing a Request from another Request marks the source's body as used, which makes\n * the caller's own fetch fail with \"Cannot construct a Request with a Request object that has\n * already been used\". Clone Request inputs first so the object the caller passed stays intact.\n *\n * @param {RequestInfo | URL} input\n * @param {RequestInit} [init]\n * @returns {Request}\n */\nexport function buildRecordedRequest(input, init) {\n if (typeof Request !== 'undefined' && input instanceof Request) {\n var cloned = input.clone();\n return init ? new Request(cloned, init) : cloned;\n }\n return new Request(input, init);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nexport function initFetchObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('fetch')) {\n return function() {\n //\n };\n }\n\n var restorePatch = patch(win, 'fetch', function(/** @type {typeof fetch} */ originalFetch) {\n return function() {\n var req = buildRecordedRequest(arguments[0], arguments[1]);\n /** @type {Response | undefined} */\n var res;\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n var originalFetchPromise;\n var requestBodyPromise = Promise.resolve(undefined);\n var responseBodyResolve;\n var responseBodyPromise = new Promise(function(resolve) {\n responseBodyResolve = resolve;\n });\n try {\n /** @type {Headers} */\n var requestHeaders = {};\n req.headers.forEach(function(value, header) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n });\n networkRequest.requestHeaders = requestHeaders;\n\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n requestBodyPromise = tryReadFetchBody(req)\n .then(function(body) {\n networkRequest.requestBody = body;\n });\n }\n\n after = win.performance.now();\n originalFetchPromise = originalFetch.apply(win, arguments).then(function(response) {\n res = response;\n before = win.performance.now();\n\n /** @type {Headers} */\n var responseHeaders = {};\n res.headers.forEach(function(value, header) {\n if (shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n networkRequest.responseHeaders = responseHeaders;\n\n if (shouldRecordBody('response', options.recordBodyUrls, req.url)) {\n tryReadFetchBody(res).then(function(body) {\n networkRequest.responseBody = body;\n responseBodyResolve();\n });\n } else {\n responseBodyResolve();\n }\n\n return res;\n });\n } catch (e) {\n originalFetchPromise = Promise.reject(e);\n }\n\n // await concurrently so we don't delay the fetch response\n Promise.all([requestBodyPromise, responseBodyPromise, originalFetchPromise])\n .then(function () {\n return getRequestPerformanceEntry(win, 'fetch', req.url, after, before);\n })\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for fetch request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: res ? res.status : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function (e) {\n logger.error('Error recording fetch request to ' + req.url + ': ' + String(e));\n });\n\n return originalFetchPromise;\n };\n });\n return function() {\n restorePatch();\n };\n}\n\n/**\n * @param {networkCallback} callback\n * @param {Window} win\n * @param {NetworkRecordOptions} options\n * @returns {listenerHandler}\n */\nfunction initNetworkObserver(callback, win, options) {\n if (!('performance' in win)) {\n return function() {\n //\n };\n }\n\n var recordHeaders = Object.assign({}, defaultNetworkOptions.recordHeaders, options.recordHeaders || {});\n var recordBodyUrls = Object.assign({}, defaultNetworkOptions.recordBodyUrls, options.recordBodyUrls || {});\n options = Object.assign({}, options, {\n recordHeaders: recordHeaders,\n recordBodyUrls: recordBodyUrls,\n });\n var networkOptions = /** @type {Required} */ Object.assign({}, defaultNetworkOptions, options);\n\n /** @type {networkCallback} */\n var cb = function(data) {\n var requests = data.requests.filter(function(request) {\n var shouldIgnoreUrl = urlMatchesRegexList(request.url, networkOptions.ignoreRequestUrls || []);\n return !shouldIgnoreUrl && !networkOptions.ignoreRequestFn(request);\n });\n if (requests.length > 0 || data.isInitial) {\n callback(Object.assign({}, data, { requests: requests }));\n }\n };\n var performanceObserver = initPerformanceObserver(cb, win, networkOptions);\n var xhrObserver = initXhrObserver(cb, win, networkOptions);\n var fetchObserver = initFetchObserver(cb, win, networkOptions);\n return function() {\n performanceObserver();\n xhrObserver();\n fetchObserver();\n };\n}\n\n// arbitrary .mp suffix in case rrweb does publish this plugin later and we use it but need to handle\n// a changed format in the mixpanel product.\nexport var NETWORK_PLUGIN_NAME = 'rrweb/network@1.mp';\n\n/**\n * @param {NetworkRecordOptions} [options]\n * @returns {RecordPlugin}\n */\nexport var getRecordNetworkPlugin = function(options) {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n };\n};\n","/**\n * @typedef {import('../index').RecordPrivacyConfig} RecordPrivacyConfig\n */\n\nimport { window } from '../window';\nimport { EventType, getRecordConsolePlugin, IncrementalSource } from './rrweb-entrypoint';\nimport { MAX_RECORDING_MS, MAX_VALUE_FOR_MIN_RECORDING_MS, console_with_prefix, NOOP_FUNC, _, localStorageSupported, getLocalStorage, canUseCompressionStream, navigator, userAgent, windowOpera} from '../utils'; // eslint-disable-line camelcase\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { addOptOutCheckMixpanelLib } from '../gdpr-utils';\nimport { RequestBatcher } from '../request-batcher';\n\nimport { Config } from '../config';\nimport { RECORD_ENQUEUE_THROTTLE_MS, validateAllowedOrigins } from './utils';\nimport { shouldMaskInput, shouldMaskText, getPrivacyConfig } from './masking';\nimport { getRecordNetworkPlugin } from './rrweb-network-plugin';\n\nvar logger = console_with_prefix('recorder');\nvar CompressionStream = window['CompressionStream'];\n\nvar RECORDER_BATCHER_LIB_CONFIG = {\n 'batch_size': 1000,\n 'batch_flush_interval_ms': 10 * 1000,\n 'batch_request_timeout_ms': 90 * 1000,\n 'batch_autostart': true\n};\n\nvar ACTIVE_SOURCES = new Set([\n IncrementalSource.MouseMove,\n IncrementalSource.MouseInteraction,\n IncrementalSource.Scroll,\n IncrementalSource.ViewportResize,\n IncrementalSource.Input,\n IncrementalSource.TouchMove,\n IncrementalSource.MediaInteraction,\n IncrementalSource.Drag,\n IncrementalSource.Selection,\n]);\n\nfunction isUserEvent(ev) {\n return ev.type === EventType.IncrementalSnapshot && ACTIVE_SOURCES.has(ev.data.source);\n}\n\n/**\n * @typedef {Object} SerializedRecording\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayId\n * @property {string} tabId\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} SessionRecordingOptions\n * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n * @property {String} [options.replayId] - unique uuid for a single replay\n * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout\n * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length\n * @property {import('./rrweb-entrypoint').record} [options.rrwebRecord] - rrweb's `record` function\n * @property {Function} [options.onBatchSent] - callback when a batch of events is sent to the server\n * @property {Storage} [options.sharedLockStorage] - optional storage for shared lock, used for test dependency injection\n * optional properties for deserialization:\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp - the unix timestamp of the last recorded event from rrweb\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} UserIdInfo\n * @property {string} distinct_id\n * @property {string} user_id\n * @property {string} device_id\n */\n\n\n/**\n * This class encapsulates a single session recording and its lifecycle.\n * @param {SessionRecordingOptions} options\n */\nvar SessionRecording = function(options) {\n this._mixpanel = options.mixpanelInstance;\n this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC;\n this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC;\n this._onBatchSent = options.onBatchSent || NOOP_FUNC;\n this._rrwebRecord = options.rrwebRecord || null;\n\n // internal rrweb stopRecording function\n this._stopRecording = null;\n this.replayId = options.replayId;\n\n this.batchStartUrl = options.batchStartUrl || null;\n this.replayStartUrl = options.replayStartUrl || null;\n this.idleExpires = options.idleExpires || null;\n this.maxExpires = options.maxExpires || null;\n this.replayStartTime = options.replayStartTime || null;\n this.lastEventTimestamp = options.lastEventTimestamp || null;\n this.seqNo = options.seqNo || 0;\n\n this.idleTimeoutId = null;\n this.maxTimeoutId = null;\n\n this.recordMaxMs = MAX_RECORDING_MS;\n this.recordMinMs = 0;\n this._recordMinMsCheckStart = null;\n\n // disable persistence if localStorage is not supported\n // request-queue will automatically disable persistence if indexedDB fails to initialize\n var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence');\n\n // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings\n this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId;\n this.queueStorage = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_EVENTS_STORE_NAME, RECORDER_VERSION_DATA);\n this.batcher = new RequestBatcher(this.batcherKey, {\n errorReporter: this.reportError.bind(this),\n flushOnlyOnInterval: true,\n libConfig: RECORDER_BATCHER_LIB_CONFIG,\n sendRequestFunc: this.flushEventsWithOptOut.bind(this),\n queueStorage: this.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n usePersistence: usePersistence,\n stopAllBatchingFunc: this.stopRecording.bind(this),\n\n // increased throttle and shared lock timeout because recording events are very high frequency.\n // this will minimize the amount of lock contention between enqueued events.\n // for session recordings there is a lock for each tab anyway, so there's no risk of deadlock between tabs.\n enqueueThrottleMs: RECORD_ENQUEUE_THROTTLE_MS,\n sharedLockTimeoutMS: 10 * 1000,\n });\n};\n\n/**\n * @returns {UserIdInfo}\n */\nSessionRecording.prototype.getUserIdInfo = function () {\n if (this.finalFlushUserIdInfo) {\n return this.finalFlushUserIdInfo;\n }\n\n var userIdInfo = {\n 'distinct_id': String(this._mixpanel.get_distinct_id()),\n };\n\n // send ID management props if they exist\n var deviceId = this._mixpanel.get_property('$device_id');\n if (deviceId) {\n userIdInfo['$device_id'] = deviceId;\n }\n var userId = this._mixpanel.get_property('$user_id');\n if (userId) {\n userIdInfo['$user_id'] = userId;\n }\n return userIdInfo;\n};\n\nSessionRecording.prototype.unloadPersistedData = function () {\n this.batcher.stop();\n\n return this.queueStorage.init().catch(function () {\n this.reportError('Error initializing IndexedDB storage for unloading persisted data.');\n }.bind(this)).then(function () {\n // if the recording is too short, just delete any stored events without flushing\n if (this.getDurationMs() < this._getRecordMinMs()) {\n return this.queueStorage.removeItem(this.batcherKey);\n }\n\n return this.batcher.flush()\n .then(function () {\n return this.queueStorage.removeItem(this.batcherKey);\n }.bind(this));\n }.bind(this));\n};\n\nSessionRecording.prototype.getConfig = function(configVar) {\n return this._mixpanel.get_config(configVar);\n};\n\n// Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which\n// reaches into this class instance and expects the snake case version of the function.\n// eslint-disable-next-line camelcase\nSessionRecording.prototype.get_config = function(configVar) {\n return this.getConfig(configVar);\n};\n\nSessionRecording.prototype.startRecording = function (shouldStopBatcher) {\n if (this._rrwebRecord === null) {\n this.reportError('rrweb record function not provided. ');\n return;\n }\n\n if (this._stopRecording !== null) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n this.recordMaxMs = this.getConfig('record_max_ms');\n if (this.recordMaxMs > MAX_RECORDING_MS) {\n this.recordMaxMs = MAX_RECORDING_MS;\n logger.critical('record_max_ms cannot be greater than ' + MAX_RECORDING_MS + 'ms. Capping value.');\n }\n\n if (!this.maxExpires) {\n this.maxExpires = new Date().getTime() + this.recordMaxMs;\n }\n\n this.recordMinMs = this._getRecordMinMs();\n\n if (!this.replayStartTime) {\n this.replayStartTime = new Date().getTime();\n this.batchStartUrl = _.info.currentUrl();\n this.replayStartUrl = _.info.currentUrl();\n }\n\n if (shouldStopBatcher || this.recordMinMs > 0) {\n // the primary case for shouldStopBatcher is when we're starting recording after a reset\n // and don't want to send anything over the network until there's\n // actual user activity\n // this also applies if the minimum recording length has not been hit yet\n // so that we don't send data until we know the recording will be long enough\n this.batcher.stop();\n this._recordMinMsCheckStart = null;\n } else {\n this.batcher.start();\n }\n\n var resetIdleTimeout = function () {\n clearTimeout(this.idleTimeoutId);\n var idleTimeoutMs = this.getConfig('record_idle_timeout_ms');\n this.idleTimeoutId = setTimeout(this._onIdleTimeout, idleTimeoutMs);\n this.idleExpires = new Date().getTime() + idleTimeoutMs;\n }.bind(this);\n resetIdleTimeout();\n\n var blockSelector = this.getConfig('record_block_selector');\n if (blockSelector === '' || blockSelector === null) {\n blockSelector = undefined;\n }\n\n var privacyConfig = getPrivacyConfig(this._mixpanel);\n\n var plugins = [];\n if (this.getConfig('record_network')) {\n var options = this.getConfig('record_network_options') || {};\n // don't track requests to Mixpanel /record API\n var ignoreRequestUrls = (options.ignoreRequestUrls || []).slice();\n ignoreRequestUrls.push(this._getApiRoute());\n options.ignoreRequestUrls = ignoreRequestUrls;\n\n plugins.push(getRecordNetworkPlugin(options));\n }\n\n if (this.getConfig('record_console')) {\n plugins.push(\n getRecordConsolePlugin({\n stringifyOptions: {\n stringLengthLimit: 1000,\n numOfKeysLimit: 50,\n depthOfLimit: 2\n }\n })\n );\n }\n\n var validatedOrigins = validateAllowedOrigins(this.getConfig('record_allowed_iframe_origins'), logger);\n\n try {\n this._stopRecording = this._rrwebRecord({\n 'emit': function (ev) {\n if (this.idleExpires && this.idleExpires < ev.timestamp) {\n this._onIdleTimeout();\n return;\n }\n if (this._recordMinMsCheckStart === null) {\n this._recordMinMsCheckStart = ev.timestamp;\n }\n if (isUserEvent(ev)) {\n if (this.batcher.stopped && ev.timestamp - this._recordMinMsCheckStart >= this.recordMinMs) {\n this.batcher.start();\n }\n resetIdleTimeout();\n }\n // promise only used to await during tests\n this.__enqueuePromise = this.batcher.enqueue(ev);\n\n // Capture the timestamp of the last event for duration calculation.\n if (this.lastEventTimestamp === null || ev.timestamp > this.lastEventTimestamp) {\n this.lastEventTimestamp = ev.timestamp;\n }\n }.bind(this),\n 'blockClass': this.getConfig('record_block_class'),\n 'blockSelector': blockSelector,\n 'collectFonts': this.getConfig('record_collect_fonts'),\n 'dataURLOptions': { // canvas image options (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL)\n 'type': 'image/webp',\n 'quality': 0.6\n },\n // mask all inputs and text by default, unmasking is applied via callbacks maskInputFn and maskTextFn\n 'maskAllInputs': true,\n 'maskTextSelector': '*',\n 'maskInputFn': this._getMaskFn(shouldMaskInput, privacyConfig),\n 'maskTextFn': this._getMaskFn(shouldMaskText, privacyConfig),\n 'recordCrossOriginIframes': validatedOrigins.length > 0,\n 'allowedIframeOrigins': validatedOrigins,\n 'recordCanvas': this.getConfig('record_canvas'),\n 'sampling': {\n 'canvas': 15\n },\n 'plugins': plugins,\n });\n } catch (err) {\n this.reportError('Unexpected error when starting rrweb recording.', err);\n }\n\n if (typeof this._stopRecording !== 'function') {\n this.reportError('rrweb failed to start, skipping this recording.');\n this._stopRecording = null;\n this.stopRecording(); // stop batcher looping and any timeouts\n return;\n }\n\n var maxTimeoutMs = this.maxExpires - new Date().getTime();\n this.maxTimeoutId = setTimeout(this._onMaxLengthReached.bind(this), maxTimeoutMs);\n};\n\nSessionRecording.prototype.stopRecording = function (skipFlush) {\n // store the user ID info in case this is getting called in mixpanel.reset()\n this.finalFlushUserIdInfo = this.getUserIdInfo();\n\n if (!this.isRrwebStopped()) {\n try {\n this._stopRecording();\n } catch (err) {\n this.reportError('Error with rrweb stopRecording', err);\n }\n this._stopRecording = null;\n }\n\n var flushPromise;\n if (this.batcher.stopped) {\n // never got user activity to flush after reset, so just clear the batcher\n flushPromise = this.batcher.clear();\n } else if (!skipFlush) {\n // flush any remaining events from running batcher\n flushPromise = this.batcher.flush();\n }\n this.batcher.stop();\n\n clearTimeout(this.idleTimeoutId);\n clearTimeout(this.maxTimeoutId);\n return flushPromise;\n};\n\nSessionRecording.prototype.isRrwebStopped = function () {\n return this._stopRecording === null;\n};\n\n\n/**\n * Flushes the current batch of events to the server, but passes an opt-out callback to make sure\n * we stop recording and dump any queued events if the user has opted out.\n */\nSessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) {\n var onOptOut = function (code) {\n // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out\n if (code === 0) {\n this.stopRecording();\n cb({error: 'Tracking has been opted out, stopping recording.'});\n }\n }.bind(this);\n\n this._flushEvents(data, options, cb, onOptOut);\n};\n\n/**\n * @returns {SerializedRecording}\n */\nSessionRecording.prototype.serialize = function () {\n // don't break if mixpanel instance was destroyed at some point\n var tabId;\n try {\n tabId = this._mixpanel.get_tab_id();\n } catch (e) {\n this.reportError('Error getting tab ID for serialization ', e);\n tabId = null;\n }\n\n return {\n 'replayId': this.replayId,\n 'seqNo': this.seqNo,\n 'replayStartTime': this.replayStartTime,\n 'batchStartUrl': this.batchStartUrl,\n 'replayStartUrl': this.replayStartUrl,\n 'lastEventTimestamp': this.lastEventTimestamp,\n 'idleExpires': this.idleExpires,\n 'maxExpires': this.maxExpires,\n 'tabId': tabId,\n };\n};\n\n\n/**\n * @static\n * @param {SerializedRecording} serializedRecording\n * @param {SessionRecordingOptions} options\n * @returns {SessionRecording}\n */\nSessionRecording.deserialize = function (serializedRecording, options) {\n var recording = new SessionRecording(_.extend({}, options, {\n replayId: serializedRecording['replayId'],\n batchStartUrl: serializedRecording['batchStartUrl'],\n replayStartUrl: serializedRecording['replayStartUrl'],\n idleExpires: serializedRecording['idleExpires'],\n maxExpires: serializedRecording['maxExpires'],\n replayStartTime: serializedRecording['replayStartTime'],\n lastEventTimestamp: serializedRecording['lastEventTimestamp'],\n seqNo: serializedRecording['seqNo'],\n sharedLockStorage: options.sharedLockStorage,\n }));\n\n return recording;\n};\n\nSessionRecording.prototype._getApiRoute = function () {\n return this.getConfig('api_routes')['record'];\n};\n\nSessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) {\n var onSuccess = function (response, responseBody) {\n // Update batch specific props only if the request was successful to guarantee ordering.\n // RequestBatcher will always flush the next batch after the previous one succeeds.\n // extra check to see if the replay ID has changed so that we don't increment the seqNo on the wrong replay\n if (response.status === 200 && this.replayId === currentReplayId) {\n this.seqNo++;\n this.batchStartUrl = _.info.currentUrl();\n }\n\n this._onBatchSent();\n callback({\n status: 0,\n httpStatusCode: response.status,\n responseBody: responseBody,\n retryAfter: response.headers.get('Retry-After')\n });\n }.bind(this);\n var apiHost = (this._mixpanel.get_api_host && this._mixpanel.get_api_host('record')) || this.getConfig('api_host');\n window['fetch'](apiHost + '/' + this._getApiRoute() + '?' + new URLSearchParams(reqParams), {\n 'method': 'POST',\n 'headers': {\n 'Authorization': 'Basic ' + btoa(this.getConfig('token') + ':'),\n 'Content-Type': 'application/octet-stream'\n },\n 'body': reqBody,\n }).then(function (response) {\n response.json().then(function (responseBody) {\n onSuccess(response, responseBody);\n }).catch(function (error) {\n callback({error: error});\n });\n }).catch(function (error) {\n callback({error: error, httpStatusCode: 0});\n });\n};\n\nSessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) {\n var numEvents = data.length;\n\n if (numEvents > 0) {\n var replayId = this.replayId;\n\n // each rrweb event has a timestamp - leverage those to get time properties\n var batchStartTime = Infinity;\n var batchEndTime = -Infinity;\n var hasFullSnapshot = false;\n for (var i = 0; i < numEvents; i++) {\n batchStartTime = Math.min(batchStartTime, data[i].timestamp);\n batchEndTime = Math.max(batchEndTime, data[i].timestamp);\n if (data[i].type === EventType.FullSnapshot) {\n hasFullSnapshot = true;\n }\n }\n\n if (this.seqNo === 0) {\n if (!hasFullSnapshot) {\n callback({error: 'First batch does not contain a full snapshot. Aborting recording.'});\n this.stopRecording(true);\n return;\n }\n this.replayStartTime = batchStartTime;\n } else if (!this.replayStartTime) {\n this.reportError('Replay start time not set but seqNo is not 0. Using current batch start time as a fallback.');\n this.replayStartTime = batchStartTime;\n }\n\n var replayLengthMs = batchEndTime - this.replayStartTime;\n\n var reqParams = {\n '$current_url': this.batchStartUrl,\n '$lib_version': Config.LIB_VERSION,\n 'batch_start_time': batchStartTime / 1000,\n 'mp_lib': 'web',\n 'replay_id': replayId,\n 'replay_length_ms': replayLengthMs,\n 'replay_start_time': this.replayStartTime / 1000,\n 'replay_start_url': this.replayStartUrl,\n 'seq': this.seqNo\n };\n var eventsJson = JSON.stringify(data);\n Object.assign(reqParams, this.getUserIdInfo());\n\n var sendUncompressed = function() {\n reqParams['format'] = 'body';\n this._sendRequest(replayId, reqParams, eventsJson, callback);\n }.bind(this);\n\n if (canUseCompressionStream(userAgent, navigator.vendor, windowOpera)) {\n var jsonStream = new Blob([eventsJson], {type: 'application/json'}).stream();\n var gzipStream = jsonStream.pipeThrough(new CompressionStream('gzip'));\n new Response(gzipStream)\n .blob()\n .then(function(compressedBlob) {\n reqParams['format'] = 'gzip';\n this._sendRequest(replayId, reqParams, compressedBlob, callback);\n }.bind(this), function(err) {\n this.reportError('Error compressing session recording batch; sending uncompressed', err);\n sendUncompressed();\n }.bind(this));\n } else {\n sendUncompressed();\n }\n }\n});\n\n\nSessionRecording.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n try {\n if (!err && !(msg instanceof Error)) {\n msg = new Error(msg);\n }\n this.getConfig('error_reporter')(msg, err);\n } catch(err) {\n logger.error(err);\n }\n};\n\n/**\n * Calculates the duration of the recording in milliseconds, based on the start time and time of last recorded event.\n * @returns {number} The duration of the recording in milliseconds. Returns 0 if recording hasn't started.\n */\nSessionRecording.prototype.getDurationMs = function() {\n if (this.replayStartTime === null) {\n return 0;\n }\n\n // If the recording has no events, assume it is in progress and use the current time as the end time.\n if (this.lastEventTimestamp === null) {\n return new Date().getTime() - this.replayStartTime;\n }\n\n return this.lastEventTimestamp - this.replayStartTime;\n};\n\n/**\n * Lazily loads the minimum recording length config in milliseconds, respecting the maximum limit.\n * @returns {number} The minimum recording length in milliseconds.\n */\nSessionRecording.prototype._getRecordMinMs = function() {\n var configValue = this.getConfig('record_min_ms');\n\n if (configValue > MAX_VALUE_FOR_MIN_RECORDING_MS) {\n logger.critical('record_min_ms cannot be greater than ' + MAX_VALUE_FOR_MIN_RECORDING_MS + 'ms. Capping value.');\n return MAX_VALUE_FOR_MIN_RECORDING_MS;\n }\n\n return configValue;\n};\n\n/**\n * Creates a masking function for rrweb's maskInputFn or maskTextFn\n * @param {(element: HTMLElement, privacyConfig: RecordPrivacyConfig) => boolean} shouldMaskFn - Function that determines if element should be masked\n * @param {RecordPrivacyConfig} privacyConfig - Privacy configuration\n * @returns {(text: string, element: HTMLElement) => string} Function that masks text based on privacy config\n */\nSessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) {\n return function(text, element) {\n // prevent visual artifacts from random whitespace\n if (!text.trim().length) {\n return '';\n }\n\n var shouldMask = true;\n try {\n shouldMask = shouldMaskFn(element, privacyConfig);\n } catch (err) {\n this.reportError('Error checking if text should be masked, defaulting to masked', err);\n }\n\n if (shouldMask) {\n var textLength = Math.min(text.length, 10000); // limit to 10000 chars to optimize performance\n return '*'.repeat(textLength);\n } else {\n return text;\n }\n }.bind(this);\n};\n\nexport { SessionRecording };\n","import { Promise } from '../promise-polyfill';\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { SessionRecording } from './session-recording';\nimport { isRecordingExpired } from './utils';\n\n/**\n * Module for handling the storage and retrieval of recording metadata as well as any active recordings.\n * Makes sure that only one tab can be recording at a time.\n */\nvar RecordingRegistry = function (options) {\n /** @type {IDBStorageWrapper} */\n this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA);\n this.errorReporter = options.errorReporter;\n this.mixpanelInstance = options.mixpanelInstance;\n this.sharedLockStorage = options.sharedLockStorage;\n};\n\nRecordingRegistry.prototype.isPersistenceEnabled = function() {\n return !this.mixpanelInstance.get_config('disable_persistence');\n};\n\nRecordingRegistry.prototype.handleError = function (err) {\n this.errorReporter('IndexedDB error: ', err);\n};\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n */\nRecordingRegistry.prototype.setActiveRecording = function (serializedRecording) {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve();\n }\n\n var tabId = serializedRecording['tabId'];\n if (!tabId) {\n console.warn('No tab ID is set, cannot persist recording metadata.');\n return Promise.resolve();\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.setItem(tabId, serializedRecording);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\n/**\n * @returns {Promise}\n */\nRecordingRegistry.prototype.getActiveRecording = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve(null);\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.getItem(this.mixpanelInstance.get_tab_id());\n }.bind(this))\n .then(function (serializedRecording) {\n return isRecordingExpired(serializedRecording) ? null : serializedRecording;\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nRecordingRegistry.prototype.clearActiveRecording = function () {\n if (this.isPersistenceEnabled()) {\n // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion.\n // this will ensure the next pageload will flush the remaining events, but not try to continue the recording.\n return this.markActiveRecordingExpired();\n } else {\n return this.deleteActiveRecording();\n }\n};\n\nRecordingRegistry.prototype.markActiveRecordingExpired = function () {\n return this.getActiveRecording()\n .then(function (serializedRecording) {\n if (serializedRecording) {\n serializedRecording['maxExpires'] = 0;\n return this.setActiveRecording(serializedRecording);\n }\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nRecordingRegistry.prototype.deleteActiveRecording = function () {\n // avoid initializing IDB if this registry instance hasn't already written a recording\n if (this.idb.isInitialized()) {\n return this.idb.removeItem(this.mixpanelInstance.get_tab_id())\n .catch(this.handleError.bind(this));\n } else {\n return Promise.resolve();\n }\n};\n\n/**\n * Flush any inactive recordings from the registry to minimize data loss.\n * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch.\n */\nRecordingRegistry.prototype.flushInactiveRecordings = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve([]);\n }\n\n return this.idb.init()\n .then(function() {\n return this.idb.getAll();\n }.bind(this))\n .then(function (serializedRecordings) {\n // clean up any expired recordings from the registry, non-expired ones may be active in other tabs\n var unloadPromises = serializedRecordings\n .filter(function (serializedRecording) {\n return isRecordingExpired(serializedRecording);\n })\n .map(function (serializedRecording) {\n var sessionRecording = SessionRecording.deserialize(serializedRecording, {\n mixpanelInstance: this.mixpanelInstance,\n sharedLockStorage: this.sharedLockStorage\n });\n return sessionRecording.unloadPersistedData()\n .then(function () {\n // expired recording was successfully flushed, we can clean it up from the registry\n return this.idb.removeItem(serializedRecording['tabId']);\n }.bind(this))\n .catch(this.handleError.bind(this));\n }.bind(this));\n\n return Promise.all(unloadPromises);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nexport { RecordingRegistry };\n","import { record } from './rrweb-entrypoint';\nimport { Promise } from '../promise-polyfill';\nimport { SessionRecording } from './session-recording';\nimport { RecordingRegistry } from './recording-registry';\n\nimport { console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('recorder');\n\n/**\n * Recorder API: bundles rrweb and and exposes methods to start and stop recordings.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n*/\nvar MixpanelRecorder = function(mixpanelInstance, rrwebRecord, sharedLockStorage) {\n this.mixpanelInstance = mixpanelInstance;\n this.rrwebRecord = rrwebRecord || record;\n this.sharedLockStorage = sharedLockStorage;\n\n /**\n * @member {import('./registry').RecordingRegistry}\n */\n this.recordingRegistry = new RecordingRegistry({\n mixpanelInstance: this.mixpanelInstance,\n errorReporter: logger.error,\n sharedLockStorage: sharedLockStorage\n });\n this._flushInactivePromise = this.recordingRegistry.flushInactiveRecordings();\n\n this.activeRecording = null;\n this.stopRecordingInProgress = false;\n};\n\nMixpanelRecorder.prototype.startRecording = function(options) {\n options = options || {};\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n var onIdleTimeout = function () {\n logger.log('Idle timeout reached, restarting recording.');\n this.resetRecording();\n }.bind(this);\n\n var onMaxLengthReached = function () {\n logger.log('Max recording length reached, stopping recording.');\n this.resetRecording();\n }.bind(this);\n\n var onBatchSent = function () {\n this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n this['__flushPromise'] = this.activeRecording.batcher._flushPromise;\n }.bind(this);\n\n /**\n * @type {import('./session-recording').SessionRecordingOptions}\n */\n var sessionRecordingOptions = {\n mixpanelInstance: this.mixpanelInstance,\n onBatchSent: onBatchSent,\n onIdleTimeout: onIdleTimeout,\n onMaxLengthReached: onMaxLengthReached,\n replayId: _.UUID(),\n rrwebRecord: this.rrwebRecord,\n sharedLockStorage: this.sharedLockStorage\n };\n\n if (options.activeSerializedRecording) {\n this.activeRecording = SessionRecording.deserialize(options.activeSerializedRecording, sessionRecordingOptions);\n } else {\n this.activeRecording = new SessionRecording(sessionRecordingOptions);\n }\n\n this.activeRecording.startRecording(options.shouldStopBatcher);\n return this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n};\n\nMixpanelRecorder.prototype.stopRecording = function() {\n // Prevents activeSerializedRecording from being reused when stopping the recording.\n this.stopRecordingInProgress = true;\n return this._stopCurrentRecording(false, true).then(function() {\n return this.recordingRegistry.clearActiveRecording();\n }.bind(this)).then(function() {\n this.stopRecordingInProgress = false;\n }.bind(this));\n};\n\nMixpanelRecorder.prototype.pauseRecording = function() {\n return this._stopCurrentRecording(false);\n};\n\nMixpanelRecorder.prototype._stopCurrentRecording = function(skipFlush, disableActiveRecording) {\n if (this.activeRecording) {\n var stopRecordingPromise = this.activeRecording.stopRecording(skipFlush);\n if (disableActiveRecording) {\n this.activeRecording = null;\n }\n return stopRecordingPromise;\n }\n return Promise.resolve();\n};\n\nMixpanelRecorder.prototype.resumeRecording = function (startNewIfInactive) {\n if (this.activeRecording && this.activeRecording.isRrwebStopped()) {\n this.activeRecording.startRecording(false);\n return Promise.resolve(null);\n }\n\n return this.recordingRegistry.getActiveRecording()\n .then(function (activeSerializedRecording) {\n if (activeSerializedRecording && !this.stopRecordingInProgress) {\n return this.startRecording({activeSerializedRecording: activeSerializedRecording});\n } else if (startNewIfInactive) {\n return this.startRecording({shouldStopBatcher: false});\n } else {\n logger.log('No resumable recording found.');\n return null;\n }\n }.bind(this));\n};\n\n\nMixpanelRecorder.prototype.resetRecording = function () {\n this.stopRecording();\n this.startRecording({shouldStopBatcher: true});\n};\n\nMixpanelRecorder.prototype.isRecording = function () {\n return this.activeRecording && !this.activeRecording.isRrwebStopped();\n};\n\nMixpanelRecorder.prototype.getActiveReplayId = function () {\n if (this.isRecording()) {\n return this.activeRecording.replayId;\n } else {\n return null;\n }\n};\n\n// getter so that older mixpanel-core versions can still retrieve the replay ID\n// when pulling the latest recorder bundle from the CDN\nObject.defineProperty(MixpanelRecorder.prototype, 'replayId', {\n get: function () {\n return this.getActiveReplayId();\n }\n});\n\n\nexport { MixpanelRecorder };\n","import { window } from '../window';\nimport { RECORDER_GLOBAL_NAME } from '../config';\nimport { MixpanelRecorder } from './recorder';\n\nwindow[RECORDER_GLOBAL_NAME] = MixpanelRecorder;\n"],"names":["win","loc","Config","RECORDER_GLOBAL_NAME","_array_like_to_array","arr","len","i","arr2","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_async_to_generator","fn","self","args","err","_construct","Parent","Class","_is_native_reflect_construct","Constructor","instance","_set_prototype_of","_defineProperties","target","props","descriptor","_create_class","protoProps","staticProps","_extends","source","_get_prototype_of","o","_inherits","subClass","superClass","_instanceof","left","right","_is_native_function","_object_without_properties_loose","excluded","sourceKeys","p","_type_of","obj","_unsupported_iterable_to_array","minLen","n","_wrap_native_super","_cache","Wrapper","result","_","_create_for_of_iterator_helper_loose","allowArrayLike","it","_ts_generator","thisArg","body","f","y","g","verb","v","step","op","e","_ts_values","s","m","__defProp$1","__defNormalProp$1","__publicField$1","_a","__defProp$1$1","__defNormalProp$1$1","__publicField$1$1","NodeType$3","NodeType2","testableAccessors$1","testableMethods$1","untaintedBasePrototype$1","isAngularZonePresent$1","getUntaintedPrototype$1","defaultObj","defaultPrototype","accessorNames","isUntaintedAccessors","accessor","_a2","_b","methodNames","isUntaintedMethods","method","iframeEl","untaintedObject","untaintedAccessorCache$1","getUntaintedAccessor$1","cacheKey","untaintedPrototype","untaintedAccessor","untaintedMethodCache$1","getUntaintedMethod$1","untaintedMethod","childNodes$1","n2","parentNode$1","parentElement$1","textContent$1","contains$1","other","getRootNode$1","host$1","styleSheets$1","shadowRoot$1","querySelector$1","selectors","querySelectorAll$1","mutationObserverCtor$1","patch$1$1","name","replacement","original","wrapped","index$1","isElement","isShadowRoot","hostEl","isNativeShadowDom","shadowRoot2","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule2","statement","stringifyStylesheet","s2","rules2","sheetHref","stringifiedRules","stringifyRule","isCSSImportRule","importStringified","absolutifyURLs","ruleStringified","isCSSStyleRule","fixSafariColons","cssStringified","regex","Mirror","_proto","id","permanent","_this","childNode","node2","meta","oldNode","createMirror$2","maskInputValue","param","element","maskInputOptions","tagName","type","maskInputFn","text","actualType","toLowerCase","str","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","ctx","chunkSize","x2","getImageData","originalGetImageData","pixelBuffer","pixel","getInputType","extractFileExtension","path","baseURL","url","match","_ref","extractOrigin","origin","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","parts","_iterator","_step","part","normalizeCssString","_testNoPxNorm","splitCssText","style","childNodes2","splits","iterCount","cssTextNorm","normFactor","i2","textContentNorm","jLimit","j","startSubstring","cssNormSplits","splitNorm","prevTextContent","prevMinLength","k","normPart","markCssSplits","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName$1","processedTagName","canvasService","canvasCtx","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars2","output","absoluteToDoc","descriptorsStr","inParens","c2","cachedDocument","getHref","isSVGElement","el","customHref","a2","transformAttribute","ignoreAttribute","_value","_isBlockedElement","blockClass","blockSelector","eIndex","className","e2","classMatchesRegex$1","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","listener","iframeLoadTimeout","fired","readyState","timer","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","options","mirror2","needsMask","inlineStylesheet","_options_maskInputOptions","maskTextFn","_options_dataURLOptions","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","_options_newlyAddedElement","newlyAddedElement","_options_cssCaptured","cssCaptured","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parent","parentTagName","textContent2","isStyle","isScript","needBlock","attributes","attr","stylesheet","cssText1","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","imageSrc","priorCrossOrigin","recordInlineImage","mediaAttributes","_n2_getBoundingClientRect","width","height","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","_options_skipChild","skipChild","_options_inlineStylesheet","_options_inlineImages","_options_recordCanvas","onSerialize","onIframeLoad","_options_iframeLoadTimeout","onStylesheetLoad","_options_stylesheetLoadTimeout","stylesheetLoadTimeout","_options_keepIframeSrcFn","_options_preserveWhiteSpace","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","shadowRootEl","bypassOptions","childN","serializedChildNode","shadowRootEl1","_iterator1","_step1","childN1","serializedChildNode1","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","tmp","_ref_blockClass","_ref_blockSelector","_ref_maskTextClass","_ref_maskTextSelector","_ref_inlineStylesheet","_ref_inlineImages","_ref_recordCanvas","_ref_maskAllInputs","maskAllInputs","_ref_slimDOM","slimDOM","_ref_keepIframeSrcFn","getDefaultExportFromCjs$1","getAugmentedNamespace$1","f2","a22","d","picocolors_browser$1","x$1","create$1","picocolors_browserExports$1","__viteBrowserExternal$2","__viteBrowserExternal$1$1","require$$2$1","pico$1","terminalHighlight$1$1","CssSyntaxError$3$1","Error1","CssSyntaxError","message","line","column","file","plugin22","color","css","lines","start","end","maxWidth","mark","aside","_pico$1_createColors","bold","gray","red","index2","number","gutter","spacing","code","cssSyntaxError$1","symbols$1","DEFAULT_RAW$1","capitalize$1","Stringifier$2$1","Stringifier","builder","semicolon","params","detect","buf","depth","indent","between","after","last","child","before","string","own","root2","prop","raw","stringifier$1","Stringifier$1$1","stringify$4$1","stringify_1$1","isClean$2$1","my$2$1","CssSyntaxError$2$1","Stringifier2$1","stringify$3$1","cloneNode$1","cloned","Node$4$1","Node2","defaults","add","overrides","keepBetween","opts","_this_rangeBy","next","stringRepresentation","defaultType","_len","nodes","_key","bookmark","foundSelf","result2","inputs","fixed","emitInputs","inputsNextIndex","inputId","input2","stringifier2","data","node$1","Node$3$1","Declaration$4$1","Declaration","declaration$1","urlAlphabet$1","nanoid$1$1","size","nonSecure$1","SourceMapConsumer$2$1","SourceMapGenerator$2$1","existsSync$1","readFileSync$1","dirname$1$1","join$1","fromBase64$1","PreviousMap$2$1","PreviousMap","prev","baseCharsetUri","baseUri","charsetUri","uri","encoding","sourceMapString","map","comments","prevPath","map1","previousMap$1","SourceMapConsumer$1$1","SourceMapGenerator$1$1","fileURLToPath$1","pathToFileURL$1$1","isAbsolute$1","resolve$1$1","nanoid$2","terminalHighlight$2","CssSyntaxError$1$1","PreviousMap$1$1","fromOffsetCache$1","sourceMapAvailable$1$1","pathAvailable$1$1","Input$4$1","Input","endLine","endColumn","pos1","pos2","offset","lastLine","lineToIndex","prevIndex","l2","min","max","mid","consumer","from","to","fromUrl","json","_i","_iter","input$1","SourceMapConsumer$3","SourceMapGenerator$3","dirname$2","relative$1","resolve$2","sep$1","pathToFileURL$2","Input$3$1","sourceMapAvailable$2","pathAvailable$2","MapGenerator$2$1","MapGenerator","stringify2","cssString","content","eol","noSource","mapping","childless","annotation","cached","already","fileURL","mapGenerator$1","Node$2$1","Comment$4$1","Comment","comment$1","isClean$1$1","my$1$1","Declaration$3$1","Comment$3$1","Node$1$1","parse$4$1","Rule$4$1","AtRule$4$1","Root$6$1","cleanSource$1","markDirtyUp$1","Container$7$1","Container","children","callback","iterator","condition","_node2","cb","exist","existIndex","sample","i21","processed","pattern","decl","selector","dependant","container$1","Container$6$1","LazyResult$4$1","Processor$3$1","Document$3$1","Document2","lazy","document$1$1","printed$1","warnOnce$2$1","Warning$2$1","Warning","range","opt","warning$1","Warning$1$1","Result$3$1","Result","processor2","warning2","result$1","SINGLE_QUOTE$1","DOUBLE_QUOTE$1","BACKSLASH$1","SLASH$1","NEWLINE$1","SPACE$1","FEED$1","TAB$1","CR$1","OPEN_SQUARE$1","CLOSE_SQUARE$1","OPEN_PARENTHESES$1","CLOSE_PARENTHESES$1","OPEN_CURLY$1","CLOSE_CURLY$1","SEMICOLON$1","ASTERISK$1","COLON$1","AT$1","RE_AT_END$1","RE_WORD_END$1","RE_BAD_BRACKET$1","RE_HEX_ESCAPE$1","tokenize$1","ignore","quote","escape","escaped","escapePos","currentToken","length","buffer","returned","position","unclosed","what","endOfFile","nextToken","ignoreUnclosed","controlChar","back","token","Container$5$1","AtRule$3$1","AtRule","_Container$5$1_prototype_append","_Container$5$1_prototype_prepend","atRule$1","Container$4$1","LazyResult$3$1","Processor$2$1","Root$5$1","Root","root$1","list$2$1","spaces","separators","array","current","split","func","inQuote","prevQuote","letter","list_1$1","Container$3$1","list$1$1","Rule$3$1","Rule","values","sep2","rule$1","Declaration$2$1","tokenizer2$1","Comment$2$1","AtRule$2$1","Root$4$1","Rule$2$1","SAFE_COMMENT_NEIGHBOR$1","findLastWithPosition$1","tokens","Parser$1$1","Parser","shift","open","brackets","colon","founded","_step_value","customProperty","firstSpaces","cache","type1","hasWord","bracket","clean","all","lastTokenType","parser$1","Container$2$1","Parser2$1","Input$2$1","parse$3$1","parser2","parse_1$1","isClean$3","my$3","MapGenerator$1$1","stringify$2$1","Container$1$1","Document$2$1","warnOnce$1$1","Result$2$1","parse$2$1","Root$3$1","TYPE_TO_CLASS_NAME$1","PLUGIN_PROPS$1","NOT_VISITORS$1","CHILDREN$1","isPromise$1","getEvents$1","toStack$1","events","cleanMarks$1","postcss$2$1","LazyResult$2$1","LazyResult","onRejected","onFinally","pluginName","pluginVer","runtimeVer","b","event","filter","promise","promise1","_loop","_state","visitor","roots","subRoot","onFulfilled","visitors","visit2","_visitors_visit2_visitorIndex","lazyResult$1","MapGenerator2$1","stringify$1$1","warnOnce2$1","parse$1$1","Result$1$1","NoWorkResult$1$1","NoWorkResult","_map_generate","generatedCSS","generatedMap","noWorkResult$1","NoWorkResult2$1","LazyResult$1$1","Document$1$1","Root$2$1","Processor$1$1","Processor","plugins","normalized","processor$1","Declaration$1$1","PreviousMap2$1","Comment$1$1","AtRule$1$1","Input$1$1","Root$1$1","Rule$1$1","fromJSON$1$1","ownInputs","inputHydrated","_defaults_source","fromJSON_1$1","CssSyntaxError2$1","Declaration2$1","LazyResult2$1","Container2$1","Processor2$1","stringify$5$1","fromJSON$2","Document22","Warning2$1","Comment2$1","AtRule2$1","Result2$1","Input2$1","parse$5","list$3","Rule2$1","Root2$1","Node2$1","postcss$3","initializer","warningPrinted","creator","transformer","processOpts","pluginOpts","postcss_1$1","postcss$1$1","__defProp2","__defNormalProp2","__publicField2","getDefaultExportFromCjs$2","getAugmentedNamespace$2","picocolors_browser$2","x$2","create$2","picocolors_browserExports$2","__viteBrowserExternal$3","__viteBrowserExternal$1$2","require$$2$2","pico$2","terminalHighlight$1$2","CssSyntaxError$3$2","CssSyntaxError2","_pico$2_createColors","cssSyntaxError$2","symbols$2","DEFAULT_RAW$2","capitalize$2","Stringifier$2$2","Stringifier2","stringifier$2","Stringifier$1$2","stringify$4$2","stringify_1$2","isClean$2$2","my$2$2","CssSyntaxError$2$2","Stringifier22","stringify$3$2","cloneNode$2","Node$4$2","Node3","node$2","Node$3$2","Declaration$4$2","Declaration2","declaration$2","urlAlphabet$2","nanoid$1$2","nonSecure$2","SourceMapConsumer$2$2","SourceMapGenerator$2$2","existsSync$2","readFileSync$2","dirname$1$2","join$2","fromBase64$2","PreviousMap$2$2","PreviousMap2","previousMap$2","SourceMapConsumer$1$2","SourceMapGenerator$1$2","fileURLToPath$2","pathToFileURL$1$2","isAbsolute$2","resolve$1$2","nanoid$3","terminalHighlight$3","CssSyntaxError$1$2","PreviousMap$1$2","fromOffsetCache$2","sourceMapAvailable$1$2","pathAvailable$1$2","Input$4$2","Input2","input$2","SourceMapConsumer$4","SourceMapGenerator$4","dirname$3","relative$2","resolve$3","sep$2","pathToFileURL$3","Input$3$2","sourceMapAvailable$3","pathAvailable$3","MapGenerator$2$2","MapGenerator2","mapGenerator$2","Node$2$2","Comment$4$2","Comment2","comment$2","isClean$1$2","my$1$2","Declaration$3$2","Comment$3$2","Node$1$2","parse$4$2","Rule$4$2","AtRule$4$2","Root$6$2","cleanSource$2","markDirtyUp$2","Container$7$2","Container2","container$2","Container$6$2","LazyResult$4$2","Processor$3$2","Document$3$2","Document23","document$1$2","printed$2","warnOnce$2$2","Warning$2$2","Warning2","warning$2","Warning$1$2","Result$3$2","Result2","result$2","SINGLE_QUOTE$2","DOUBLE_QUOTE$2","BACKSLASH$2","SLASH$2","NEWLINE$2","SPACE$2","FEED$2","TAB$2","CR$2","OPEN_SQUARE$2","CLOSE_SQUARE$2","OPEN_PARENTHESES$2","CLOSE_PARENTHESES$2","OPEN_CURLY$2","CLOSE_CURLY$2","SEMICOLON$2","ASTERISK$2","COLON$2","AT$2","RE_AT_END$2","RE_WORD_END$2","RE_BAD_BRACKET$2","RE_HEX_ESCAPE$2","tokenize$2","Container$5$2","AtRule$3$2","AtRule2","_Container$5$2_prototype_append","_Container$5$2_prototype_prepend","atRule$2","Container$4$2","LazyResult$3$2","Processor$2$2","Root$5$2","Root2","root$2","list$2$2","list_1$2","Container$3$2","list$1$2","Rule$3$2","Rule2","rule$2","Declaration$2$2","tokenizer22","Comment$2$2","AtRule$2$2","Root$4$2","Rule$2$2","SAFE_COMMENT_NEIGHBOR$2","findLastWithPosition$2","Parser$1$2","Parser2","parser$2","Container$2$2","Parser22","Input$2$2","parse$3$2","parse_1$2","isClean$4","my$4","MapGenerator$1$2","stringify$2$2","Container$1$2","Document$2$2","warnOnce$1$2","Result$2$2","parse$2$2","Root$3$2","TYPE_TO_CLASS_NAME$2","PLUGIN_PROPS$2","NOT_VISITORS$2","CHILDREN$2","isPromise$2","getEvents$2","toStack$2","cleanMarks$2","postcss$2$2","LazyResult$2$2","LazyResult2","lazyResult$2","MapGenerator22","stringify$1$2","warnOnce22","parse$1$2","Result$1$2","NoWorkResult$1$2","NoWorkResult2","noWorkResult$2","NoWorkResult22","LazyResult$1$2","Document$1$2","Root$2$2","Processor$1$2","Processor2","processor$2","Declaration$1$2","PreviousMap22","Comment$1$2","AtRule$1$2","Input$1$2","Root$1$2","Rule$1$2","fromJSON$1$2","fromJSON_1$2","CssSyntaxError22","Declaration22","LazyResult22","Container22","Processor22","stringify$6","fromJSON$3","Document222","Warning22","Comment22","AtRule22","Result22","Input22","parse$6","list$4","Rule22","Root22","Node22","postcss$4","postcss_1$2","postcss$1$2","BaseRRNode","_args","_newChild","_refChild","_node","childIterator","testableAccessors$2","testableMethods$2","untaintedBasePrototype$2","isAngularZonePresent$2","getUntaintedPrototype$2","untaintedAccessorCache$2","getUntaintedAccessor$2","untaintedMethodCache$2","getUntaintedMethod$2","childNodes$2","parentNode$2","parentElement$2","textContent$2","contains$2","getRootNode$2","host$2","styleSheets$2","shadowRoot$2","querySelector$2","querySelectorAll$2","mutationObserverCtor$2","patch$2","index$2","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","receiver","throttle","wait","timeout","previous","now","remaining","context","hookSetter","isRevoked","nowTimestamp","getWindowScroll","_c","_d","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill$1","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","_this_styleIDMap_get","newId","getShadowHost","shadowHost","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","NodeType","isNodeInLinkedList","DoubleLinkedList","current1","moveKey","parentId","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","parentTag","currentN","iframe","childSn","removedNode","isParentRemoved","n21","isAncestorInSet","candidate","tailNode","parentId1","nextId1","unhandledNode","parentId2","payload","attribute","diffAsStr","unchangedAsStr","textarea","item","cn","attributeName","value1","old","pname","newValue","newPriority","pname1","nodeId","deepDelete","processRemoves","targetId","addsSet","queue","n22","removes","_isParentRemoved","_mirror2","set","_isAncestorInSet","errorHandler","registerErrorHandler","handler","unregisterErrorHandler","callbackWrapper","rrwebWrapped","rest","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","observer","removeMutationBufferForDoc","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","updatePosition","evt","clientX","clientY","handlers","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","eventName","h","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","param1","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","text2","v2","lastInputValue","currentWindow","propertyDescriptor","hookProperties","_handlers","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","rules21","index21","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","argumentsList","_getIdAndStyleId","styleBlock","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","host2","hostId","patchTarget","originalPropertyDescriptor","_a3","sheets","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","loop","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","selectionCb","collapsed","updateSelection","selection","ranges","count","startContainer","startOffset","endContainer","endOffset","blocked","initCustomElementObserver","customElementCb","constructor","mergeHooks","o2","hooks","mutationCb","canvasMutationCb","_hooks","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin3","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","ids","IframeManager","cleanup","storedDoc","observerCleanup","crossOriginMessageEvent","iframeSourceWindow","transformedEvent","iframeMirror","keys","ShadowDomManager","iframeElement","manager","option","sRoot","chars","lookup","i$1","encode","arraybuffer","bytes","base64","canvasVarMap","variableListFor$1","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","list2","serializeArg","name1","name2","name3","src","name4","src1","name5","name6","serializeArgs","webGLConstructorNames","supportedWebGLConstructorNames","initCanvas2DMutationObserver","recordArgs","hookHandler","props2D","getNormalizedContextName","contextType","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","patchGLPrototype","prototype","mutation","initCanvasWebGLMutationObserver","_handlers1","encodedJs","decodeBase64","blob","WorkerWrapper","objURL","worker","CanvasManager","newFrame","_options_sampling","fps","canvasContextReset","snapshotInProgressMap","_e2_data","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","timestamp","_this1","bitmap","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","_values","valuesWithType","StylesheetManager","linkEl","styles","r2","adoptedStyleSheetData","styleEl","_linkEl","ProcessedNodeManager","thisBuffer","buffers","toOrigin","buildAllowedOriginSet","origins","entry","wrappedEmit","takeFullSnapshot$1","canvasManager","recording","cleanFrame","mirror","record","emit","checkoutEveryNms","checkoutEveryNth","_options_blockClass","_options_blockSelector","_options_ignoreClass","_options_ignoreSelector","_options_maskTextClass","_options_maskTextSelector","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","_options_recordDOM","recordDOM","_options_recordCrossOriginIframes","recordCrossOriginIframes","allowedIframeOrigins","_options_recordAfter","recordAfter","_options_userTriggeredOnInput","_options_collectFonts","collectFonts","_options_ignoreCSSAttributes","errorHandler2","validatedOrigins","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","targetOrigin","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","shadowDomManager","observe","iframeHandler","existingCleanup","idx","init","msg","tag","t2","testableAccessors","testableMethods","untaintedBasePrototype","isAngularZonePresent","getUntaintedPrototype","untaintedAccessorCache","getUntaintedAccessor","untaintedMethodCache","getUntaintedMethod","childNodes","parentNode","parentElement","textContent","contains","getRootNode","host","styleSheets","shadowRoot","querySelector","querySelectorAll","mutationObserverCtor","patch$1","index","classMatchesRegex","getDefaultExportFromCjs","getAugmentedNamespace","a","picocolors_browser","x","create","picocolors_browserExports","__viteBrowserExternal","__viteBrowserExternal$1","require$$2","pico","terminalHighlight$1","CssSyntaxError$3","plugin2","_pico_createColors","cssSyntaxError","symbols","DEFAULT_RAW","capitalize","Stringifier$2","stringifier","Stringifier$1","stringify$4","stringify_1","isClean$2","my$2","CssSyntaxError$2","stringify$3","cloneNode","Node$4","Node1","node","Node$3","Declaration$4","declaration","urlAlphabet","nanoid$1","nonSecure","SourceMapConsumer$2","SourceMapGenerator$2","existsSync","readFileSync","dirname$1","join","fromBase64","PreviousMap$2","previousMap","SourceMapConsumer$1","SourceMapGenerator$1","fileURLToPath","pathToFileURL$1","isAbsolute","resolve$1","nanoid","terminalHighlight","CssSyntaxError$1","PreviousMap$1","fromOffsetCache","sourceMapAvailable$1","pathAvailable$1","Input$4","l","input","SourceMapConsumer","SourceMapGenerator","dirname","relative","sep","pathToFileURL","Input$3","sourceMapAvailable","pathAvailable","MapGenerator$2","mapGenerator","Node$2","Comment$4","comment","isClean$1","my$1","Declaration$3","Comment$3","Node$1","parse$4","Rule$4","AtRule$4","Root$6","cleanSource","markDirtyUp","Container$7","i1","container","Container$6","LazyResult$4","Processor$3","Document$3","Document","document$1","printed","warnOnce$2","Warning$2","warning","Warning$1","Result$3","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","tokenize","Container$5","AtRule$3","_Container$5_prototype_append","_Container$5_prototype_prepend","atRule","Container$4","LazyResult$3","Processor$2","Root$5","root","list$2","list_1","Container$3","list$1","Rule$3","rule","Declaration$2","tokenizer2","Comment$2","AtRule$2","Root$4","Rule$2","SAFE_COMMENT_NEIGHBOR","findLastWithPosition","Parser$1","parser","Container$2","Input$2","parse$3","parse_1","isClean","my","MapGenerator$1","stringify$2","Container$1","Document$2","warnOnce$1","Result$2","parse$2","Root$3","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","NOT_VISITORS","CHILDREN","isPromise","getEvents","toStack","cleanMarks","postcss$2","LazyResult$2","lazyResult","stringify$1","warnOnce2","parse$1","Result$1","NoWorkResult$1","noWorkResult","LazyResult$1","Document$1","Root$2","Processor$1","processor","Declaration$1","Comment$1","AtRule$1","Input$1","Root$1","Rule$1","fromJSON$1","fromJSON_1","stringify$5","fromJSON","parse","list","postcss","postcss_1","postcss$1","__defProp","__defNormalProp","__publicField","patch","StackFrame","lineNumber","columnNumber","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","ErrorStackParser","urlLike","regExp","filtered","sanitizedLine","location","locationParts","functionName","fileName","functionNameRegex","matches","lineRE","functionCall","pathToSelector","domSiblings","sibling","isObject","isObjTooDeep","limit","stringify","stringifyOptions","thisPos","shouldIgnore","toString","eventResult","eventValue","_obj","defaultLogOptions","initLogObserver","logOptions","loggerType","logger","logCount","inStack","cancelHandlers","trace","stackFrame","unhandledrejectionHandler","levelType","_logger","level","argsForPayload","PLUGIN_NAME","getRecordConsolePlugin","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","val","config","first","Item","schedule","isThenable","_then","oType","notify","notifyIsolated","chain","ret","defWrapper","MakeDefWrapper","iteratePromises","resolver","rejecter","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","msgs","PromisePolyfill","MAX_RECORDING_MS","MAX_VALUE_FOR_MIN_RECORDING_MS","ArrayProto","FuncProto","ObjProto","slice","hasOwnProperty","windowConsole","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","console","log_func_with_prefix","prefix","console_with_prefix","bound","iterable","results","found","needle","subclass","superclass","encoded","pad","mixed_val","escapable","c","holder","gap","mind","partial","at","ch","escapee","hex","uffff","white","word","object","b64","o1","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","stringl","c1","uuid","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","regexS","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","getElementsBySelector","foundCount","elements","currentContextIndex","currentContext","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","extra_props","batchedThrottle","waitMs","timeoutPromise","throttledItems","Promise","returnValue","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","tld","isOnline","onLine","NOOP_FUNC","urlMatchesRegexList","regexList","JSONStringify","JSONParse","canUseCompressionStream","version","IDBStorageWrapper","dbName","storeName","versionData","storeNamesInDb","openRequest","ev","db","dbOrError","mode","storeCb","doTransaction","transaction","objectStore","req","MIXPANEL_BROWSER_DB_NAME","RECORDING_EVENTS_STORE_NAME","RECORDING_REGISTRY_STORE_NAME","RECORDER_VERSION_DATA","GDPR_DEFAULT_PERSISTENCE_PREFIX","hasOptedOut","_hasDoNotTrackFlagOn","optedOut","_getStorageValue","addOptOutCheckMixpanelLib","_addOptOutCheck","_getStorage","_getStorageKey","_getOptOutCheckPersistenceType","persistenceType","persistencePrefix","writtenTo","hasFlag","nav","hasDntOn","dntValue","getConfigValue","ignoreDnt","SharedLock","lockedCB","pid","startTime","pollIntervalMS","timeoutMS","keyX","keyY","keyZ","delay","waitFor","predicate","getSetY","valY","criticalSection","removeLock","LocalStorageWrapper","storageOverride","RequestQueue","storageKey","queueEntry","flushInterval","queueEntries","enqueueItem","storedQueue","succeeded","batchSize","batch","idsInBatch","filterOutIDsAndInvalid","items","idSet","filteredItems","removeFromStorage","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","MAX_RETRY_INTERVAL_MS","RequestBatcher","flushMS","currentBatchSize","attemptSecondaryFlush","dataForRequest","transformedItems","addPayload","itemId","removeItemsFromQueue","batchSendCallback","res","retryMS","halvedBatchSize","requestOptions","isRecordingExpired","serializedRecording","RECORD_ENQUEUE_THROTTLE_MS","validateAllowedOrigins","valid","elementLooksSensitive","sensitiveNameRegex","COMMON_MASK_CLASSES_SELECTOR","RRWEB_PASSWORD_ATTRIBUTE","ALWAYS_MASKED_INPUT_TYPES","normalizeSelectors","getPrivacyConfig","mixpanelInstance","privacyConfig","maskInputSelector","unmaskInputSelector","unmaskTextSelector","maskAllText","legacyMaskTextClass","textMaskingSelectors","classSelector","elementMatchesSelector","shouldMaskInput","inputType","autocomplete","shouldMaskText","getTimeOrigin","defaultNetworkOptions","isNavigationTiming","isResourceTiming","findLast","replacementFactory","MAX_BODY_SIZE","truncateBody","initPerformanceObserver","initialPerformanceEntries","entries","performanceEntries","shouldRecordHeader","recordHeaders","headerName","shouldRecordBody","recordBodyUrls","tryReadXHRBody","tryReadFetchBody","txt","reason","getRequestPerformanceEntry","initiatorType","attempt","urlPerformanceEntries","performanceEntry","initXhrObserver","restorePatch","originalOpen","async","username","password","xhr","networkRequest","requestHeaders","originalSetRequestHeader","header","originalSend","responseHeaders","rawHeaders","headers","colonIndex","request","buildRecordedRequest","initFetchObserver","originalFetch","originalFetchPromise","requestBodyPromise","responseBodyResolve","responseBodyPromise","response","initNetworkObserver","networkOptions","requests","shouldIgnoreUrl","performanceObserver","xhrObserver","fetchObserver","NETWORK_PLUGIN_NAME","getRecordNetworkPlugin","CompressionStream","RECORDER_BATCHER_LIB_CONFIG","ACTIVE_SOURCES","isUserEvent","SessionRecording","usePersistence","userIdInfo","deviceId","userId","configVar","shouldStopBatcher","resetIdleTimeout","idleTimeoutMs","ignoreRequestUrls","maxTimeoutMs","skipFlush","flushPromise","onOptOut","tabId","currentReplayId","reqParams","reqBody","onSuccess","responseBody","apiHost","numEvents","replayId","batchStartTime","batchEndTime","hasFullSnapshot","replayLengthMs","eventsJson","sendUncompressed","jsonStream","gzipStream","compressedBlob","configValue","shouldMaskFn","shouldMask","textLength","RecordingRegistry","serializedRecordings","unloadPromises","sessionRecording","MixpanelRecorder","rrwebRecord","sharedLockStorage","onIdleTimeout","onMaxLengthReached","onBatchSent","sessionRecordingOptions","disableActiveRecording","stopRecordingPromise","startNewIfInactive","activeSerializedRecording"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"mixpanel-recorder.min.js","sources":["../src/window.js","../src/config.js","rrweb-compiled.js","../src/promise-polyfill.js","../src/utils.js","../src/storage/indexed-db.js","../src/recorder/idb-config.js","../src/shared-lock.js","../src/storage/local-storage.js","../src/request-queue.js","../src/request-batcher.js","../src/recorder/utils.js","../src/autocapture/utils.js","../src/recorder/masking.js","../src/recorder/rrweb-network-plugin.js","../src/recorder/session-recording.js","../src/recorder/recording-registry.js","../src/consent-gate.js","../src/recorder/recorder.js","../src/recorder/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.85.0-rc1'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function construct(Parent, args, Class) {\n var a = [\n null\n ];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _set_prototype_of(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n return Constructor;\n}\nfunction _extends() {\n _extends = Object.assign || function(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i];\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _get_prototype_of(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _set_prototype_of(o, p);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function wrapNativeSuper(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _set_prototype_of(Wrapper, Class);\n };\n return _wrap_native_super(Class);\n}\nfunction _is_native_reflect_construct() {\n try {\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike) {\n if (it) o = it;\n var i = 0;\n return function() {\n if (i >= o.length) {\n return {\n done: true\n };\n }\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction _ts_values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = function(obj, key, value) {\n return key in obj ? __defProp$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1 = function(obj, key, value) {\n return __defNormalProp$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar _a;\nvar __defProp$1$1 = Object.defineProperty;\nvar __defNormalProp$1$1 = function(obj, key, value) {\n return key in obj ? __defProp$1$1(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField$1$1 = function(obj, key, value) {\n return __defNormalProp$1$1(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nvar NodeType$3 = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType$3 || {});\nvar testableAccessors$1 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$1 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$1 = {};\nvar isAngularZonePresent$1 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key]) return untaintedBasePrototype$1[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$1()) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$1[cacheKey]) return untaintedAccessorCache$1[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$1[cacheKey]) return untaintedMethodCache$1[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$1(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nfunction patch$1$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1,\n patch: patch$1$1\n};\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n var hostEl = // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null;\n return Boolean(hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2);\n}\nfunction isNativeShadowDom(shadowRoot2) {\n return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(/\\sbackground-clip:\\s*text;/g, \" -webkit-background-clip: text; background-clip: text;\");\n }\n return cssText;\n}\nfunction escapeImportStatement(rule2) {\n var cssText = rule2.cssText;\n if (cssText.split('\"').length < 3) return cssText;\n var statement = [\n \"@import\",\n \"url(\" + JSON.stringify(rule2.href) + \")\"\n ];\n if (rule2.layerName === \"\") {\n statement.push(\"layer\");\n } else if (rule2.layerName) {\n statement.push(\"layer(\" + rule2.layerName + \")\");\n }\n if (rule2.supportsText) {\n statement.push(\"supports(\" + rule2.supportsText + \")\");\n }\n if (rule2.media.length) {\n statement.push(rule2.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n var rules2 = s2.rules || s2.cssRules;\n if (!rules2) {\n return null;\n }\n var sheetHref = s2.href;\n if (!sheetHref && s2.ownerNode && s2.ownerNode.ownerDocument) {\n sheetHref = s2.ownerNode.ownerDocument.location.href;\n }\n var stringifiedRules = Array.from(rules2, function(rule2) {\n return stringifyRule(rule2, sheetHref);\n }).join(\"\");\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule2, sheetHref) {\n if (isCSSImportRule(rule2)) {\n var importStringified;\n try {\n importStringified = // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule2);\n } catch (error) {\n importStringified = rule2.cssText;\n }\n if (rule2.styleSheet.href) {\n return absolutifyURLs(importStringified, rule2.styleSheet.href);\n }\n return importStringified;\n } else {\n var ruleStringified = rule2.cssText;\n if (isCSSStyleRule(rule2) && rule2.selectorText.includes(\":\")) {\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\nfunction fixSafariColons(cssStringified) {\n var regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule2) {\n return \"styleSheet\" in rule2;\n}\nfunction isCSSStyleRule(rule2) {\n return \"selectorText\" in rule2;\n}\nvar Mirror = /*#__PURE__*/ function() {\n function Mirror() {\n __publicField$1$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n var _proto = Mirror.prototype;\n _proto.getId = function getId(n2) {\n var _a2;\n if (!n2) return -1;\n var id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id != null ? id : -1;\n };\n _proto.getNode = function getNode(id) {\n return this.idNodeMap.get(id) || null;\n };\n _proto.getIds = function getIds() {\n return Array.from(this.idNodeMap.keys());\n };\n _proto.getMeta = function getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n };\n // removes the node from idNodeMap\n // if permanent is true, also removes from nodeMetaMap\n _proto.removeNodeFromMap = function removeNodeFromMap(n2, permanent) {\n var _this = this;\n if (permanent === void 0) permanent = false;\n var id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (permanent) this.nodeMetaMap.delete(n2);\n if (n2.childNodes) {\n n2.childNodes.forEach(function(childNode) {\n return _this.removeNodeFromMap(childNode, permanent);\n });\n }\n };\n _proto.has = function has(id) {\n return this.idNodeMap.has(id);\n };\n _proto.hasNode = function hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n };\n _proto.add = function add(n2, meta) {\n var id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n };\n _proto.replace = function replace(id, n2) {\n var oldNode = this.getNode(id);\n if (oldNode) {\n var meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n };\n _proto.reset = function reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n };\n return Mirror;\n}();\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue(param) {\n var element = param.element, maskInputOptions = param.maskInputOptions, tagName = param.tagName, type = param.type, value = param.value, maskInputFn = param.maskInputFn;\n var text = value || \"\";\n var actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nvar ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n var ctx = canvas.getContext(\"2d\");\n if (!ctx) return true;\n var chunkSize = 50;\n for(var x2 = 0; x2 < canvas.width; x2 += chunkSize){\n for(var y = 0; y < canvas.height; y += chunkSize){\n var getImageData = ctx.getImageData;\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n var pixelBuffer = new Uint32Array(// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(ctx, x2, y, Math.min(chunkSize, canvas.width - x2), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some(function(pixel) {\n return pixel !== 0;\n })) return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n var type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n var url;\n try {\n url = new URL(path, baseURL != null ? baseURL : window.location.href);\n } catch (err) {\n return null;\n }\n var regex = /\\.([0-9a-z]+)(?:$)/i;\n var match = url.pathname.match(regex);\n var _ref;\n return (_ref = match == null ? void 0 : match[1]) != null ? _ref : null;\n}\nfunction extractOrigin(url) {\n var origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nvar URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nvar URL_WWW_MATCH = /^www\\..*/i;\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n return (cssText || \"\").replace(URL_IN_CSS_REF, function(origin, quote1, path1, quote2, path2, path3) {\n var filePath = path1 || path2 || path3;\n var maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (DATA_URI.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (filePath[0] === \"/\") {\n return \"url(\" + maybeQuote + (extractOrigin(href) + filePath) + maybeQuote + \")\";\n }\n var stack = href.split(\"/\");\n var parts = filePath.split(\"/\");\n stack.pop();\n for(var _iterator = _create_for_of_iterator_helper_loose(parts), _step; !(_step = _iterator()).done;){\n var part = _step.value;\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return \"url(\" + maybeQuote + stack.join(\"/\") + maybeQuote + \")\";\n });\n}\nfunction normalizeCssString(cssText, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n if (_testNoPxNorm) {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\");\n } else {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\").replace(/0px/g, \"0\");\n }\n}\nfunction splitCssText(cssText, style, _testNoPxNorm) {\n if (_testNoPxNorm === void 0) _testNoPxNorm = false;\n var childNodes2 = Array.from(style.childNodes);\n var splits = [];\n var iterCount = 0;\n if (childNodes2.length > 1 && cssText && typeof cssText === \"string\") {\n var cssTextNorm = normalizeCssString(cssText, _testNoPxNorm);\n var normFactor = cssTextNorm.length / cssText.length;\n for(var i2 = 1; i2 < childNodes2.length; i2++){\n if (childNodes2[i2].textContent && typeof childNodes2[i2].textContent === \"string\") {\n var textContentNorm = normalizeCssString(childNodes2[i2].textContent, _testNoPxNorm);\n var jLimit = 100;\n var j = 3;\n for(; j < textContentNorm.length; j++){\n if (// keep consuming css identifiers (to get a decent chunk more quickly)\n textContentNorm[j].match(/[a-zA-Z0-9]/) || // substring needs to be unique to this section\n textContentNorm.indexOf(textContentNorm.substring(0, j), 1) !== -1) {\n continue;\n }\n break;\n }\n for(; j < textContentNorm.length; j++){\n var startSubstring = textContentNorm.substring(0, j);\n var cssNormSplits = cssTextNorm.split(startSubstring);\n var splitNorm = -1;\n if (cssNormSplits.length === 2) {\n splitNorm = cssNormSplits[0].length;\n } else if (cssNormSplits.length > 2 && cssNormSplits[0] === \"\" && childNodes2[i2 - 1].textContent !== \"\") {\n splitNorm = cssTextNorm.indexOf(startSubstring, 1);\n } else if (cssNormSplits.length === 1) {\n startSubstring = startSubstring.substring(0, startSubstring.length - 1);\n cssNormSplits = cssTextNorm.split(startSubstring);\n if (cssNormSplits.length <= 1) {\n splits.push(cssText);\n return splits;\n }\n j = jLimit + 1;\n } else if (j === textContentNorm.length - 1) {\n splitNorm = cssTextNorm.indexOf(startSubstring);\n }\n if (cssNormSplits.length >= 2 && j > jLimit) {\n var prevTextContent = childNodes2[i2 - 1].textContent;\n if (prevTextContent && typeof prevTextContent === \"string\") {\n var prevMinLength = normalizeCssString(prevTextContent).length;\n splitNorm = cssTextNorm.indexOf(startSubstring, prevMinLength);\n }\n if (splitNorm === -1) {\n splitNorm = cssNormSplits[0].length;\n }\n }\n if (splitNorm !== -1) {\n var k = Math.floor(splitNorm / normFactor);\n for(; k > 0 && k < cssText.length;){\n iterCount += 1;\n if (iterCount > 50 * childNodes2.length) {\n splits.push(cssText);\n return splits;\n }\n var normPart = normalizeCssString(cssText.substring(0, k), _testNoPxNorm);\n if (normPart.length === splitNorm) {\n splits.push(cssText.substring(0, k));\n cssText = cssText.substring(k);\n cssTextNorm = cssTextNorm.substring(splitNorm);\n break;\n } else if (normPart.length < splitNorm) {\n k += Math.max(1, Math.floor((splitNorm - normPart.length) / normFactor));\n } else {\n k -= Math.max(1, Math.floor((normPart.length - splitNorm) * normFactor));\n }\n }\n break;\n }\n }\n }\n }\n }\n splits.push(cssText);\n return splits;\n}\nfunction markCssSplits(cssText, style) {\n return splitCssText(cssText, style).join(\"/* rr_split */\");\n}\nvar _id = 1;\nvar tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nvar IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (_instanceof(element, HTMLFormElement)) {\n return \"form\";\n }\n var processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nvar canvasService;\nvar canvasCtx;\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n var pos = 0;\n function collectCharacters(regEx) {\n var chars2;\n var match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n var output = [];\n while(true){\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n var url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n var descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n var inParens = false;\n while(true){\n var c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nvar cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n var a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absolutifyURLs(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for(var eIndex = element.classList.length; eIndex--;){\n var className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {}\n return false;\n}\nfunction classMatchesRegex$1(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex$1(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction needMaskingText(node2, maskTextClass, maskTextSelector, checkAncestors) {\n var el;\n if (isElement(node2)) {\n el = node2;\n if (!index$1.childNodes(el).length) {\n return false;\n }\n } else if (index$1.parentElement(node2) === null) {\n return false;\n } else {\n el = index$1.parentElement(node2);\n }\n try {\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(\".\" + maskTextClass)) return true;\n } else {\n if (el.classList.contains(maskTextClass)) return true;\n }\n } else {\n if (classMatchesRegex$1(el, maskTextClass, checkAncestors)) return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector)) return true;\n } else {\n if (el.matches(maskTextSelector)) return true;\n }\n }\n } catch (e2) {}\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n var win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n var fired = false;\n var readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n var blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n var fired = false;\n var styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded) return;\n var timer = setTimeout(function() {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", function() {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, needsMask = options.needsMask, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var rootId = getRootId(doc, mirror2);\n switch(n2.nodeType){\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n compatMode: n2.compatMode\n };\n } else {\n return {\n type: NodeType$3.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$3.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId: rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc: doc,\n blockClass: blockClass,\n blockSelector: blockSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n rootId: rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc: doc,\n needsMask: needsMask,\n maskTextFn: maskTextFn,\n rootId: rootId,\n cssCaptured: cssCaptured\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$3.CDATA,\n textContent: \"\",\n rootId: rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$3.Comment,\n textContent: index$1.textContent(n2) || \"\",\n rootId: rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc)) return void 0;\n var docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n var needsMask = options.needsMask, maskTextFn = options.maskTextFn, rootId = options.rootId, cssCaptured = options.cssCaptured;\n var parent = index$1.parentNode(n2);\n var parentTagName = parent && parent.tagName;\n var textContent2 = \"\";\n var isStyle = parentTagName === \"STYLE\" ? true : void 0;\n var isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isScript) {\n textContent2 = \"SCRIPT_PLACEHOLDER\";\n } else if (!cssCaptured) {\n textContent2 = index$1.textContent(n2);\n if (isStyle && textContent2) {\n textContent2 = absolutifyURLs(textContent2, getHref(options.doc));\n }\n }\n if (!isStyle && !isScript && textContent2 && needsMask) {\n textContent2 = maskTextFn ? maskTextFn(textContent2, index$1.parentElement(n2)) : textContent2.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$3.Text,\n textContent: textContent2 || \"\",\n rootId: rootId\n };\n}\nfunction serializeElementNode(n2, options) {\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskInputFn = options.maskInputFn, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, rootId = options.rootId;\n var needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n var tagName = getValidTagName$1(n2);\n var attributes = {};\n var len = n2.attributes.length;\n for(var i2 = 0; i2 < len; i2++){\n var attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value);\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n var stylesheet = Array.from(doc.styleSheets).find(function(s2) {\n return s2.href === n2.href;\n });\n var cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"style\" && n2.sheet) {\n var cssText1 = stringifyStylesheet(n2.sheet);\n if (cssText1) {\n if (n2.childNodes.length > 1) {\n cssText1 = markCssSplits(cssText1, n2);\n }\n attributes._cssText = cssText1;\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n var value = n2.value;\n var checked = n2.checked;\n if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n attributes.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: value,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n } else if (checked) {\n attributes.checked = checked;\n }\n }\n if ((tagName === \"input\" || tagName === \"textarea\") && attributes.placeholder) {\n attributes.placeholder = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName: tagName,\n value: attributes.placeholder,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes.selected = true;\n } else {\n delete attributes.selected;\n }\n }\n if (tagName === \"dialog\" && n2.open) {\n attributes.rr_open_mode = n2.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes.rr_dataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n } else if (!(\"__context\" in n2)) {\n var canvasDataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n var blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n var image = n2;\n var imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"\";\n var priorCrossOrigin = image.crossOrigin;\n var recordInlineImage = function() {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\"Cannot inline img src=\" + imageSrc + \"! Error: \" + err);\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n var mediaAttributes = attributes;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n var _n2_getBoundingClientRect = n2.getBoundingClientRect(), width = _n2_getBoundingClientRect.width, height = _n2_getBoundingClientRect.height;\n attributes = {\n class: attributes.class,\n rr_width: \"\" + width + \"px\",\n rr_height: \"\" + height + \"px\"\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n if (!n2.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n var isCustomElement;\n try {\n if (customElements.get(tagName)) isCustomElement = true;\n } catch (e2) {}\n return {\n type: NodeType$3.Element,\n tagName: tagName,\n attributes: attributes,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock: needBlock,\n rootId: rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$3.Comment) {\n return true;\n } else if (sn.type === NodeType$3.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" && sn.attributes.as === \"script\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n var doc = options.doc, mirror2 = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _options_skipChild = options.skipChild, skipChild = _options_skipChild === void 0 ? false : _options_skipChild, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, _options_maskInputOptions = options.maskInputOptions, maskInputOptions = _options_maskInputOptions === void 0 ? {} : _options_maskInputOptions, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _options_iframeLoadTimeout = options.iframeLoadTimeout, iframeLoadTimeout = _options_iframeLoadTimeout === void 0 ? 5e3 : _options_iframeLoadTimeout, onStylesheetLoad = options.onStylesheetLoad, _options_stylesheetLoadTimeout = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _options_stylesheetLoadTimeout === void 0 ? 5e3 : _options_stylesheetLoadTimeout, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_newlyAddedElement = options.newlyAddedElement, newlyAddedElement = _options_newlyAddedElement === void 0 ? false : _options_newlyAddedElement, _options_cssCaptured = options.cssCaptured, cssCaptured = _options_cssCaptured === void 0 ? false : _options_cssCaptured;\n var needsMask = options.needsMask;\n var _options_preserveWhiteSpace = options.preserveWhiteSpace, preserveWhiteSpace = _options_preserveWhiteSpace === void 0 ? true : _options_preserveWhiteSpace;\n if (!needsMask) {\n var checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(n2, maskTextClass, maskTextSelector, checkAncestors);\n }\n var _serializedNode = serializeNode(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: newlyAddedElement,\n cssCaptured: cssCaptured\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n var id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$3.Text && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n var serializedNode = Object.assign(_serializedNode, {\n id: id\n });\n mirror2.add(n2, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n var recordChild = !skipChild;\n if (serializedNode.type === NodeType$3.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n var shadowRootEl = index$1.shadowRoot(n2);\n if (shadowRootEl && isNativeShadowDom(shadowRootEl)) serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$3.Document || serializedNode.type === NodeType$3.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n var bypassOptions = {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: skipChild,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n cssCaptured: false\n };\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n else {\n if (serializedNode.type === NodeType$3.Element && serializedNode.attributes._cssText !== void 0 && typeof serializedNode.attributes._cssText === \"string\") {\n bypassOptions.cssCaptured = true;\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(n2))), _step; !(_step = _iterator()).done;){\n var childN = _step.value;\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n var shadowRootEl1 = null;\n if (isElement(n2) && (shadowRootEl1 = index$1.shadowRoot(n2))) {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(index$1.childNodes(shadowRootEl1))), _step1; !(_step1 = _iterator1()).done;){\n var childN1 = _step1.value;\n var serializedChildNode1 = serializeNodeWithId(childN1, bypassOptions);\n if (serializedChildNode1) {\n isNativeShadowDom(shadowRootEl1) && (serializedChildNode1.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode1);\n }\n }\n }\n }\n var parent = index$1.parentNode(n2);\n if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"iframe\") {\n onceIframeLoaded(n2, function() {\n var iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(n2, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n onceStylesheetLoaded(n2, function() {\n if (onStylesheetLoad) {\n var serializedLinkNode = serializeNodeWithId(n2, {\n doc: doc,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n needsMask: needsMask,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n2, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n2, options) {\n var _ref = options || {}, tmp = _ref.mirror, mirror2 = tmp === void 0 ? new Mirror() : tmp, _ref_blockClass = _ref.blockClass, blockClass = _ref_blockClass === void 0 ? \"rr-block\" : _ref_blockClass, _ref_blockSelector = _ref.blockSelector, blockSelector = _ref_blockSelector === void 0 ? null : _ref_blockSelector, _ref_maskTextClass = _ref.maskTextClass, maskTextClass = _ref_maskTextClass === void 0 ? \"rr-mask\" : _ref_maskTextClass, _ref_maskTextSelector = _ref.maskTextSelector, maskTextSelector = _ref_maskTextSelector === void 0 ? null : _ref_maskTextSelector, _ref_inlineStylesheet = _ref.inlineStylesheet, inlineStylesheet = _ref_inlineStylesheet === void 0 ? true : _ref_inlineStylesheet, _ref_inlineImages = _ref.inlineImages, inlineImages = _ref_inlineImages === void 0 ? false : _ref_inlineImages, _ref_recordCanvas = _ref.recordCanvas, recordCanvas = _ref_recordCanvas === void 0 ? false : _ref_recordCanvas, _ref_maskAllInputs = _ref.maskAllInputs, maskAllInputs = _ref_maskAllInputs === void 0 ? false : _ref_maskAllInputs, maskTextFn = _ref.maskTextFn, maskInputFn = _ref.maskInputFn, _ref_slimDOM = _ref.slimDOM, slimDOM = _ref_slimDOM === void 0 ? false : _ref_slimDOM, dataURLOptions = _ref.dataURLOptions, preserveWhiteSpace = _ref.preserveWhiteSpace, onSerialize = _ref.onSerialize, onIframeLoad = _ref.onIframeLoad, iframeLoadTimeout = _ref.iframeLoadTimeout, onStylesheetLoad = _ref.onStylesheetLoad, stylesheetLoadTimeout = _ref.stylesheetLoadTimeout, _ref_keepIframeSrcFn = _ref.keepIframeSrcFn, keepIframeSrcFn = _ref_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _ref_keepIframeSrcFn;\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n var slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n } : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n onStylesheetLoad: onStylesheetLoad,\n stylesheetLoadTimeout: stylesheetLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$1 = {\n exports: {}\n};\nvar x$1 = String;\nvar create$1 = function create$1() {\n return {\n isColorSupported: false,\n reset: x$1,\n bold: x$1,\n dim: x$1,\n italic: x$1,\n underline: x$1,\n inverse: x$1,\n hidden: x$1,\n strikethrough: x$1,\n black: x$1,\n red: x$1,\n green: x$1,\n yellow: x$1,\n blue: x$1,\n magenta: x$1,\n cyan: x$1,\n white: x$1,\n gray: x$1,\n bgBlack: x$1,\n bgRed: x$1,\n bgGreen: x$1,\n bgYellow: x$1,\n bgBlue: x$1,\n bgMagenta: x$1,\n bgCyan: x$1,\n bgWhite: x$1\n };\n};\npicocolors_browser$1.exports = create$1();\npicocolors_browser$1.exports.createColors = create$1;\nvar picocolors_browserExports$1 = picocolors_browser$1.exports;\nvar __viteBrowserExternal$2 = {};\nvar __viteBrowserExternal$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$2\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$1 = /* @__PURE__ */ getAugmentedNamespace$1(__viteBrowserExternal$1$1);\nvar pico$1 = picocolors_browserExports$1;\nvar terminalHighlight$1$1 = require$$2$1;\nvar CssSyntaxError$3$1 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$1.isColorSupported;\n if (terminalHighlight$1$1) {\n if (color) css = terminalHighlight$1$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$1_createColors = pico$1.createColors(true), bold = _pico$1_createColors.bold, gray = _pico$1_createColors.gray, red = _pico$1_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$1 = CssSyntaxError$3$1;\nCssSyntaxError$3$1.default = CssSyntaxError$3$1;\nvar symbols$1 = {};\nsymbols$1.isClean = Symbol(\"isClean\");\nsymbols$1.my = Symbol(\"my\");\nvar DEFAULT_RAW$1 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$1(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$1 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$1[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$1(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$1[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier$1 = Stringifier$2$1;\nStringifier$2$1.default = Stringifier$2$1;\nvar Stringifier$1$1 = stringifier$1;\nfunction stringify$4$1(node2, builder) {\n var str = new Stringifier$1$1(builder);\n str.stringify(node2);\n}\nvar stringify_1$1 = stringify$4$1;\nstringify$4$1.default = stringify$4$1;\nvar isClean$2$1 = symbols$1.isClean, my$2$1 = symbols$1.my;\nvar CssSyntaxError$2$1 = cssSyntaxError$1;\nvar Stringifier2$1 = stringifier$1;\nvar stringify$3$1 = stringify_1$1;\nfunction cloneNode$1(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$1(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$1(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$1 = /*#__PURE__*/ function() {\n function Node2(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$1] = false;\n this[my$2$1] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node2.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$1(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$1(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$1]) {\n this[isClean$2$1] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$1] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2$1();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$1;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node2, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node2;\n}();\nvar node$1 = Node$4$1;\nNode$4$1.default = Node$4$1;\nvar Node$3$1 = node$1;\nvar Declaration$4$1 = /*#__PURE__*/ function(Node$3$1) {\n _inherits(Declaration, Node$3$1);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$1.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3$1);\nvar declaration$1 = Declaration$4$1;\nDeclaration$4$1.default = Declaration$4$1;\nvar urlAlphabet$1 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$1[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$1 = {\n nanoid: nanoid$1$1\n};\nvar SourceMapConsumer$2$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$2$1 = require$$2$1.SourceMapGenerator;\nvar existsSync$1 = require$$2$1.existsSync, readFileSync$1 = require$$2$1.readFileSync;\nvar dirname$1$1 = require$$2$1.dirname, join$1 = require$$2$1.join;\nfunction fromBase64$1(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$1 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$1(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$1(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$1(path);\n if (existsSync$1(path)) {\n this.mapFile = path;\n return readFileSync$1(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$1)) {\n return SourceMapGenerator$2$1.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$1)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$1(dirname$1$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap$1 = PreviousMap$2$1;\nPreviousMap$2$1.default = PreviousMap$2$1;\nvar SourceMapConsumer$1$1 = require$$2$1.SourceMapConsumer, SourceMapGenerator$1$1 = require$$2$1.SourceMapGenerator;\nvar fileURLToPath$1 = require$$2$1.fileURLToPath, pathToFileURL$1$1 = require$$2$1.pathToFileURL;\nvar isAbsolute$1 = require$$2$1.isAbsolute, resolve$1$1 = require$$2$1.resolve;\nvar nanoid$2 = nonSecure$1.nanoid;\nvar terminalHighlight$2 = require$$2$1;\nvar CssSyntaxError$1$1 = cssSyntaxError$1;\nvar PreviousMap$1$1 = previousMap$1;\nvar fromOffsetCache$1 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$1 = Boolean(SourceMapConsumer$1$1 && SourceMapGenerator$1$1);\nvar pathAvailable$1$1 = Boolean(resolve$1$1 && isAbsolute$1);\nvar Input$4$1 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$1(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$1(opts.from);\n }\n }\n if (pathAvailable$1$1 && sourceMapAvailable$1$1) {\n var map = new PreviousMap$1$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$1) {\n result2.input.url = pathToFileURL$1$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$1]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$1] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$1];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$1(from.source)) {\n fromUrl = pathToFileURL$1$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$1) {\n result2.file = fileURLToPath$1(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input$1 = Input$4$1;\nInput$4$1.default = Input$4$1;\nif (terminalHighlight$2 && terminalHighlight$2.registerInput) {\n terminalHighlight$2.registerInput(Input$4$1);\n}\nvar SourceMapConsumer$3 = require$$2$1.SourceMapConsumer, SourceMapGenerator$3 = require$$2$1.SourceMapGenerator;\nvar dirname$2 = require$$2$1.dirname, relative$1 = require$$2$1.relative, resolve$2 = require$$2$1.resolve, sep$1 = require$$2$1.sep;\nvar pathToFileURL$2 = require$$2$1.pathToFileURL;\nvar Input$3$1 = input$1;\nvar sourceMapAvailable$2 = Boolean(SourceMapConsumer$3 && SourceMapGenerator$3);\nvar pathAvailable$2 = Boolean(dirname$2 && resolve$2 && relative$1 && sep$1);\nvar MapGenerator$2$1 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$2(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$3(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$2 && sourceMapAvailable$2 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$3.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$2(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$2(resolve$2(from, this.mapOpts.annotation));\n }\n var path = relative$1(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$1(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$2) {\n var fileURL = pathToFileURL$2(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$1 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator$1 = MapGenerator$2$1;\nvar Node$2$1 = node$1;\nvar Comment$4$1 = /*#__PURE__*/ function(Node$2$1) {\n _inherits(Comment, Node$2$1);\n function Comment(defaults) {\n var _this;\n _this = Node$2$1.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2$1);\nvar comment$1 = Comment$4$1;\nComment$4$1.default = Comment$4$1;\nvar isClean$1$1 = symbols$1.isClean, my$1$1 = symbols$1.my;\nvar Declaration$3$1 = declaration$1;\nvar Comment$3$1 = comment$1;\nvar Node$1$1 = node$1;\nvar parse$4$1, Rule$4$1, AtRule$4$1, Root$6$1;\nfunction cleanSource$1(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$1(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$1(node2) {\n node2[isClean$1$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$1(i2);\n }\n }\n}\nvar Container$7$1 = /*#__PURE__*/ function(Node$1$1) {\n _inherits(Container, Node$1$1);\n function Container() {\n return Node$1$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$1(parse$4$1(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$1(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$1(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$1(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$1(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$1]) Container.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$1]) markDirtyUp$1(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1$1);\nContainer$7$1.registerParse = function(dependant) {\n parse$4$1 = dependant;\n};\nContainer$7$1.registerRule = function(dependant) {\n Rule$4$1 = dependant;\n};\nContainer$7$1.registerAtRule = function(dependant) {\n AtRule$4$1 = dependant;\n};\nContainer$7$1.registerRoot = function(dependant) {\n Root$6$1 = dependant;\n};\nvar container$1 = Container$7$1;\nContainer$7$1.default = Container$7$1;\nContainer$7$1.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$1.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$1.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$1.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$1.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$1.prototype);\n }\n node2[my$1$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$1.rebuild(child);\n });\n }\n};\nvar Container$6$1 = container$1;\nvar LazyResult$4$1, Processor$3$1;\nvar Document$3$1 = /*#__PURE__*/ function(Container$6$1) {\n _inherits(Document2, Container$6$1);\n function Document2(defaults) {\n var _this;\n _this = Container$6$1.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document2.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$1(new Processor$3$1(), this, opts);\n return lazy.stringify();\n };\n return Document2;\n}(Container$6$1);\nDocument$3$1.registerLazyResult = function(dependant) {\n LazyResult$4$1 = dependant;\n};\nDocument$3$1.registerProcessor = function(dependant) {\n Processor$3$1 = dependant;\n};\nvar document$1$1 = Document$3$1;\nDocument$3$1.default = Document$3$1;\nvar printed$1 = {};\nvar warnOnce$2$1 = function warnOnce(message) {\n if (printed$1[message]) return;\n printed$1[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$1 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning$1 = Warning$2$1;\nWarning$2$1.default = Warning$2$1;\nvar Warning$1$1 = warning$1;\nvar Result$3$1 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result$1 = Result$3$1;\nResult$3$1.default = Result$3$1;\nvar SINGLE_QUOTE$1 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$1 = '\"'.charCodeAt(0);\nvar BACKSLASH$1 = \"\\\\\".charCodeAt(0);\nvar SLASH$1 = \"/\".charCodeAt(0);\nvar NEWLINE$1 = \"\\n\".charCodeAt(0);\nvar SPACE$1 = \" \".charCodeAt(0);\nvar FEED$1 = \"\\f\".charCodeAt(0);\nvar TAB$1 = \"\t\".charCodeAt(0);\nvar CR$1 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$1 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$1 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$1 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$1 = \")\".charCodeAt(0);\nvar OPEN_CURLY$1 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$1 = \"}\".charCodeAt(0);\nvar SEMICOLON$1 = \";\".charCodeAt(0);\nvar ASTERISK$1 = \"*\".charCodeAt(0);\nvar COLON$1 = \":\".charCodeAt(0);\nvar AT$1 = \"@\".charCodeAt(0);\nvar RE_AT_END$1 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$1 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$1 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$1 = /[\\da-f]/i;\nvar tokenize$1 = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$1:\n case SPACE$1:\n case TAB$1:\n case CR$1:\n case FEED$1:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$1 || code === NEWLINE$1 || code === TAB$1 || code === CR$1 || code === FEED$1);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$1:\n case CLOSE_SQUARE$1:\n case OPEN_CURLY$1:\n case CLOSE_CURLY$1:\n case COLON$1:\n case SEMICOLON$1:\n case CLOSE_PARENTHESES$1:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$1:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$1 && n2 !== DOUBLE_QUOTE$1 && n2 !== SPACE$1 && n2 !== NEWLINE$1 && n2 !== TAB$1 && n2 !== FEED$1 && n2 !== CR$1) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$1.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$1:\n case DOUBLE_QUOTE$1:\n {\n quote = code === SINGLE_QUOTE$1 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$1){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$1:\n {\n RE_AT_END$1.lastIndex = pos + 1;\n RE_AT_END$1.test(css);\n if (RE_AT_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$1.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$1:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$1){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$1 && code !== SPACE$1 && code !== NEWLINE$1 && code !== TAB$1 && code !== CR$1 && code !== FEED$1) {\n next += 1;\n if (RE_HEX_ESCAPE$1.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$1.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$1) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$1 && css.charCodeAt(pos + 1) === ASTERISK$1) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$1.lastIndex = pos + 1;\n RE_WORD_END$1.test(css);\n if (RE_WORD_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$1.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$1 = container$1;\nvar AtRule$3$1 = /*#__PURE__*/ function(Container$5$1) {\n _inherits(AtRule, Container$5$1);\n function AtRule(defaults) {\n var _this;\n _this = Container$5$1.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_append = Container$5$1.prototype.append).call.apply(_Container$5$1_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$1_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$1_prototype_prepend = Container$5$1.prototype.prepend).call.apply(_Container$5$1_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5$1);\nvar atRule$1 = AtRule$3$1;\nAtRule$3$1.default = AtRule$3$1;\nContainer$5$1.registerAtRule(AtRule$3$1);\nvar Container$4$1 = container$1;\nvar LazyResult$3$1, Processor$2$1;\nvar Root$5$1 = /*#__PURE__*/ function(Container$4$1) {\n _inherits(Root, Container$4$1);\n function Root(defaults) {\n var _this;\n _this = Container$4$1.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$1.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$1.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$1(new Processor$2$1(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4$1);\nRoot$5$1.registerLazyResult = function(dependant) {\n LazyResult$3$1 = dependant;\n};\nRoot$5$1.registerProcessor = function(dependant) {\n Processor$2$1 = dependant;\n};\nvar root$1 = Root$5$1;\nRoot$5$1.default = Root$5$1;\nContainer$4$1.registerRoot(Root$5$1);\nvar list$2$1 = {\n comma: function comma(string) {\n return list$2$1.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$1.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$1 = list$2$1;\nlist$2$1.default = list$2$1;\nvar Container$3$1 = container$1;\nvar list$1$1 = list_1$1;\nvar Rule$3$1 = /*#__PURE__*/ function(Container$3$1) {\n _inherits(Rule, Container$3$1);\n function Rule(defaults) {\n var _this;\n _this = Container$3$1.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3$1);\nvar rule$1 = Rule$3$1;\nRule$3$1.default = Rule$3$1;\nContainer$3$1.registerRule(Rule$3$1);\nvar Declaration$2$1 = declaration$1;\nvar tokenizer2$1 = tokenize$1;\nvar Comment$2$1 = comment$1;\nvar AtRule$2$1 = atRule$1;\nvar Root$4$1 = root$1;\nvar Rule$2$1 = rule$1;\nvar SAFE_COMMENT_NEIGHBOR$1 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$1(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4$1();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$1();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$1();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2$1(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$1();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$1(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$1();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$1[prev] && !SAFE_COMMENT_NEIGHBOR$1[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$1();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser$1 = Parser$1$1;\nvar Container$2$1 = container$1;\nvar Parser2$1 = parser$1;\nvar Input$2$1 = input$1;\nfunction parse$3$1(css, opts) {\n var input2 = new Input$2$1(css, opts);\n var parser2 = new Parser2$1(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$1 = parse$3$1;\nparse$3$1.default = parse$3$1;\nContainer$2$1.registerParse(parse$3$1);\nvar isClean$3 = symbols$1.isClean, my$3 = symbols$1.my;\nvar MapGenerator$1$1 = mapGenerator$1;\nvar stringify$2$1 = stringify_1$1;\nvar Container$1$1 = container$1;\nvar Document$2$1 = document$1$1;\nvar warnOnce$1$1 = warnOnce$2$1;\nvar Result$2$1 = result$1;\nvar parse$2$1 = parse_1$1;\nvar Root$3$1 = root$1;\nvar TYPE_TO_CLASS_NAME$1 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$1 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$1 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$1 = 0;\nfunction isPromise$1(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$1(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$1[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$1,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$1,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$1(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$1,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$1,\n \"RootExit\"\n ];\n } else {\n events = getEvents$1(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$1(node2) {\n node2[isClean$3] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$1(i2);\n });\n return node2;\n}\nvar postcss$2$1 = {};\nvar LazyResult$2$1 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$1(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2$1)) {\n root2 = cleanMarks$1(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$1;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$3]) {\n Container$1$1.rebuild(root2);\n }\n }\n this.result = new Result$2$1(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$1, {\n postcss: postcss$2$1,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$1[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$1[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$1(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$3]) return [\n 3,\n 14\n ];\n root2[isClean$3] = true;\n stack = [\n toStack$1(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$1(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$1(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$1;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$3]){\n root2[isClean$3] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$3]) {\n child[isClean$3] = true;\n stack.push(toStack$1(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$1) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$3] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$3] = true;\n var events = getEvents$1(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$1) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$3]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2$1.registerPostcss = function(dependant) {\n postcss$2$1 = dependant;\n};\nvar lazyResult$1 = LazyResult$2$1;\nLazyResult$2$1.default = LazyResult$2$1;\nRoot$3$1.registerLazyResult(LazyResult$2$1);\nDocument$2$1.registerLazyResult(LazyResult$2$1);\nvar MapGenerator2$1 = mapGenerator$1;\nvar stringify$1$1 = stringify_1$1;\nvar warnOnce2$1 = warnOnce$2$1;\nvar parse$1$1 = parse_1$1;\nvar Result$1$1 = result$1;\nvar NoWorkResult$1$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$1;\n this.result = new Result$1$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2$1(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult$1 = NoWorkResult$1$1;\nNoWorkResult$1$1.default = NoWorkResult$1$1;\nvar NoWorkResult2$1 = noWorkResult$1;\nvar LazyResult$1$1 = lazyResult$1;\nvar Document$1$1 = document$1$1;\nvar Root$2$1 = root$1;\nvar Processor$1$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2$1(this, css, opts);\n } else {\n return new LazyResult$1$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor$1 = Processor$1$1;\nProcessor$1$1.default = Processor$1$1;\nRoot$2$1.registerProcessor(Processor$1$1);\nDocument$1$1.registerProcessor(Processor$1$1);\nvar Declaration$1$1 = declaration$1;\nvar PreviousMap2$1 = previousMap$1;\nvar Comment$1$1 = comment$1;\nvar AtRule$1$1 = atRule$1;\nvar Input$1$1 = input$1;\nvar Root$1$1 = root$1;\nvar Rule$1$1 = rule$1;\nfunction fromJSON$1$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$1(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2$1.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$1(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$1 = fromJSON$1$1;\nfromJSON$1$1.default = fromJSON$1$1;\nvar CssSyntaxError2$1 = cssSyntaxError$1;\nvar Declaration2$1 = declaration$1;\nvar LazyResult2$1 = lazyResult$1;\nvar Container2$1 = container$1;\nvar Processor2$1 = processor$1;\nvar stringify$5$1 = stringify_1$1;\nvar fromJSON$2 = fromJSON_1$1;\nvar Document22 = document$1$1;\nvar Warning2$1 = warning$1;\nvar Comment2$1 = comment$1;\nvar AtRule2$1 = atRule$1;\nvar Result2$1 = result$1;\nvar Input2$1 = input$1;\nvar parse$5 = parse_1$1;\nvar list$3 = list_1$1;\nvar Rule2$1 = rule$1;\nvar Root2$1 = root$1;\nvar Node2$1 = node$1;\nfunction postcss$3() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2$1(plugins);\n}\npostcss$3.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2$1().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$3([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$3.stringify = stringify$5$1;\npostcss$3.parse = parse$5;\npostcss$3.fromJSON = fromJSON$2;\npostcss$3.list = list$3;\npostcss$3.comment = function(defaults) {\n return new Comment2$1(defaults);\n};\npostcss$3.atRule = function(defaults) {\n return new AtRule2$1(defaults);\n};\npostcss$3.decl = function(defaults) {\n return new Declaration2$1(defaults);\n};\npostcss$3.rule = function(defaults) {\n return new Rule2$1(defaults);\n};\npostcss$3.root = function(defaults) {\n return new Root2$1(defaults);\n};\npostcss$3.document = function(defaults) {\n return new Document22(defaults);\n};\npostcss$3.CssSyntaxError = CssSyntaxError2$1;\npostcss$3.Declaration = Declaration2$1;\npostcss$3.Container = Container2$1;\npostcss$3.Processor = Processor2$1;\npostcss$3.Document = Document22;\npostcss$3.Comment = Comment2$1;\npostcss$3.Warning = Warning2$1;\npostcss$3.AtRule = AtRule2$1;\npostcss$3.Result = Result2$1;\npostcss$3.Input = Input2$1;\npostcss$3.Rule = Rule2$1;\npostcss$3.Root = Root2$1;\npostcss$3.Node = Node2$1;\nLazyResult2$1.registerPostcss(postcss$3);\nvar postcss_1$1 = postcss$3;\npostcss$3.default = postcss$3;\nvar postcss$1$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(postcss_1$1);\npostcss$1$1.stringify;\npostcss$1$1.fromJSON;\npostcss$1$1.plugin;\npostcss$1$1.parse;\npostcss$1$1.list;\npostcss$1$1.document;\npostcss$1$1.comment;\npostcss$1$1.atRule;\npostcss$1$1.rule;\npostcss$1$1.decl;\npostcss$1$1.root;\npostcss$1$1.CssSyntaxError;\npostcss$1$1.Declaration;\npostcss$1$1.Container;\npostcss$1$1.Processor;\npostcss$1$1.Document;\npostcss$1$1.Comment;\npostcss$1$1.Warning;\npostcss$1$1.AtRule;\npostcss$1$1.Result;\npostcss$1$1.Input;\npostcss$1$1.Rule;\npostcss$1$1.Root;\npostcss$1$1.Node;\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = function(obj, key, value) {\n return key in obj ? __defProp2(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField2 = function(obj, key, value) {\n return __defNormalProp2(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction getDefaultExportFromCjs$2(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$2(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (_instanceof(this, a22)) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", {\n value: true\n });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$2 = {\n exports: {}\n};\nvar x$2 = String;\nvar create$2 = function create$2() {\n return {\n isColorSupported: false,\n reset: x$2,\n bold: x$2,\n dim: x$2,\n italic: x$2,\n underline: x$2,\n inverse: x$2,\n hidden: x$2,\n strikethrough: x$2,\n black: x$2,\n red: x$2,\n green: x$2,\n yellow: x$2,\n blue: x$2,\n magenta: x$2,\n cyan: x$2,\n white: x$2,\n gray: x$2,\n bgBlack: x$2,\n bgRed: x$2,\n bgGreen: x$2,\n bgYellow: x$2,\n bgBlue: x$2,\n bgMagenta: x$2,\n bgCyan: x$2,\n bgWhite: x$2\n };\n};\npicocolors_browser$2.exports = create$2();\npicocolors_browser$2.exports.createColors = create$2;\nvar picocolors_browserExports$2 = picocolors_browser$2.exports;\nvar __viteBrowserExternal$3 = {};\nvar __viteBrowserExternal$1$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$3\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2$2 = /* @__PURE__ */ getAugmentedNamespace$2(__viteBrowserExternal$1$2);\nvar pico$2 = picocolors_browserExports$2;\nvar terminalHighlight$1$2 = require$$2$2;\nvar CssSyntaxError$3$2 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError2, Error1);\n function CssSyntaxError2(message, line, column, source, file, plugin22) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin22) {\n _this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError2);\n }\n return _this;\n }\n var _proto = CssSyntaxError2.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico$2.isColorSupported;\n if (terminalHighlight$1$2) {\n if (color) css = terminalHighlight$1$2(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico$2_createColors = pico$2.createColors(true), bold = _pico$2_createColors.bold, gray = _pico$2_createColors.gray, red = _pico$2_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError2;\n}(_wrap_native_super(Error));\nvar cssSyntaxError$2 = CssSyntaxError$3$2;\nCssSyntaxError$3$2.default = CssSyntaxError$3$2;\nvar symbols$2 = {};\nsymbols$2.isClean = Symbol(\"isClean\");\nsymbols$2.my = Symbol(\"my\");\nvar DEFAULT_RAW$2 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$2(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2$2 = /*#__PURE__*/ function() {\n function Stringifier2(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier2.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i2 = 0; i2 < node2.nodes.length; i2++){\n var child = node2.nodes[i2];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$2[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize$2(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i2) {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$2[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i2) {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i2) {\n var p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n var parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i2) {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier2;\n}();\nvar stringifier$2 = Stringifier$2$2;\nStringifier$2$2.default = Stringifier$2$2;\nvar Stringifier$1$2 = stringifier$2;\nfunction stringify$4$2(node2, builder) {\n var str = new Stringifier$1$2(builder);\n str.stringify(node2);\n}\nvar stringify_1$2 = stringify$4$2;\nstringify$4$2.default = stringify$4$2;\nvar isClean$2$2 = symbols$2.isClean, my$2$2 = symbols$2.my;\nvar CssSyntaxError$2$2 = cssSyntaxError$2;\nvar Stringifier22 = stringifier$2;\nvar stringify$3$2 = stringify_1$2;\nfunction cloneNode$2(obj, parent) {\n var cloned = new obj.constructor();\n for(var i2 in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n var value = obj[i2];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map(function(j) {\n return cloneNode$2(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$2(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nvar Node$4$2 = /*#__PURE__*/ function() {\n function Node3(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2$2] = false;\n this[my$2$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node3.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s2 = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s2.input.from + \":\" + s2.start.line + \":\" + s2.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode$2(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2$2]) {\n this[isClean$2$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i2 = 0; i2 < index2; i2++){\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier22();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i2) {\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3$2;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i2) {\n result2 += i2;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i2 in opts)data[i2] = opts[i2];\n return result2.warn(text, data);\n };\n _create_class(Node3, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node3;\n}();\nvar node$2 = Node$4$2;\nNode$4$2.default = Node$4$2;\nvar Node$3$2 = node$2;\nvar Declaration$4$2 = /*#__PURE__*/ function(Node$3$2) {\n _inherits(Declaration2, Node$3$2);\n function Declaration2(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3$2.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration2, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration2;\n}(Node$3$2);\nvar declaration$2 = Declaration$4$2;\nDeclaration$4$2.default = Declaration$4$2;\nvar urlAlphabet$2 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1$2 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i2 = size;\n while(i2--){\n id += urlAlphabet$2[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$2 = {\n nanoid: nanoid$1$2\n};\nvar SourceMapConsumer$2$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$2$2 = require$$2$2.SourceMapGenerator;\nvar existsSync$2 = require$$2$2.existsSync, readFileSync$2 = require$$2$2.readFileSync;\nvar dirname$1$2 = require$$2$2.dirname, join$2 = require$$2$2.join;\nfunction fromBase64$2(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2$2 = /*#__PURE__*/ function() {\n function PreviousMap2(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$2(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap2.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$2(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1$2(path);\n if (existsSync$2(path)) {\n this.mapFile = path;\n return readFileSync$2(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2$2)) {\n return SourceMapGenerator$2$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join$2(dirname$1$2(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap2;\n}();\nvar previousMap$2 = PreviousMap$2$2;\nPreviousMap$2$2.default = PreviousMap$2$2;\nvar SourceMapConsumer$1$2 = require$$2$2.SourceMapConsumer, SourceMapGenerator$1$2 = require$$2$2.SourceMapGenerator;\nvar fileURLToPath$2 = require$$2$2.fileURLToPath, pathToFileURL$1$2 = require$$2$2.pathToFileURL;\nvar isAbsolute$2 = require$$2$2.isAbsolute, resolve$1$2 = require$$2$2.resolve;\nvar nanoid$3 = nonSecure$2.nanoid;\nvar terminalHighlight$3 = require$$2$2;\nvar CssSyntaxError$1$2 = cssSyntaxError$2;\nvar PreviousMap$1$2 = previousMap$2;\nvar fromOffsetCache$2 = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1$2 = Boolean(SourceMapConsumer$1$2 && SourceMapGenerator$1$2);\nvar pathAvailable$1$2 = Boolean(resolve$1$2 && isAbsolute$2);\nvar Input$4$2 = /*#__PURE__*/ function() {\n function Input2(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$2 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$2(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$2(opts.from);\n }\n }\n if (pathAvailable$1$2 && sourceMapAvailable$1$2) {\n var map = new PreviousMap$1$2(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input2.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$2(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1$2(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1$2) {\n result2.input.url = pathToFileURL$1$2(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache$2]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i2 = 0, l2 = lines.length; i2 < l2; i2++){\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$2] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$2];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$2(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute$2(from.source)) {\n fromUrl = pathToFileURL$1$2(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1$2(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$2) {\n result2.file = fileURLToPath$2(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input2, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input2;\n}();\nvar input$2 = Input$4$2;\nInput$4$2.default = Input$4$2;\nif (terminalHighlight$3 && terminalHighlight$3.registerInput) {\n terminalHighlight$3.registerInput(Input$4$2);\n}\nvar SourceMapConsumer$4 = require$$2$2.SourceMapConsumer, SourceMapGenerator$4 = require$$2$2.SourceMapGenerator;\nvar dirname$3 = require$$2$2.dirname, relative$2 = require$$2$2.relative, resolve$3 = require$$2$2.resolve, sep$2 = require$$2$2.sep;\nvar pathToFileURL$3 = require$$2$2.pathToFileURL;\nvar Input$3$2 = input$2;\nvar sourceMapAvailable$3 = Boolean(SourceMapConsumer$4 && SourceMapGenerator$4);\nvar pathAvailable$3 = Boolean(dirname$3 && resolve$3 && relative$2 && sep$2);\nvar MapGenerator$2$2 = /*#__PURE__*/ function() {\n function MapGenerator2(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator2.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname$3(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$4(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i2 = this.root.nodes.length - 1; i2 >= 0; i2--){\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable$3 && sourceMapAvailable$3 && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i2) {\n result2 += i2;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$4.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator$4({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i2) {\n return i2.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname$3(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$3(resolve$3(from, this.mapOpts.annotation));\n }\n var path = relative$2(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3$2(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$3) {\n var fileURL = pathToFileURL$3(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$2 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator2;\n}();\nvar mapGenerator$2 = MapGenerator$2$2;\nvar Node$2$2 = node$2;\nvar Comment$4$2 = /*#__PURE__*/ function(Node$2$2) {\n _inherits(Comment2, Node$2$2);\n function Comment2(defaults) {\n var _this;\n _this = Node$2$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment2;\n}(Node$2$2);\nvar comment$2 = Comment$4$2;\nComment$4$2.default = Comment$4$2;\nvar isClean$1$2 = symbols$2.isClean, my$1$2 = symbols$2.my;\nvar Declaration$3$2 = declaration$2;\nvar Comment$3$2 = comment$2;\nvar Node$1$2 = node$2;\nvar parse$4$2, Rule$4$2, AtRule$4$2, Root$6$2;\nfunction cleanSource$2(nodes) {\n return nodes.map(function(i2) {\n if (i2.nodes) i2.nodes = cleanSource$2(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$2(node2) {\n node2[isClean$1$2] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n markDirtyUp$2(i2);\n }\n }\n}\nvar Container$7$2 = /*#__PURE__*/ function(Node$1$2) {\n _inherits(Container2, Node$1$2);\n function Container2() {\n return Node$1$2.apply(this, arguments) || this;\n }\n var _proto = Container2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1$2.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i2) {\n if (typeof i2 === \"function\") {\n return function(child, index2) {\n return i2(child.toProxy(), index2);\n };\n } else {\n return i2;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i2) {\n return i2.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource$2(parse$4$2(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i21 = _step1.value;\n if (i21.parent) i21.parent.removeChild(i21, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3$2(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4$2(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4$2(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3$2(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i2) {\n if (!i2[my$1$2]) Container2.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$2]) markDirtyUp$2(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = _this.proxyOf;\n return i2;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i2) {\n var result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i2) {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i2) {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i2) {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk(function(child, i2) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n };\n _create_class(Container2, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container2;\n}(Node$1$2);\nContainer$7$2.registerParse = function(dependant) {\n parse$4$2 = dependant;\n};\nContainer$7$2.registerRule = function(dependant) {\n Rule$4$2 = dependant;\n};\nContainer$7$2.registerAtRule = function(dependant) {\n AtRule$4$2 = dependant;\n};\nContainer$7$2.registerRoot = function(dependant) {\n Root$6$2 = dependant;\n};\nvar container$2 = Container$7$2;\nContainer$7$2.default = Container$7$2;\nContainer$7$2.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$2.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$2.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$2.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$2.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$2.prototype);\n }\n node2[my$1$2] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7$2.rebuild(child);\n });\n }\n};\nvar Container$6$2 = container$2;\nvar LazyResult$4$2, Processor$3$2;\nvar Document$3$2 = /*#__PURE__*/ function(Container$6$2) {\n _inherits(Document23, Container$6$2);\n function Document23(defaults) {\n var _this;\n _this = Container$6$2.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document23.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4$2(new Processor$3$2(), this, opts);\n return lazy.stringify();\n };\n return Document23;\n}(Container$6$2);\nDocument$3$2.registerLazyResult = function(dependant) {\n LazyResult$4$2 = dependant;\n};\nDocument$3$2.registerProcessor = function(dependant) {\n Processor$3$2 = dependant;\n};\nvar document$1$2 = Document$3$2;\nDocument$3$2.default = Document$3$2;\nvar printed$2 = {};\nvar warnOnce$2$2 = function warnOnce2(message) {\n if (printed$2[message]) return;\n printed$2[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2$2 = /*#__PURE__*/ function() {\n function Warning2(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning2.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning2;\n}();\nvar warning$2 = Warning$2$2;\nWarning$2$2.default = Warning$2$2;\nvar Warning$1$2 = warning$2;\nvar Result$3$2 = /*#__PURE__*/ function() {\n function Result2(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result2.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1$2(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i2) {\n return i2.type === \"warning\";\n });\n };\n _create_class(Result2, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result2;\n}();\nvar result$2 = Result$3$2;\nResult$3$2.default = Result$3$2;\nvar SINGLE_QUOTE$2 = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE$2 = '\"'.charCodeAt(0);\nvar BACKSLASH$2 = \"\\\\\".charCodeAt(0);\nvar SLASH$2 = \"/\".charCodeAt(0);\nvar NEWLINE$2 = \"\\n\".charCodeAt(0);\nvar SPACE$2 = \" \".charCodeAt(0);\nvar FEED$2 = \"\\f\".charCodeAt(0);\nvar TAB$2 = \"\t\".charCodeAt(0);\nvar CR$2 = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE$2 = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE$2 = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES$2 = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES$2 = \")\".charCodeAt(0);\nvar OPEN_CURLY$2 = \"{\".charCodeAt(0);\nvar CLOSE_CURLY$2 = \"}\".charCodeAt(0);\nvar SEMICOLON$2 = \";\".charCodeAt(0);\nvar ASTERISK$2 = \"*\".charCodeAt(0);\nvar COLON$2 = \":\".charCodeAt(0);\nvar AT$2 = \"@\".charCodeAt(0);\nvar RE_AT_END$2 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END$2 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET$2 = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE$2 = /[\\da-f]/i;\nvar tokenize$2 = function tokenizer2(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n2, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE$2:\n case SPACE$2:\n case TAB$2:\n case CR$2:\n case FEED$2:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE$2 || code === NEWLINE$2 || code === TAB$2 || code === CR$2 || code === FEED$2);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$2:\n case CLOSE_SQUARE$2:\n case OPEN_CURLY$2:\n case CLOSE_CURLY$2:\n case COLON$2:\n case SEMICOLON$2:\n case CLOSE_PARENTHESES$2:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES$2:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$2 && n2 !== DOUBLE_QUOTE$2 && n2 !== SPACE$2 && n2 !== NEWLINE$2 && n2 !== TAB$2 && n2 !== FEED$2 && n2 !== CR$2) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$2.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$2:\n case DOUBLE_QUOTE$2:\n {\n quote = code === SINGLE_QUOTE$2 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH$2){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT$2:\n {\n RE_AT_END$2.lastIndex = pos + 1;\n RE_AT_END$2.test(css);\n if (RE_AT_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$2.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH$2:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH$2){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$2 && code !== SPACE$2 && code !== NEWLINE$2 && code !== TAB$2 && code !== CR$2 && code !== FEED$2) {\n next += 1;\n if (RE_HEX_ESCAPE$2.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE$2.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$2) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH$2 && css.charCodeAt(pos + 1) === ASTERISK$2) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END$2.lastIndex = pos + 1;\n RE_WORD_END$2.test(css);\n if (RE_WORD_END$2.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$2.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5$2 = container$2;\nvar AtRule$3$2 = /*#__PURE__*/ function(Container$5$2) {\n _inherits(AtRule2, Container$5$2);\n function AtRule2(defaults) {\n var _this;\n _this = Container$5$2.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule2.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_append = Container$5$2.prototype.append).call.apply(_Container$5$2_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5$2_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5$2_prototype_prepend = Container$5$2.prototype.prepend).call.apply(_Container$5$2_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule2;\n}(Container$5$2);\nvar atRule$2 = AtRule$3$2;\nAtRule$3$2.default = AtRule$3$2;\nContainer$5$2.registerAtRule(AtRule$3$2);\nvar Container$4$2 = container$2;\nvar LazyResult$3$2, Processor$2$2;\nvar Root$5$2 = /*#__PURE__*/ function(Container$4$2) {\n _inherits(Root2, Container$4$2);\n function Root2(defaults) {\n var _this;\n _this = Container$4$2.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root2.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4$2.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4$2.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3$2(new Processor$2$2(), this, opts);\n return lazy.stringify();\n };\n return Root2;\n}(Container$4$2);\nRoot$5$2.registerLazyResult = function(dependant) {\n LazyResult$3$2 = dependant;\n};\nRoot$5$2.registerProcessor = function(dependant) {\n Processor$2$2 = dependant;\n};\nvar root$2 = Root$5$2;\nRoot$5$2.default = Root$5$2;\nContainer$4$2.registerRoot(Root$5$2);\nvar list$2$2 = {\n comma: function comma(string) {\n return list$2$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$2 = list$2$2;\nlist$2$2.default = list$2$2;\nvar Container$3$2 = container$2;\nvar list$1$2 = list_1$2;\nvar Rule$3$2 = /*#__PURE__*/ function(Container$3$2) {\n _inherits(Rule2, Container$3$2);\n function Rule2(defaults) {\n var _this;\n _this = Container$3$2.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule2, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1$2.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule2;\n}(Container$3$2);\nvar rule$2 = Rule$3$2;\nRule$3$2.default = Rule$3$2;\nContainer$3$2.registerRule(Rule$3$2);\nvar Declaration$2$2 = declaration$2;\nvar tokenizer22 = tokenize$2;\nvar Comment$2$2 = comment$2;\nvar AtRule$2$2 = atRule$2;\nvar Root$4$2 = root$2;\nvar Rule$2$2 = rule$2;\nvar SAFE_COMMENT_NEIGHBOR$2 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$2(tokens) {\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n var token = tokens[i2];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1$2 = /*#__PURE__*/ function() {\n function Parser2(input2) {\n this.input = input2;\n this.root = new Root$4$2();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser2.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i2 = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer22(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition$2(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i2 = tokens.length - 1; i2 >= 0; i2--){\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i2; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i2) {\n return i2[0] !== \"space\" && i2[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i2) {\n return i2[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i2 = 0; i2 < length; i2 += 1){\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$2[prev] && !SAFE_COMMENT_NEIGHBOR$2[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i2) {\n return all + i2[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i2 = from; i2 < tokens.length; i2++){\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser2;\n}();\nvar parser$2 = Parser$1$2;\nvar Container$2$2 = container$2;\nvar Parser22 = parser$2;\nvar Input$2$2 = input$2;\nfunction parse$3$2(css, opts) {\n var input2 = new Input$2$2(css, opts);\n var parser2 = new Parser22(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$2 = parse$3$2;\nparse$3$2.default = parse$3$2;\nContainer$2$2.registerParse(parse$3$2);\nvar isClean$4 = symbols$2.isClean, my$4 = symbols$2.my;\nvar MapGenerator$1$2 = mapGenerator$2;\nvar stringify$2$2 = stringify_1$2;\nvar Container$1$2 = container$2;\nvar Document$2$2 = document$1$2;\nvar warnOnce$1$2 = warnOnce$2$2;\nvar Result$2$2 = result$2;\nvar parse$2$2 = parse_1$2;\nvar Root$3$2 = root$2;\nvar TYPE_TO_CLASS_NAME$2 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS$2 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS$2 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN$2 = 0;\nfunction isPromise$2(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$2(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME$2[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$2,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN$2,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack$2(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN$2,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN$2,\n \"RootExit\"\n ];\n } else {\n events = getEvents$2(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$2(node2) {\n node2[isClean$4] = false;\n if (node2.nodes) node2.nodes.forEach(function(i2) {\n return cleanMarks$2(i2);\n });\n return node2;\n}\nvar postcss$2$2 = {};\nvar LazyResult$2$2 = /*#__PURE__*/ function() {\n function LazyResult2(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$2(css);\n } else if (_instanceof(css, LazyResult2) || _instanceof(css, Result$2$2)) {\n root2 = cleanMarks$2(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$4]) {\n Container$1$2.rebuild(root2);\n }\n }\n this.result = new Result$2$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2$2, {\n postcss: postcss$2$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin22) {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.prepare) {\n return _extends({}, plugin22, plugin22.prepare(_this.result));\n } else {\n return plugin22;\n }\n });\n }\n var _proto = LazyResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin22.postcssPlugin;\n var pluginVer = plugin22.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a2 = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin22, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin22,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\") {\n for(var event in plugin22){\n if (!PLUGIN_PROPS$2[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin22.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS$2[event]) {\n if (_type_of(plugin22[event]) === \"object\") {\n for(var filter in plugin22[event]){\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(plugin22, event + \"-\" + filter.toLowerCase(), plugin22[event][filter]);\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i2, plugin22, promise, error, root2, stack, promise1, e2, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i2 = 0;\n _state.label = 1;\n case 1:\n if (!(i2 < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin22 = _this.plugins[i2];\n promise = _this.runOnRoot(plugin22);\n if (!isPromise$2(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i2++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean$4]) return [\n 3,\n 14\n ];\n root2[isClean$4] = true;\n stack = [\n toStack$2(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise$2(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e2 = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e2, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin22, visitor, roots, e2;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin22;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e2 = _state.sent();\n throw _this.handleError(e2);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin22) {\n var _this = this;\n this.result.lastPlugin = plugin22;\n try {\n if ((typeof plugin22 === \"undefined\" ? \"undefined\" : _type_of(plugin22)) === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin22.Once(root2, _this.helpers);\n });\n if (isPromise$2(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1$2(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin22 = _step.value;\n var promise = this.runOnRoot(plugin22);\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean$4]){\n root2[isClean$4] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin22 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin22;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$2(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin22 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean$4]) {\n child[isClean$4] = true;\n stack.push(toStack$2(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$2) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$4] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean$4] = true;\n var events = getEvents$2(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN$2) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean$4]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult2;\n}();\nLazyResult$2$2.registerPostcss = function(dependant) {\n postcss$2$2 = dependant;\n};\nvar lazyResult$2 = LazyResult$2$2;\nLazyResult$2$2.default = LazyResult$2$2;\nRoot$3$2.registerLazyResult(LazyResult$2$2);\nDocument$2$2.registerLazyResult(LazyResult$2$2);\nvar MapGenerator22 = mapGenerator$2;\nvar stringify$1$2 = stringify_1$2;\nvar warnOnce22 = warnOnce$2$2;\nvar parse$1$2 = parse_1$2;\nvar Result$1$2 = result$2;\nvar NoWorkResult$1$2 = /*#__PURE__*/ function() {\n function NoWorkResult2(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1$2;\n this.result = new Result$1$2(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator22(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult2.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce22(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult2, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1$2;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult2;\n}();\nvar noWorkResult$2 = NoWorkResult$1$2;\nNoWorkResult$1$2.default = NoWorkResult$1$2;\nvar NoWorkResult22 = noWorkResult$2;\nvar LazyResult$1$2 = lazyResult$2;\nvar Document$1$2 = document$1$2;\nvar Root$2$2 = root$2;\nvar Processor$1$2 = /*#__PURE__*/ function() {\n function Processor2(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor2.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i2 = _step.value;\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if ((typeof i2 === \"undefined\" ? \"undefined\" : _type_of(i2)) === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult22(this, css, opts);\n } else {\n return new LazyResult$1$2(this, css, opts);\n }\n };\n _proto.use = function use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin22\n ]));\n return this;\n };\n return Processor2;\n}();\nvar processor$2 = Processor$1$2;\nProcessor$1$2.default = Processor$1$2;\nRoot$2$2.registerProcessor(Processor$1$2);\nDocument$1$2.registerProcessor(Processor$1$2);\nvar Declaration$1$2 = declaration$2;\nvar PreviousMap22 = previousMap$2;\nvar Comment$1$2 = comment$2;\nvar AtRule$1$2 = atRule$2;\nvar Input$1$2 = input$2;\nvar Root$1$2 = root$2;\nvar Rule$1$2 = rule$2;\nfunction fromJSON$1$2(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n2) {\n return fromJSON$1$2(n2);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1$2.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap22.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n2) {\n return fromJSON$1$2(n2, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$2(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$2(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$2(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$2(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$2(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$2 = fromJSON$1$2;\nfromJSON$1$2.default = fromJSON$1$2;\nvar CssSyntaxError22 = cssSyntaxError$2;\nvar Declaration22 = declaration$2;\nvar LazyResult22 = lazyResult$2;\nvar Container22 = container$2;\nvar Processor22 = processor$2;\nvar stringify$6 = stringify_1$2;\nvar fromJSON$3 = fromJSON_1$2;\nvar Document222 = document$1$2;\nvar Warning22 = warning$2;\nvar Comment22 = comment$2;\nvar AtRule22 = atRule$2;\nvar Result22 = result$2;\nvar Input22 = input$2;\nvar parse$6 = parse_1$2;\nvar list$4 = list_1$2;\nvar Rule22 = rule$2;\nvar Root22 = root$2;\nvar Node22 = node$2;\nfunction postcss$4() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor22(plugins);\n}\npostcss$4.plugin = function plugin2(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor22().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$4([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss$4.stringify = stringify$6;\npostcss$4.parse = parse$6;\npostcss$4.fromJSON = fromJSON$3;\npostcss$4.list = list$4;\npostcss$4.comment = function(defaults) {\n return new Comment22(defaults);\n};\npostcss$4.atRule = function(defaults) {\n return new AtRule22(defaults);\n};\npostcss$4.decl = function(defaults) {\n return new Declaration22(defaults);\n};\npostcss$4.rule = function(defaults) {\n return new Rule22(defaults);\n};\npostcss$4.root = function(defaults) {\n return new Root22(defaults);\n};\npostcss$4.document = function(defaults) {\n return new Document222(defaults);\n};\npostcss$4.CssSyntaxError = CssSyntaxError22;\npostcss$4.Declaration = Declaration22;\npostcss$4.Container = Container22;\npostcss$4.Processor = Processor22;\npostcss$4.Document = Document222;\npostcss$4.Comment = Comment22;\npostcss$4.Warning = Warning22;\npostcss$4.AtRule = AtRule22;\npostcss$4.Result = Result22;\npostcss$4.Input = Input22;\npostcss$4.Rule = Rule22;\npostcss$4.Root = Root22;\npostcss$4.Node = Node22;\nLazyResult22.registerPostcss(postcss$4);\nvar postcss_1$2 = postcss$4;\npostcss$4.default = postcss$4;\nvar postcss$1$2 = /* @__PURE__ */ getDefaultExportFromCjs$2(postcss_1$2);\npostcss$1$2.stringify;\npostcss$1$2.fromJSON;\npostcss$1$2.plugin;\npostcss$1$2.parse;\npostcss$1$2.list;\npostcss$1$2.document;\npostcss$1$2.comment;\npostcss$1$2.atRule;\npostcss$1$2.rule;\npostcss$1$2.decl;\npostcss$1$2.root;\npostcss$1$2.CssSyntaxError;\npostcss$1$2.Declaration;\npostcss$1$2.Container;\npostcss$1$2.Processor;\npostcss$1$2.Document;\npostcss$1$2.Comment;\npostcss$1$2.Warning;\npostcss$1$2.AtRule;\npostcss$1$2.Result;\npostcss$1$2.Input;\npostcss$1$2.Rule;\npostcss$1$2.Root;\npostcss$1$2.Node;\nvar BaseRRNode = /*#__PURE__*/ function() {\n function BaseRRNode() {\n for(var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++){\n _args[_key] = arguments[_key];\n }\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n var _proto = BaseRRNode.prototype;\n _proto.contains = function contains(node2) {\n if (!_instanceof(node2, BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while(node2.parentNode){\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.appendChild = function appendChild(_newChild) {\n throw new Error(\"RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.insertBefore = function insertBefore(_newChild, _refChild) {\n throw new Error(\"RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.\");\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto.removeChild = function removeChild(_node) {\n throw new Error(\"RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.\");\n };\n _proto.toString = function toString() {\n return \"RRNode\";\n };\n _create_class(BaseRRNode, [\n {\n key: \"childNodes\",\n get: function get() {\n var childNodes2 = [];\n var childIterator = this.firstChild;\n while(childIterator){\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n }\n ]);\n return BaseRRNode;\n}();\nvar testableAccessors$2 = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods$2 = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype$2 = {};\nvar isAngularZonePresent$2 = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$2(key) {\n if (untaintedBasePrototype$2[key]) return untaintedBasePrototype$2[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors$2 ? testableAccessors$2[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a2, _b;\n return Boolean((_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods$2 ? testableMethods$2[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$2()) {\n untaintedBasePrototype$2[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$2[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache$2 = {};\nfunction getUntaintedAccessor$2(key, instance, accessor) {\n var _a2;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache$2[cacheKey]) return untaintedAccessorCache$2[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$2[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache$2 = {};\nfunction getUntaintedMethod$2(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache$2[cacheKey]) return untaintedMethodCache$2[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype$2(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$2[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$2(n2) {\n return getUntaintedAccessor$2(\"Node\", n2, \"textContent\");\n}\nfunction contains$2(n2, other) {\n return getUntaintedMethod$2(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$2(n2) {\n return getUntaintedMethod$2(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$2(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$2(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$2(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$2(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$2(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$2(n2, selectors) {\n return getUntaintedAccessor$2(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$2() {\n return getUntaintedPrototype$2(\"MutationObserver\").constructor;\n}\nfunction patch$2(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index$2 = {\n childNodes: childNodes$2,\n parentNode: parentNode$2,\n parentElement: parentElement$2,\n textContent: textContent$2,\n contains: contains$2,\n getRootNode: getRootNode$2,\n host: host$2,\n styleSheets: styleSheets$2,\n shadowRoot: shadowRoot$2,\n querySelector: querySelector$2,\n querySelectorAll: querySelectorAll$2,\n mutationObserver: mutationObserverCtor$2,\n patch: patch$2\n};\nfunction on(type, fn, target) {\n if (target === void 0) target = document;\n var options = {\n capture: true,\n passive: true\n };\n target.addEventListener(type, fn, options);\n return function() {\n return target.removeEventListener(type, fn, options);\n };\n}\nvar DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nvar _mirror = {\n map: {},\n getId: function getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode: function getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap: function removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has: function has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset: function reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get: function get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options) {\n if (options === void 0) options = {};\n var timeout = null;\n var previous = 0;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n var context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(function() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win) {\n if (win === void 0) win = window;\n var original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked ? d : {\n set: function set(value) {\n var _this = this;\n setTimeout(function() {\n d.set.call(_this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n });\n return function() {\n return hookSetter(target, key, original || {}, true);\n };\n}\nvar nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = function() {\n return /* @__PURE__ */ new Date().getTime();\n };\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n var doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index$2.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index$2.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n var el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index$2.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n var el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex$1(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {}\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n var id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n var parent = index$2.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win) {\n if (win === void 0) win = window;\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2));\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (_instanceof(n2, BaseRRNode) && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index$2.shadowRoot(n2));\n}\nvar StyleSheetMirror = /*#__PURE__*/ function() {\n function StyleSheetMirror() {\n __publicField$1(this, \"id\", 1);\n __publicField$1(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n var _proto = StyleSheetMirror.prototype;\n _proto.getId = function getId(stylesheet) {\n var _this_styleIDMap_get;\n return (_this_styleIDMap_get = this.styleIDMap.get(stylesheet)) != null ? _this_styleIDMap_get : -1;\n };\n _proto.has = function has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n };\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */ _proto.add = function add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n var newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n };\n _proto.getStyle = function getStyle(id) {\n return this.idStyleMap.get(id) || null;\n };\n _proto.reset = function reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n };\n _proto.generateId = function generateId() {\n return this.id++;\n };\n _proto.remove = function remove(stylesheet) {\n var id = this.styleIDMap.get(stylesheet);\n if (id !== void 0) {\n this.styleIDMap.delete(stylesheet);\n this.idStyleMap.delete(id);\n return true;\n }\n return false;\n };\n return StyleSheetMirror;\n}();\nfunction getShadowHost(n2) {\n var _a2;\n var shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index$2.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index$2.host(index$2.getRootNode(n2))) shadowHost = index$2.host(index$2.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n var rootShadowHost = n2;\n var shadowHost;\n while(shadowHost = getShadowHost(rootShadowHost))rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n var shadowHost = getRootShadowHost(n2);\n return index$2.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n var doc = n2.ownerDocument;\n if (!doc) return false;\n return index$2.contains(doc, n2) || shadowHostInDom(n2);\n}\nvar EventType = /* @__PURE__ */ function(EventType2) {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n}(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ function(IncrementalSource2) {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n}(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ function(MouseInteractions2) {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n}(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ function(PointerTypes2) {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n}(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ function(CanvasContext2) {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n}(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ function(MediaInteractions2) {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n}(MediaInteractions || {});\nvar NodeType = /* @__PURE__ */ function(NodeType2) {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n}(NodeType || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nvar DoubleLinkedList = /*#__PURE__*/ function() {\n function DoubleLinkedList() {\n __publicField$1(this, \"length\", 0);\n __publicField$1(this, \"head\", null);\n __publicField$1(this, \"tail\", null);\n }\n var _proto = DoubleLinkedList.prototype;\n _proto.get = function get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n var current = this.head;\n for(var index2 = 0; index2 < position; index2++){\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n };\n _proto.addNode = function addNode(n2) {\n var node2 = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node2;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n var current = n2.previousSibling.__ln.next;\n node2.next = current;\n node2.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node2;\n if (current) {\n current.previous = node2;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n var current1 = n2.nextSibling.__ln.previous;\n node2.previous = current1;\n node2.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node2;\n if (current1) {\n current1.next = node2;\n }\n } else {\n if (this.head) {\n this.head.previous = node2;\n }\n node2.next = this.head;\n this.head = node2;\n }\n if (node2.next === null) {\n this.tail = node2;\n }\n this.length++;\n };\n _proto.removeNode = function removeNode(n2) {\n var current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n };\n return DoubleLinkedList;\n}();\nvar moveKey = function(id, parentId) {\n return id + \"@\" + parentId;\n};\nvar MutationBuffer = /*#__PURE__*/ function() {\n function MutationBuffer() {\n var _this = this;\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"texts\", []);\n __publicField$1(this, \"attributes\", []);\n __publicField$1(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"removes\", []);\n __publicField$1(this, \"mapRemoves\", []);\n __publicField$1(this, \"movedMap\", {});\n /**\n * the browser MutationObserver emits multiple mutations after\n * a delay for performance reasons, making tracing added nodes hard\n * in our `processMutations` callback function.\n * For example, if we append an element el_1 into body, and then append\n * another element el_2 into el_1, these two mutations may be passed to the\n * callback function together when the two operations were done.\n * Generally we need to trace child nodes of newly added nodes, but in this\n * case if we count el_2 as el_1's child node in the first mutation record,\n * then we will count el_2 again in the second mutation record which was\n * duplicated.\n * To avoid of duplicate counting added nodes, we use a Set to store\n * added nodes and its child nodes during iterate mutation records. Then\n * collect added nodes from the Set which have no duplicate copy. But\n * this also causes newly added nodes will not be serialized with id ASAP,\n * which means all the id related calculation should be lazy too.\n */ __publicField$1(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"removesSubTreeCache\", /* @__PURE__ */ new Set());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"blockClass\");\n __publicField$1(this, \"blockSelector\");\n __publicField$1(this, \"maskTextClass\");\n __publicField$1(this, \"maskTextSelector\");\n __publicField$1(this, \"inlineStylesheet\");\n __publicField$1(this, \"maskInputOptions\");\n __publicField$1(this, \"maskTextFn\");\n __publicField$1(this, \"maskInputFn\");\n __publicField$1(this, \"keepIframeSrcFn\");\n __publicField$1(this, \"recordCanvas\");\n __publicField$1(this, \"inlineImages\");\n __publicField$1(this, \"slimDOMOptions\");\n __publicField$1(this, \"dataURLOptions\");\n __publicField$1(this, \"doc\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"iframeManager\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"shadowDomManager\");\n __publicField$1(this, \"canvasManager\");\n __publicField$1(this, \"processedNodeManager\");\n __publicField$1(this, \"unattachedDoc\");\n __publicField$1(this, \"processMutations\", function(mutations) {\n mutations.forEach(_this.processMutation);\n _this.emit();\n });\n __publicField$1(this, \"emit\", function() {\n if (_this.frozen || _this.locked) {\n return;\n }\n var adds = [];\n var addedIds = /* @__PURE__ */ new Set();\n var addList = new DoubleLinkedList();\n var getNextId = function(n2) {\n var ns = n2;\n var nextId = IGNORED_NODE;\n while(nextId === IGNORED_NODE){\n ns = ns && ns.nextSibling;\n nextId = ns && _this.mirror.getId(ns);\n }\n return nextId;\n };\n var pushAdd = function(n2) {\n var parent = index$2.parentNode(n2);\n if (!parent || !inDom(n2)) {\n return;\n }\n var cssCaptured = false;\n if (n2.nodeType === Node.TEXT_NODE) {\n var parentTag = parent.tagName;\n if (parentTag === \"TEXTAREA\") {\n return;\n } else if (parentTag === \"STYLE\" && _this.addedSet.has(parent)) {\n cssCaptured = true;\n }\n }\n var parentId = isShadowRoot(parent) ? _this.mirror.getId(getShadowHost(n2)) : _this.mirror.getId(parent);\n var nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n var sn = serializeNodeWithId(n2, {\n doc: _this.doc,\n mirror: _this.mirror,\n blockClass: _this.blockClass,\n blockSelector: _this.blockSelector,\n maskTextClass: _this.maskTextClass,\n maskTextSelector: _this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: _this.inlineStylesheet,\n maskInputOptions: _this.maskInputOptions,\n maskTextFn: _this.maskTextFn,\n maskInputFn: _this.maskInputFn,\n slimDOMOptions: _this.slimDOMOptions,\n dataURLOptions: _this.dataURLOptions,\n recordCanvas: _this.recordCanvas,\n inlineImages: _this.inlineImages,\n onSerialize: function(currentN) {\n if (isSerializedIframe(currentN, _this.mirror)) {\n _this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, _this.mirror)) {\n _this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n2)) {\n _this.shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), _this.doc);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n _this.iframeManager.attachIframe(iframe, childSn);\n _this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(link, childSn) {\n _this.stylesheetManager.attachLinkElement(link, childSn);\n },\n cssCaptured: cssCaptured\n });\n if (sn) {\n adds.push({\n parentId: parentId,\n nextId: nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while(_this.mapRemoves.length){\n var removedNode = _this.mapRemoves.shift();\n _this.cleanupRemovedNode(removedNode);\n _this.mirror.removeNodeFromMap(removedNode);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(_this.movedSet), _step; !(_step = _iterator()).done;){\n var n2 = _step.value;\n if (isParentRemoved(_this.removesSubTreeCache, n2, _this.mirror) && !_this.movedSet.has(index$2.parentNode(n2))) {\n continue;\n }\n pushAdd(n2);\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(_this.addedSet), _step1; !(_step1 = _iterator1()).done;){\n var n21 = _step1.value;\n if (!isAncestorInSet(_this.droppedSet, n21) && !isParentRemoved(_this.removesSubTreeCache, n21, _this.mirror)) {\n pushAdd(n21);\n } else if (isAncestorInSet(_this.movedSet, n21)) {\n pushAdd(n21);\n } else {\n _this.droppedSet.add(n21);\n }\n }\n var candidate = null;\n while(addList.length){\n var node2 = null;\n if (candidate) {\n var parentId = _this.mirror.getId(index$2.parentNode(candidate.value));\n var nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node2 = candidate;\n }\n }\n if (!node2) {\n var tailNode = addList.tail;\n while(tailNode){\n var _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n var parentId1 = _this.mirror.getId(index$2.parentNode(_node.value));\n var nextId1 = getNextId(_node.value);\n if (nextId1 === -1) continue;\n else if (parentId1 !== -1) {\n node2 = _node;\n break;\n } else {\n var unhandledNode = _node.value;\n var parent = index$2.parentNode(unhandledNode);\n if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n var shadowHost = index$2.host(parent);\n var parentId2 = _this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node2 = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node2) {\n while(addList.head){\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node2.previous;\n addList.removeNode(node2.value);\n pushAdd(node2.value);\n }\n var payload = {\n texts: _this.texts.map(function(text) {\n var n2 = text.node;\n var parent = index$2.parentNode(n2);\n if (parent && parent.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(parent);\n }\n return {\n id: _this.mirror.getId(n2),\n value: text.value\n };\n }).filter(function(text) {\n return !addedIds.has(text.id);\n }).filter(function(text) {\n return _this.mirror.has(text.id);\n }),\n attributes: _this.attributes.map(function(attribute) {\n var attributes = attribute.attributes;\n if (typeof attributes.style === \"string\") {\n var diffAsStr = JSON.stringify(attribute.styleDiff);\n var unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: _this.mirror.getId(attribute.node),\n attributes: attributes\n };\n }).filter(function(attribute) {\n return !addedIds.has(attribute.id);\n }).filter(function(attribute) {\n return _this.mirror.has(attribute.id);\n }),\n removes: _this.removes,\n adds: adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n _this.texts = [];\n _this.attributes = [];\n _this.attributeMap = /* @__PURE__ */ new WeakMap();\n _this.removes = [];\n _this.addedSet = /* @__PURE__ */ new Set();\n _this.movedSet = /* @__PURE__ */ new Set();\n _this.droppedSet = /* @__PURE__ */ new Set();\n _this.removesSubTreeCache = /* @__PURE__ */ new Set();\n _this.movedMap = {};\n _this.mutationCb(payload);\n });\n __publicField$1(this, \"genTextAreaValueMutation\", function(textarea) {\n var item = _this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(textarea, item);\n }\n var value = Array.from(index$2.childNodes(textarea), function(cn) {\n return index$2.textContent(cn) || \"\";\n }).join(\"\");\n item.attributes.value = maskInputValue({\n element: textarea,\n maskInputOptions: _this.maskInputOptions,\n tagName: textarea.tagName,\n type: getInputType(textarea),\n value: value,\n maskInputFn: _this.maskInputFn\n });\n });\n __publicField$1(this, \"processMutation\", function(m) {\n if (isIgnored(m.target, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n switch(m.type){\n case \"characterData\":\n {\n var value = index$2.textContent(m.target);\n if (!isBlocked(m.target, _this.blockClass, _this.blockSelector, false) && value !== m.oldValue) {\n _this.texts.push({\n value: needMaskingText(m.target, _this.maskTextClass, _this.maskTextSelector, true) && value ? _this.maskTextFn ? _this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\":\n {\n var target = m.target;\n var attributeName = m.attributeName;\n var value1 = m.target.getAttribute(attributeName);\n if (attributeName === \"value\" || attributeName === \"placeholder\") {\n var type = getInputType(target);\n value1 = maskInputValue({\n element: target,\n maskInputOptions: _this.maskInputOptions,\n tagName: target.tagName,\n type: type,\n value: value1,\n maskInputFn: _this.maskInputFn\n });\n }\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || value1 === m.oldValue) {\n return;\n }\n var item = _this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !_this.keepIframeSrcFn(value1)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n _this.attributes.push(item);\n _this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(_this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value1);\n if (attributeName === \"style\") {\n if (!_this.unattachedDoc) {\n try {\n _this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n _this.unattachedDoc = _this.doc;\n }\n }\n var old = _this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(target.style)), _step; !(_step = _iterator()).done;){\n var pname = _step.value;\n var newValue = target.style.getPropertyValue(pname);\n var newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [\n newValue,\n newPriority\n ];\n }\n } else {\n item._unchangedStyles[pname] = [\n newValue,\n newPriority\n ];\n }\n }\n for(var _iterator1 = _create_for_of_iterator_helper_loose(Array.from(old.style)), _step1; !(_step1 = _iterator1()).done;){\n var pname1 = _step1.value;\n if (target.style.getPropertyValue(pname1) === \"\") {\n item.styleDiff[pname1] = false;\n }\n }\n } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n if (target.matches(\"dialog:modal\")) {\n item.attributes[\"rr_open_mode\"] = \"modal\";\n } else {\n item.attributes[\"rr_open_mode\"] = \"non-modal\";\n }\n }\n }\n break;\n }\n case \"childList\":\n {\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, true)) return;\n if (m.target.tagName === \"TEXTAREA\") {\n _this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach(function(n2) {\n return _this.genAdds(n2, m.target);\n });\n m.removedNodes.forEach(function(n2) {\n var nodeId = _this.mirror.getId(n2);\n var parentId = isShadowRoot(m.target) ? _this.mirror.getId(index$2.host(m.target)) : _this.mirror.getId(m.target);\n if (isBlocked(m.target, _this.blockClass, _this.blockSelector, false) || isIgnored(n2, _this.mirror, _this.slimDOMOptions) || !isSerialized(n2, _this.mirror)) {\n return;\n }\n if (_this.addedSet.has(n2)) {\n deepDelete(_this.addedSet, n2);\n _this.droppedSet.add(n2);\n } else if (_this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, _this.mirror)) ;\n else if (_this.movedSet.has(n2) && _this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(_this.movedSet, n2);\n } else {\n _this.removes.push({\n parentId: parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n processRemoves(n2, _this.removesSubTreeCache);\n }\n _this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n /**\n * Make sure you check if `n`'s parent is blocked before calling this function\n * */ __publicField$1(this, \"genAdds\", function(n2, target) {\n if (_this.processedNodeManager.inOtherBuffer(n2, _this)) return;\n if (_this.addedSet.has(n2) || _this.movedSet.has(n2)) return;\n if (_this.mirror.hasNode(n2)) {\n if (isIgnored(n2, _this.mirror, _this.slimDOMOptions)) {\n return;\n }\n _this.movedSet.add(n2);\n var targetId = null;\n if (target && _this.mirror.hasNode(target)) {\n targetId = _this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n _this.movedMap[moveKey(_this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n _this.addedSet.add(n2);\n _this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, _this.blockClass, _this.blockSelector, false)) {\n index$2.childNodes(n2).forEach(function(childN) {\n return _this.genAdds(childN);\n });\n if (hasShadowRoot(n2)) {\n index$2.childNodes(index$2.shadowRoot(n2)).forEach(function(childN) {\n _this.processedNodeManager.add(childN, _this);\n _this.genAdds(childN, n2);\n });\n }\n }\n });\n __publicField$1(this, \"cleanupRemovedNode\", function(node2) {\n if (node2.nodeName === \"IFRAME\") {\n try {\n _this.iframeManager.removeIframe(node2);\n } catch (e2) {}\n } else {\n try {\n _this.stylesheetManager.cleanupStylesheetsForRemovedNode(node2);\n } catch (e2) {}\n }\n node2.childNodes.forEach(function(child) {\n _this.cleanupRemovedNode(child);\n });\n });\n }\n var _proto = MutationBuffer.prototype;\n _proto.init = function init(options) {\n var _this = this;\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach(function(key) {\n _this[key] = options[key];\n });\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n };\n _proto.isFrozen = function isFrozen() {\n return this.frozen;\n };\n _proto.lock = function lock() {\n this.locked = true;\n this.canvasManager.lock();\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n };\n _proto.reset = function reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n };\n _proto.getDoc = function getDoc() {\n return this.doc;\n };\n return MutationBuffer;\n}();\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n index$2.childNodes(n2).forEach(function(childN) {\n return deepDelete(addsSet, childN);\n });\n}\nfunction processRemoves(n2, cache) {\n var queue = [\n n2\n ];\n while(queue.length){\n var next = queue.pop();\n if (cache.has(next)) continue;\n cache.add(next);\n index$2.childNodes(next).forEach(function(n22) {\n return queue.push(n22);\n });\n }\n return;\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.size === 0) return false;\n return _isParentRemoved(removes, n2);\n}\nfunction _isParentRemoved(removes, n2, _mirror2) {\n var node2 = index$2.parentNode(n2);\n if (!node2) return false;\n return removes.has(node2);\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0) return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n var parent = index$2.parentNode(n2);\n if (!parent) {\n return false;\n }\n if (set.has(parent)) {\n return true;\n }\n return _isAncestorInSet(set, parent);\n}\nvar errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nvar callbackWrapper = function(cb) {\n if (!errorHandler) {\n return cb;\n }\n var rrwebWrapped = function() {\n for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){\n rest[_key] = arguments[_key];\n }\n try {\n return cb.apply(void 0, [].concat(rest));\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nvar mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n var path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch (e) {}\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n var mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n var observer = new (mutationObserverCtor$2())(callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer)));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction removeMutationBufferForDoc(doc) {\n for(var i2 = mutationBuffers.length - 1; i2 >= 0; i2--){\n var buffer = mutationBuffers[i2];\n if (buffer.getDoc() === doc) {\n mutationBuffers.splice(i2, 1);\n }\n }\n}\nfunction initMoveObserver(param) {\n var mousemoveCb = param.mousemoveCb, sampling = param.sampling, doc = param.doc, mirror2 = param.mirror;\n if (sampling.mousemove === false) {\n return function() {};\n }\n var threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n var callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n var positions = [];\n var timeBaseline;\n var wrappedCb = throttle(callbackWrapper(function(source) {\n var totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map(function(p) {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n var _ref = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt, clientX = _ref.clientX, clientY = _ref.clientY;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(typeof DragEvent !== \"undefined\" && _instanceof(evt, DragEvent) ? IncrementalSource.Drag : _instanceof(evt, MouseEvent) ? IncrementalSource.MouseMove : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false\n }));\n var handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initMouseInteractionObserver(param) {\n var mouseInteractionCb = param.mouseInteractionCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n if (sampling.mouseInteraction === false) {\n return function() {};\n }\n var disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n var handlers = [];\n var currentPointerType = null;\n var getHandler = function(eventKey) {\n return function(event) {\n var target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var pointerType = null;\n var thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch(event.pointerType){\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen) ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n var e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n var id = mirror2.getId(target);\n var clientX = e2.clientX, clientY = e2.clientY;\n callbackWrapper(mouseInteractionCb)(_extends({\n type: MouseInteractions[thisEventKey],\n id: id,\n x: clientX,\n y: clientY\n }, pointerType !== null && {\n pointerType: pointerType\n }));\n };\n };\n Object.keys(MouseInteractions).filter(function(key) {\n return Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false;\n }).forEach(function(eventKey) {\n var eventName = toLowerCase(eventKey);\n var handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch(MouseInteractions[eventKey]){\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\"mouse\", \"pointer\");\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initScrollObserver(param) {\n var scrollCb = param.scrollCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, sampling = param.sampling;\n var updatePosition = callbackWrapper(throttle(callbackWrapper(function(evt) {\n var target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n var scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id: id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id: id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }), sampling.scroll || 100));\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver(param, param1) {\n var viewportResizeCb = param.viewportResizeCb;\n var win = param1.win;\n var lastH = -1;\n var lastW = -1;\n var updateDimension = callbackWrapper(throttle(callbackWrapper(function() {\n var height = getWindowHeight();\n var width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on(\"resize\", updateDimension, win);\n}\nvar INPUT_TAGS = [\n \"INPUT\",\n \"TEXTAREA\",\n \"SELECT\"\n];\nvar lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver(param) {\n var inputCb = param.inputCb, doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, ignoreClass = param.ignoreClass, ignoreSelector = param.ignoreSelector, maskInputOptions = param.maskInputOptions, maskInputFn = param.maskInputFn, sampling = param.sampling, userTriggeredOnInput = param.userTriggeredOnInput;\n function eventHandler(event) {\n var target = getEventTarget(event);\n var userTriggered = event.isTrusted;\n var tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = index$2.parentElement(target);\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n var text = target.value;\n var isChecked = false;\n var type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions: maskInputOptions,\n tagName: tagName,\n type: type,\n value: text,\n maskInputFn: maskInputFn\n });\n }\n cbWithDedup(target, userTriggeredOnInput ? {\n text: text,\n isChecked: isChecked,\n userTriggered: userTriggered\n } : {\n text: text,\n isChecked: isChecked\n });\n var name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]').forEach(function(el) {\n if (el !== target) {\n var text2 = el.value;\n cbWithDedup(el, userTriggeredOnInput ? {\n text: text2,\n isChecked: !isChecked,\n userTriggered: false\n } : {\n text: text2,\n isChecked: !isChecked\n });\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n var lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n var id = mirror2.getId(target);\n callbackWrapper(inputCb)(_extends({}, v2, {\n id: id\n }));\n }\n }\n var events = sampling.input === \"last\" ? [\n \"change\"\n ] : [\n \"input\",\n \"change\"\n ];\n var handlers = events.map(function(eventName) {\n return on(eventName, callbackWrapper(eventHandler), doc);\n });\n var currentWindow = doc.defaultView;\n if (!currentWindow) {\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n }\n var propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, \"value\");\n var hookProperties = [\n [\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLInputElement.prototype,\n \"checked\"\n ],\n [\n currentWindow.HTMLSelectElement.prototype,\n \"value\"\n ],\n [\n currentWindow.HTMLTextAreaElement.prototype,\n \"value\"\n ],\n // Some UI library use selectedIndex to set select value\n [\n currentWindow.HTMLSelectElement.prototype,\n \"selectedIndex\"\n ],\n [\n currentWindow.HTMLOptionElement.prototype,\n \"selected\"\n ]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n var _handlers;\n (_handlers = handlers).push.apply(_handlers, [].concat(hookProperties.map(function(p) {\n return hookSetter(p[0], p[1], {\n set: function set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n });\n }\n }, false, currentWindow);\n })));\n }\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction getNestedCSSRulePositions(rule2) {\n var positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && _instanceof(childRule.parentRule, CSSGroupingRule) || hasNestedCSSRule(\"CSSMediaRule\") && _instanceof(childRule.parentRule, CSSMediaRule) || hasNestedCSSRule(\"CSSSupportsRule\") && _instanceof(childRule.parentRule, CSSSupportsRule) || hasNestedCSSRule(\"CSSConditionRule\") && _instanceof(childRule.parentRule, CSSConditionRule)) {\n var rules2 = Array.from(childRule.parentRule.cssRules);\n var index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n } else if (childRule.parentStyleSheet) {\n var rules21 = Array.from(childRule.parentStyleSheet.cssRules);\n var index21 = rules21.indexOf(childRule);\n pos.unshift(index21);\n }\n return pos;\n }\n return recurse(rule2, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n var id, styleId;\n if (!sheet) return {};\n if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n else styleId = styleMirror.getId(sheet);\n return {\n styleId: styleId,\n id: id\n };\n}\nfunction initStyleSheetObserver(param, param1) {\n var styleSheetRuleCb = param.styleSheetRuleCb, mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return function() {};\n }\n var insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2) {\n if (index2 === void 0) index2 = this.cssRules.length;\n var rule2 = selector + \" { \" + styleBlock + \" }\";\n return win.CSSStyleSheet.prototype.insertRule.apply(this, [\n rule2,\n index2\n ]);\n };\n var deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: index2\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n win.CSSStyleSheet.prototype.removeRule = function(index2) {\n return win.CSSStyleSheet.prototype.deleteRule.apply(this, [\n index2\n ]);\n };\n var replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var text = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n }\n var supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n var unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var rule2 = argumentsList[0], index2 = argumentsList[1];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n adds: [\n {\n rule: rule2,\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2 || 0\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var index2 = argumentsList[0];\n var _getIdAndStyleId = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id: id,\n styleId: styleId,\n removes: [\n {\n index: [].concat(getNestedCSSRulePositions(thisArg), [\n index2\n ])\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n });\n return callbackWrapper(function() {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(function(param) {\n var typeKey = param[0], type = param[1];\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver(param, host2) {\n var mirror2 = param.mirror, stylesheetManager = param.stylesheetManager;\n var _a2, _b, _c;\n var hostId = null;\n if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n else hostId = mirror2.getId(index$2.host(host2));\n var patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n var originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(patchTarget == null ? void 0 : patchTarget.prototype, \"adoptedStyleSheets\") : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor) return function() {};\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: function get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set: function set(sheets) {\n var _a3;\n var result2 = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {}\n }\n return result2;\n }\n });\n return callbackWrapper(function() {\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver(param, param1) {\n var styleDeclarationCb = param.styleDeclarationCb, mirror2 = param.mirror, ignoreCSSAttributes = param.ignoreCSSAttributes, stylesheetManager = param.stylesheetManager;\n var win = param1.win;\n var setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0], value = argumentsList[1], priority = argumentsList[2];\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [\n property,\n value,\n priority\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n set: {\n property: property,\n value: value,\n priority: priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n var removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(function(target, thisArg, argumentsList) {\n var _a2;\n var property = argumentsList[0];\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [\n property\n ]);\n }\n var _getIdAndStyleId = getIdAndStyleId((_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet, mirror2, stylesheetManager.styleMirror), id = _getIdAndStyleId.id, styleId = _getIdAndStyleId.styleId;\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id: id,\n styleId: styleId,\n remove: {\n property: property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n })\n });\n return callbackWrapper(function() {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver(param) {\n var mediaInteractionCb = param.mediaInteractionCb, blockClass = param.blockClass, blockSelector = param.blockSelector, mirror2 = param.mirror, sampling = param.sampling, doc = param.doc;\n var handler = callbackWrapper(function(type) {\n return throttle(callbackWrapper(function(event) {\n var target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n var currentTime = target.currentTime, volume = target.volume, muted = target.muted, playbackRate = target.playbackRate, loop = target.loop;\n mediaInteractionCb({\n type: type,\n id: mirror2.getId(target),\n currentTime: currentTime,\n volume: volume,\n muted: muted,\n playbackRate: playbackRate,\n loop: loop\n });\n }), sampling.media || 500);\n });\n var handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initFontObserver(param) {\n var fontCb = param.fontCb, doc = param.doc;\n var win = doc.defaultView;\n if (!win) {\n return function() {};\n }\n var handlers = [];\n var fontMap = /* @__PURE__ */ new WeakMap();\n var originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n var fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family: family,\n buffer: typeof source !== \"string\",\n descriptors: descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n var restoreHandler = patch$2(doc.fonts, \"add\", function(original) {\n return function(fontFace) {\n setTimeout(callbackWrapper(function() {\n var p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [\n fontFace\n ]);\n };\n });\n handlers.push(function() {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(function() {\n handlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction initSelectionObserver(param) {\n var doc = param.doc, mirror2 = param.mirror, blockClass = param.blockClass, blockSelector = param.blockSelector, selectionCb = param.selectionCb;\n var collapsed = true;\n var updateSelection = callbackWrapper(function() {\n var selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n collapsed = selection.isCollapsed || false;\n var ranges = [];\n var count = selection.rangeCount || 0;\n for(var i2 = 0; i2 < count; i2++){\n var range = selection.getRangeAt(i2);\n var startContainer = range.startContainer, startOffset = range.startOffset, endContainer = range.endContainer, endOffset = range.endOffset;\n var blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked) continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset: startOffset,\n end: mirror2.getId(endContainer),\n endOffset: endOffset\n });\n }\n selectionCb({\n ranges: ranges\n });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver(param) {\n var doc = param.doc, customElementCb = param.customElementCb;\n var win = doc.defaultView;\n if (!win || !win.customElements) return function() {};\n var restoreHandler = patch$2(win.customElements, \"define\", function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name: name\n }\n });\n } catch (e2) {\n console.warn(\"Custom element callback failed for \" + name);\n }\n return original.apply(this, [\n name,\n constructor,\n options\n ]);\n };\n });\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n var mutationCb = o2.mutationCb, mousemoveCb = o2.mousemoveCb, mouseInteractionCb = o2.mouseInteractionCb, scrollCb = o2.scrollCb, viewportResizeCb = o2.viewportResizeCb, inputCb = o2.inputCb, mediaInteractionCb = o2.mediaInteractionCb, styleSheetRuleCb = o2.styleSheetRuleCb, styleDeclarationCb = o2.styleDeclarationCb, canvasMutationCb = o2.canvasMutationCb, fontCb = o2.fontCb, selectionCb = o2.selectionCb, customElementCb = o2.customElementCb;\n o2.mutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mutation) {\n var _hooks;\n (_hooks = hooks).mutation.apply(_hooks, [].concat(p));\n }\n mutationCb.apply(void 0, [].concat(p));\n };\n o2.mousemoveCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mousemove) {\n var _hooks;\n (_hooks = hooks).mousemove.apply(_hooks, [].concat(p));\n }\n mousemoveCb.apply(void 0, [].concat(p));\n };\n o2.mouseInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mouseInteraction) {\n var _hooks;\n (_hooks = hooks).mouseInteraction.apply(_hooks, [].concat(p));\n }\n mouseInteractionCb.apply(void 0, [].concat(p));\n };\n o2.scrollCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.scroll) {\n var _hooks;\n (_hooks = hooks).scroll.apply(_hooks, [].concat(p));\n }\n scrollCb.apply(void 0, [].concat(p));\n };\n o2.viewportResizeCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.viewportResize) {\n var _hooks;\n (_hooks = hooks).viewportResize.apply(_hooks, [].concat(p));\n }\n viewportResizeCb.apply(void 0, [].concat(p));\n };\n o2.inputCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.input) {\n var _hooks;\n (_hooks = hooks).input.apply(_hooks, [].concat(p));\n }\n inputCb.apply(void 0, [].concat(p));\n };\n o2.mediaInteractionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.mediaInteaction) {\n var _hooks;\n (_hooks = hooks).mediaInteaction.apply(_hooks, [].concat(p));\n }\n mediaInteractionCb.apply(void 0, [].concat(p));\n };\n o2.styleSheetRuleCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleSheetRule) {\n var _hooks;\n (_hooks = hooks).styleSheetRule.apply(_hooks, [].concat(p));\n }\n styleSheetRuleCb.apply(void 0, [].concat(p));\n };\n o2.styleDeclarationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.styleDeclaration) {\n var _hooks;\n (_hooks = hooks).styleDeclaration.apply(_hooks, [].concat(p));\n }\n styleDeclarationCb.apply(void 0, [].concat(p));\n };\n o2.canvasMutationCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.canvasMutation) {\n var _hooks;\n (_hooks = hooks).canvasMutation.apply(_hooks, [].concat(p));\n }\n canvasMutationCb.apply(void 0, [].concat(p));\n };\n o2.fontCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.font) {\n var _hooks;\n (_hooks = hooks).font.apply(_hooks, [].concat(p));\n }\n fontCb.apply(void 0, [].concat(p));\n };\n o2.selectionCb = function() {\n for(var _len = arguments.length, p = new Array(_len), _key = 0; _key < _len; _key++){\n p[_key] = arguments[_key];\n }\n if (hooks.selection) {\n var _hooks;\n (_hooks = hooks).selection.apply(_hooks, [].concat(p));\n }\n selectionCb.apply(void 0, [].concat(p));\n };\n o2.customElementCb = function() {\n for(var _len = arguments.length, c2 = new Array(_len), _key = 0; _key < _len; _key++){\n c2[_key] = arguments[_key];\n }\n if (hooks.customElement) {\n var _hooks;\n (_hooks = hooks).customElement.apply(_hooks, [].concat(c2));\n }\n customElementCb.apply(void 0, [].concat(c2));\n };\n}\nfunction initObservers(o2, hooks) {\n if (hooks === void 0) hooks = {};\n var currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return function() {};\n }\n mergeHooks(o2, hooks);\n var mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n var mousemoveHandler = initMoveObserver(o2);\n var mouseInteractionHandler = initMouseInteractionObserver(o2);\n var scrollHandler = initScrollObserver(o2);\n var viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n var inputHandler = initInputObserver(o2);\n var mediaInteractionHandler = initMediaInteractionObserver(o2);\n var styleSheetObserver = function() {};\n var adoptedStyleSheetObserver = function() {};\n var styleDeclarationObserver = function() {};\n var fontObserver = function() {};\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, {\n win: currentWindow\n });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n var selectionObserver = initSelectionObserver(o2);\n var customElementObserver = initCustomElementObserver(o2);\n var pluginHandlers = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(o2.plugins), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n pluginHandlers.push(plugin3.observer(plugin3.callback, currentWindow, plugin3.options));\n }\n return callbackWrapper(function() {\n mutationBuffers.forEach(function(b) {\n return b.reset();\n });\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach(function(h) {\n return h();\n });\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype);\n}\nvar CrossOriginIframeMirror = /*#__PURE__*/ function() {\n function CrossOriginIframeMirror(generateIdFn) {\n __publicField$1(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n var _proto = CrossOriginIframeMirror.prototype;\n _proto.getId = function getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n var idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n var id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n };\n _proto.getIds = function getIds(iframe, remoteId) {\n var _this = this;\n var idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(function(id) {\n return _this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap);\n });\n };\n _proto.getRemoteId = function getRemoteId(iframe, id, map) {\n var remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\") return id;\n var remoteId = remoteIdToIdMap.get(id);\n if (!remoteId) return -1;\n return remoteId;\n };\n _proto.getRemoteIds = function getRemoteIds(iframe, ids) {\n var _this = this;\n var remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map(function(id) {\n return _this.getRemoteId(iframe, id, remoteIdToIdMap);\n });\n };\n _proto.reset = function reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n };\n _proto.getIdToRemoteIdMap = function getIdToRemoteIdMap(iframe) {\n var idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n };\n _proto.getRemoteIdToIdMap = function getRemoteIdToIdMap(iframe) {\n var remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n };\n return CrossOriginIframeMirror;\n}();\nvar IframeManager = /*#__PURE__*/ function() {\n function IframeManager(options) {\n __publicField$1(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField$1(this, \"crossOriginIframeStyleMirror\");\n __publicField$1(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeContentDocumentMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"iframeObserverCleanupMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"wrappedEmit\");\n __publicField$1(this, \"loadListener\");\n __publicField$1(this, \"stylesheetManager\");\n __publicField$1(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n var _proto = IframeManager.prototype;\n _proto.addIframe = function addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow) this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n };\n _proto.getIframeContentDocument = function getIframeContentDocument(iframeEl) {\n return this.iframeContentDocumentMap.get(iframeEl);\n };\n _proto.setObserverCleanup = function setObserverCleanup(iframeEl, cleanup) {\n this.iframeObserverCleanupMap.set(iframeEl, cleanup);\n };\n _proto.getObserverCleanup = function getObserverCleanup(iframeEl) {\n return this.iframeObserverCleanupMap.get(iframeEl);\n };\n _proto.removeIframe = function removeIframe(iframeEl) {\n var storedDoc = this.iframeContentDocumentMap.get(iframeEl);\n if (storedDoc) {\n this.stylesheetManager.cleanupStylesheetsForRemovedNode(storedDoc);\n this.mirror.removeNodeFromMap(storedDoc, true);\n }\n this.iframes.delete(iframeEl);\n this.iframeContentDocumentMap.delete(iframeEl);\n var observerCleanup = this.iframeObserverCleanupMap.get(iframeEl);\n if (observerCleanup) {\n try {\n observerCleanup();\n } catch (e2) {}\n this.iframeObserverCleanupMap.delete(iframeEl);\n }\n };\n _proto.addLoadListener = function addLoadListener(cb) {\n this.loadListener = cb;\n };\n _proto.attachIframe = function attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (iframeEl.contentDocument) {\n this.iframeContentDocumentMap.set(iframeEl, iframeEl.contentDocument);\n }\n if (this.recordCrossOriginIframes) (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\"message\", this.handleMessage.bind(this));\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0) this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n };\n _proto.handleMessage = function handleMessage(message) {\n var crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin) return;\n var iframeSourceWindow = message.source;\n if (!iframeSourceWindow) return;\n var iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl) return;\n var transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent) this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n };\n _proto.transformCrossOriginEvent = function transformCrossOriginEvent(iframeEl, e2) {\n var _this = this;\n var _a2;\n switch(e2.type){\n case EventType.FullSnapshot:\n {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n var rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded:\n {\n return false;\n }\n case EventType.Plugin:\n {\n return e2;\n }\n case EventType.Custom:\n {\n this.replaceIds(e2.data.payload, iframeEl, [\n \"id\",\n \"parentId\",\n \"previousId\",\n \"nextId\"\n ]);\n return e2;\n }\n case EventType.IncrementalSnapshot:\n {\n switch(e2.data.source){\n case IncrementalSource.Mutation:\n {\n e2.data.adds.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n _this.replaceIdOnNode(n2.node, iframeEl);\n var rootId = _this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && _this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"id\"\n ]);\n });\n e2.data.attributes.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n e2.data.texts.forEach(function(n2) {\n _this.replaceIds(n2, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove:\n {\n e2.data.positions.forEach(function(p) {\n _this.replaceIds(p, iframeEl, [\n \"id\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize:\n {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleId\"\n ]);\n return e2;\n }\n case IncrementalSource.Font:\n {\n return e2;\n }\n case IncrementalSource.Selection:\n {\n e2.data.ranges.forEach(function(range) {\n _this.replaceIds(range, iframeEl, [\n \"start\",\n \"end\"\n ]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet:\n {\n this.replaceIds(e2.data, iframeEl, [\n \"id\"\n ]);\n this.replaceStyleIds(e2.data, iframeEl, [\n \"styleIds\"\n ]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach(function(style) {\n _this.replaceStyleIds(style, iframeEl, [\n \"styleId\"\n ]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n };\n _proto.replace = function replace(iframeMirror, obj, iframeEl, keys) {\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n };\n _proto.replaceIds = function replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n };\n _proto.replaceStyleIds = function replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n };\n _proto.replaceIdOnNode = function replaceIdOnNode(node2, iframeEl) {\n var _this = this;\n this.replaceIds(node2, iframeEl, [\n \"id\",\n \"rootId\"\n ]);\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.replaceIdOnNode(child, iframeEl);\n });\n }\n };\n _proto.patchRootIdOnNode = function patchRootIdOnNode(node2, rootId) {\n var _this = this;\n if (node2.type !== NodeType.Document && !node2.rootId) node2.rootId = rootId;\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach(function(child) {\n _this.patchRootIdOnNode(child, rootId);\n });\n }\n };\n return IframeManager;\n}();\nvar ShadowDomManager = /*#__PURE__*/ function() {\n function ShadowDomManager(options) {\n __publicField$1(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"scrollCb\");\n __publicField$1(this, \"bypassOptions\");\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n var _proto = ShadowDomManager.prototype;\n _proto.init = function init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n };\n _proto.addShadowRoot = function addShadowRoot(shadowRoot2, doc) {\n var _this = this;\n if (!isNativeShadowDom(shadowRoot2)) return;\n if (this.shadowDoms.has(shadowRoot2)) return;\n this.shadowDoms.add(shadowRoot2);\n var observer = initMutationObserver(_extends({}, this.bypassOptions, {\n doc: doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n }), shadowRoot2);\n this.restoreHandlers.push(function() {\n return observer.disconnect();\n });\n this.restoreHandlers.push(initScrollObserver(_extends({}, this.bypassOptions, {\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot2,\n mirror: this.mirror\n })));\n setTimeout(function() {\n if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0) _this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot2.adoptedStyleSheets, _this.mirror.getId(index$2.host(shadowRoot2)));\n _this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: _this.mirror,\n stylesheetManager: _this.bypassOptions.stylesheetManager\n }, shadowRoot2));\n }, 0);\n };\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */ _proto.observeAttachShadow = function observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n };\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */ _proto.patchAttachShadow = function patchAttachShadow(element, doc) {\n var manager = this;\n this.restoreHandlers.push(patch$2(element.prototype, \"attachShadow\", function(original) {\n return function(option) {\n var sRoot = original.call(this, option);\n var shadowRootEl = index$2.shadowRoot(this);\n if (shadowRootEl && inDom(this)) manager.addShadowRoot(shadowRootEl, doc);\n return sRoot;\n };\n }));\n };\n _proto.reset = function reset() {\n this.restoreHandlers.forEach(function(handler) {\n try {\n handler();\n } catch (e2) {}\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n };\n return ShadowDomManager;\n}();\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor(var i$1 = 0; i$1 < chars.length; i$1++){\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function encode(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for(i2 = 0; i2 < len; i2 += 3){\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nvar canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n var contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nvar saveWebGLVar = function(value, win, ctx) {\n if (!value || !(isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\")) return;\n var name = value.constructor.name;\n var list2 = variableListFor$1(ctx, name);\n var index2 = list2.indexOf(value);\n if (index2 === -1) {\n index2 = list2.length;\n list2.push(value);\n }\n return index2;\n};\nfunction serializeArg(value, win, ctx) {\n if (_instanceof(value, Array)) {\n return value.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n } else if (value === null) {\n return value;\n } else if (_instanceof(value, Float32Array) || _instanceof(value, Float64Array) || _instanceof(value, Int32Array) || _instanceof(value, Uint32Array) || _instanceof(value, Uint8Array) || _instanceof(value, Uint16Array) || _instanceof(value, Int16Array) || _instanceof(value, Int8Array) || _instanceof(value, Uint8ClampedArray)) {\n var name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n Object.values(value)\n ]\n };\n } else if (// SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n _instanceof(value, ArrayBuffer)) {\n var name1 = value.constructor.name;\n var base64 = encode(value);\n return {\n rr_type: name1,\n base64: base64\n };\n } else if (_instanceof(value, DataView)) {\n var name2 = value.constructor.name;\n return {\n rr_type: name2,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (_instanceof(value, HTMLImageElement)) {\n var name3 = value.constructor.name;\n var src = value.src;\n return {\n rr_type: name3,\n src: src\n };\n } else if (_instanceof(value, HTMLCanvasElement)) {\n var name4 = \"HTMLImageElement\";\n var src1 = value.toDataURL();\n return {\n rr_type: name4,\n src: src1\n };\n } else if (_instanceof(value, ImageData)) {\n var name5 = value.constructor.name;\n return {\n rr_type: name5,\n args: [\n serializeArg(value.data, win, ctx),\n value.width,\n value.height\n ]\n };\n } else if (isInstanceOfWebGLObject(value, win) || (typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\") {\n var name6 = value.constructor.name;\n var index2 = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name6,\n index: index2\n };\n }\n return value;\n}\nvar serializeArgs = function(args, win, ctx) {\n return args.map(function(arg) {\n return serializeArg(arg, win, ctx);\n });\n};\nvar isInstanceOfWebGLObject = function(value, win) {\n var webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n var supportedWebGLConstructorNames = webGLConstructorNames.filter(function(name) {\n return typeof win[name] === \"function\";\n });\n return Boolean(supportedWebGLConstructorNames.find(function(name) {\n return _instanceof(value, win[name]);\n }));\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n var _loop = function() {\n var prop = _step.value;\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(win.CanvasRenderingContext2D.prototype, prop, function(original) {\n return function() {\n var _this = this;\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n setTimeout(function() {\n var recordArgs = serializeArgs(args, win, _this);\n cb(_this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props2D), _step; !(_step = _iterator()).done;)_loop();\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n var handlers = [];\n try {\n var restoreHandler = patch$2(win.HTMLCanvasElement.prototype, \"getContext\", function(original) {\n return function(contextType) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n var ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this)) this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\n \"webgl\",\n \"webgl2\"\n ].includes(ctxName)) {\n if (args[0] && _type_of(args[0]) === \"object\") {\n var contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [].concat([\n contextType\n ], args));\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n var _loop = function() {\n var prop = _step.value;\n if (//prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)) {\n return \"continue\";\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n return \"continue\";\n }\n var restoreHandler = patch$2(prototype, prop, function(original) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var result2 = original.apply(this, args);\n saveWebGLVar(result2, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n var recordArgs = serializeArgs(args, win, this);\n var mutation = {\n type: type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result2;\n };\n });\n handlers.push(restoreHandler);\n } catch (e) {\n var hookHandler = hookSetter(prototype, prop, {\n set: function set(v2) {\n cb(this.canvas, {\n type: type,\n property: prop,\n args: [\n v2\n ],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n };\n var handlers = [];\n var props = Object.getOwnPropertyNames(prototype);\n for(var _iterator = _create_for_of_iterator_helper_loose(props), _step; !(_step = _iterator()).done;)_loop();\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n var _handlers;\n var handlers = [];\n (_handlers = handlers).push.apply(_handlers, [].concat(patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, win)));\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n var _handlers1;\n (_handlers1 = handlers).push.apply(_handlers1, [].concat(patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, win)));\n }\n return function() {\n handlers.forEach(function(h) {\n return h();\n });\n };\n}\nvar encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nvar decodeBase64 = function(base64) {\n return Uint8Array.from(atob(base64), function(c2) {\n return c2.charCodeAt(0);\n });\n};\nvar blob = typeof window !== \"undefined\" && window.Blob && new Blob([\n decodeBase64(encodedJs)\n], {\n type: \"text/javascript;charset=utf-8\"\n});\nfunction WorkerWrapper(options) {\n var objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL) throw \"\";\n var worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", function() {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\"data:text/javascript;base64,\" + encodedJs, {\n name: options == null ? void 0 : options.name\n });\n } finally{\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nvar CanvasManager = /*#__PURE__*/ function() {\n function CanvasManager(options) {\n var _this = this;\n __publicField$1(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"rafStamps\", {\n latestId: 0,\n invokeId: null\n });\n __publicField$1(this, \"mirror\");\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"resetObservers\");\n __publicField$1(this, \"frozen\", false);\n __publicField$1(this, \"locked\", false);\n __publicField$1(this, \"processMutation\", function(target, mutation) {\n var newFrame = _this.rafStamps.invokeId && _this.rafStamps.latestId !== _this.rafStamps.invokeId;\n if (newFrame || !_this.rafStamps.invokeId) _this.rafStamps.invokeId = _this.rafStamps.latestId;\n if (!_this.pendingCanvasMutations.has(target)) {\n _this.pendingCanvasMutations.set(target, []);\n }\n _this.pendingCanvasMutations.get(target).push(mutation);\n });\n var _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? \"all\" : _options_sampling, win = options.win, blockClass = options.blockClass, blockSelector = options.blockSelector, recordCanvas = options.recordCanvas, dataURLOptions = options.dataURLOptions;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\") this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\") this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions: dataURLOptions\n });\n }\n var _proto = CanvasManager.prototype;\n _proto.reset = function reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n };\n _proto.freeze = function freeze() {\n this.frozen = true;\n };\n _proto.unfreeze = function unfreeze() {\n this.frozen = false;\n };\n _proto.lock = function lock() {\n this.locked = true;\n };\n _proto.unlock = function unlock() {\n this.locked = false;\n };\n _proto.initCanvasFPSObserver = function initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n var _this = this;\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, true);\n var snapshotInProgressMap = /* @__PURE__ */ new Map();\n var worker = new WorkerWrapper();\n worker.onmessage = function(e2) {\n var id = e2.data.id;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data)) return;\n var _e2_data = e2.data, base64 = _e2_data.base64, type = _e2_data.type, width = _e2_data.width, height = _e2_data.height;\n _this.mutationCb({\n id: id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [\n 0,\n 0,\n width,\n height\n ]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [\n {\n rr_type: \"ArrayBuffer\",\n base64: base64\n }\n ],\n type: type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n var timeBetweenSnapshots = 1e3 / fps;\n var lastSnapshotTime = 0;\n var rafId;\n var getCanvas = function() {\n var matchedCanvas = [];\n win.document.querySelectorAll(\"canvas\").forEach(function(canvas) {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n return matchedCanvas;\n };\n var takeCanvasSnapshots = function(timestamp) {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n var _this1 = _this;\n getCanvas().forEach(/*#__PURE__*/ _async_to_generator(function(canvas) {\n var _a2, id, context, bitmap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n id = _this1.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id)) return [\n 2\n ];\n if (canvas.width === 0 || canvas.height === 0) return [\n 2\n ];\n snapshotInProgressMap.set(id, true);\n if ([\n \"webgl\",\n \"webgl2\"\n ].includes(canvas.__context)) {\n context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n return [\n 4,\n createImageBitmap(canvas)\n ];\n case 1:\n bitmap = _state.sent();\n worker.postMessage({\n id: id,\n bitmap: bitmap,\n width: canvas.width,\n height: canvas.height,\n dataURLOptions: options.dataURLOptions\n }, [\n bitmap\n ]);\n return [\n 2\n ];\n }\n });\n }));\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = function() {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n };\n _proto.initCanvasMutationObserver = function initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n var canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, false);\n var canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n var canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\n this.resetObservers = function() {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n };\n _proto.startPendingCanvasMutationFlusher = function startPendingCanvasMutationFlusher() {\n var _this = this;\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.startRAFTimestamping = function startRAFTimestamping() {\n var _this = this;\n var setLatestRAFTimestamp = function(timestamp) {\n _this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n _proto.flushPendingCanvasMutations = function flushPendingCanvasMutations() {\n var _this = this;\n this.pendingCanvasMutations.forEach(function(_values, canvas) {\n var id = _this.mirror.getId(canvas);\n _this.flushPendingCanvasMutationFor(canvas, id);\n });\n requestAnimationFrame(function() {\n return _this.flushPendingCanvasMutations();\n });\n };\n _proto.flushPendingCanvasMutationFor = function flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n var valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1) return;\n var values = valuesWithType.map(function(value) {\n value.type; var rest = _object_without_properties_loose(value, [\n \"type\"\n ]);\n return rest;\n });\n var type = valuesWithType[0].type;\n this.mutationCb({\n id: id,\n type: type,\n commands: values\n });\n this.pendingCanvasMutations.delete(canvas);\n };\n return CanvasManager;\n}();\nvar StylesheetManager = /*#__PURE__*/ function() {\n function StylesheetManager(options) {\n __publicField$1(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField$1(this, \"mutationCb\");\n __publicField$1(this, \"adoptedStyleSheetCb\");\n __publicField$1(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n var _proto = StylesheetManager.prototype;\n _proto.attachLinkElement = function attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes) this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n };\n _proto.trackLinkElement = function trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl)) return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n };\n _proto.adoptStyleSheets = function adoptStyleSheets(sheets, hostId) {\n var _this, _loop = function() {\n var sheet = _step.value;\n var styleId = void 0;\n if (!_this.styleMirror.has(sheet)) {\n styleId = _this.styleMirror.add(sheet);\n styles.push({\n styleId: styleId,\n rules: Array.from(sheet.rules || CSSRule, function(r2, index2) {\n return {\n rule: stringifyRule(r2, sheet.href),\n index: index2\n };\n })\n });\n } else styleId = _this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n };\n if (sheets.length === 0) return;\n var adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n var styles = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(sheets), _step; !(_step = _iterator()).done;)_this = this, _loop();\n if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n };\n _proto.reset = function reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n };\n /**\n * Cleans up stylesheets associated with a removed node.\n *\n * @param removedNode - The node that was removed from the DOM.\n */ _proto.cleanupStylesheetsForRemovedNode = function cleanupStylesheetsForRemovedNode(removedNode) {\n var _this = this;\n try {\n if (removedNode.nodeType === Node.DOCUMENT_NODE) {\n var doc = removedNode;\n if (doc.adoptedStyleSheets) {\n for(var _iterator = _create_for_of_iterator_helper_loose(doc.adoptedStyleSheets), _step; !(_step = _iterator()).done;){\n var sheet = _step.value;\n this.styleMirror.remove(sheet);\n }\n }\n }\n if (removedNode.nodeName === \"STYLE\") {\n var styleEl = removedNode;\n if (styleEl.sheet) {\n this.styleMirror.remove(styleEl.sheet);\n }\n }\n if (removedNode.nodeName === \"LINK\" && removedNode.rel === \"stylesheet\") {\n var linkEl = removedNode;\n if (linkEl.sheet) {\n this.styleMirror.remove(linkEl.sheet);\n }\n }\n if (removedNode.childNodes) {\n removedNode.childNodes.forEach(function(child) {\n _this.cleanupStylesheetsForRemovedNode(child);\n });\n }\n } catch (e2) {}\n };\n // TODO: take snapshot on stylesheet reload by applying event listener\n _proto.trackStylesheetInLinkElement = function trackStylesheetInLinkElement(_linkEl) {};\n return StylesheetManager;\n}();\nvar ProcessedNodeManager = /*#__PURE__*/ function() {\n function ProcessedNodeManager() {\n __publicField$1(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField$1(this, \"active\", false);\n }\n var _proto = ProcessedNodeManager.prototype;\n _proto.inOtherBuffer = function inOtherBuffer(node2, thisBuffer) {\n var buffers = this.nodeMap.get(node2);\n return buffers && Array.from(buffers).some(function(buffer) {\n return buffer !== thisBuffer;\n });\n };\n _proto.add = function add(node2, buffer) {\n var _this = this;\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(function() {\n _this.nodeMap = /* @__PURE__ */ new WeakMap();\n _this.active = false;\n });\n }\n this.nodeMap.set(node2, (this.nodeMap.get(node2) || /* @__PURE__ */ new Set()).add(buffer));\n };\n _proto.destroy = function destroy() {};\n return ProcessedNodeManager;\n}();\nfunction toOrigin(url) {\n try {\n var origin = new URL(url).origin;\n return origin !== \"null\" ? origin : null;\n } catch (e) {\n return null;\n }\n}\nfunction buildAllowedOriginSet(origins) {\n if (!Array.isArray(origins) || origins.length === 0) {\n throw new Error(\"[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.\");\n }\n var set = /* @__PURE__ */ new Set();\n for(var i2 = 0; i2 < origins.length; i2++){\n var entry = origins[i2];\n if (typeof entry !== \"string\") {\n throw new Error(\"[rrweb] allowedIframeOrigins[\" + i2 + \"] must be a string, got \" + (typeof entry === \"undefined\" ? \"undefined\" : _type_of(entry)) + \".\");\n }\n var origin = toOrigin(entry);\n if (origin) {\n set.add(origin);\n }\n }\n return Object.freeze(set);\n}\nvar wrappedEmit;\nvar takeFullSnapshot$1;\nvar canvasManager;\nvar recording = false;\ntry {\n if (Array.from([\n 1\n ], function(x2) {\n return x2 * 2;\n })[0] !== 2) {\n var cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nvar mirror = createMirror$2();\nfunction record(options) {\n if (options === void 0) options = {};\n var emit = options.emit, checkoutEveryNms = options.checkoutEveryNms, checkoutEveryNth = options.checkoutEveryNth, _options_blockClass = options.blockClass, blockClass = _options_blockClass === void 0 ? \"rr-block\" : _options_blockClass, _options_blockSelector = options.blockSelector, blockSelector = _options_blockSelector === void 0 ? null : _options_blockSelector, _options_ignoreClass = options.ignoreClass, ignoreClass = _options_ignoreClass === void 0 ? \"rr-ignore\" : _options_ignoreClass, _options_ignoreSelector = options.ignoreSelector, ignoreSelector = _options_ignoreSelector === void 0 ? null : _options_ignoreSelector, _options_maskTextClass = options.maskTextClass, maskTextClass = _options_maskTextClass === void 0 ? \"rr-mask\" : _options_maskTextClass, _options_maskTextSelector = options.maskTextSelector, maskTextSelector = _options_maskTextSelector === void 0 ? null : _options_maskTextSelector, _options_inlineStylesheet = options.inlineStylesheet, inlineStylesheet = _options_inlineStylesheet === void 0 ? true : _options_inlineStylesheet, maskAllInputs = options.maskAllInputs, _maskInputOptions = options.maskInputOptions, _slimDOMOptions = options.slimDOMOptions, maskInputFn = options.maskInputFn, maskTextFn = options.maskTextFn, hooks = options.hooks, packFn = options.packFn, _options_sampling = options.sampling, sampling = _options_sampling === void 0 ? {} : _options_sampling, _options_dataURLOptions = options.dataURLOptions, dataURLOptions = _options_dataURLOptions === void 0 ? {} : _options_dataURLOptions, mousemoveWait = options.mousemoveWait, _options_recordDOM = options.recordDOM, recordDOM = _options_recordDOM === void 0 ? true : _options_recordDOM, _options_recordCanvas = options.recordCanvas, recordCanvas = _options_recordCanvas === void 0 ? false : _options_recordCanvas, _options_recordCrossOriginIframes = options.recordCrossOriginIframes, recordCrossOriginIframes = _options_recordCrossOriginIframes === void 0 ? false : _options_recordCrossOriginIframes, allowedIframeOrigins = options.allowedIframeOrigins, _options_recordAfter = options.recordAfter, recordAfter = _options_recordAfter === void 0 ? options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\" : _options_recordAfter, _options_userTriggeredOnInput = options.userTriggeredOnInput, userTriggeredOnInput = _options_userTriggeredOnInput === void 0 ? false : _options_userTriggeredOnInput, _options_collectFonts = options.collectFonts, collectFonts = _options_collectFonts === void 0 ? false : _options_collectFonts, _options_inlineImages = options.inlineImages, inlineImages = _options_inlineImages === void 0 ? false : _options_inlineImages, plugins = options.plugins, _options_keepIframeSrcFn = options.keepIframeSrcFn, keepIframeSrcFn = _options_keepIframeSrcFn === void 0 ? function() {\n return false;\n } : _options_keepIframeSrcFn, _options_ignoreCSSAttributes = options.ignoreCSSAttributes, ignoreCSSAttributes = _options_ignoreCSSAttributes === void 0 ? /* @__PURE__ */ new Set([]) : _options_ignoreCSSAttributes, errorHandler2 = options.errorHandler;\n registerErrorHandler(errorHandler2);\n var validatedOrigins;\n if (recordCrossOriginIframes && allowedIframeOrigins && allowedIframeOrigins.length > 0) {\n validatedOrigins = buildAllowedOriginSet(allowedIframeOrigins);\n if (validatedOrigins.size === 0) {\n validatedOrigins = void 0;\n }\n }\n var inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n var passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return function() {};\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n var maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true,\n hidden: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : {\n password: true\n };\n var slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n var lastFullSnapshotEvent;\n var incrementalSnapshotCount = 0;\n var eventProcessor = function(e2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.eventProcessor) {\n e2 = plugin3.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = function(r2, isCheckout) {\n var _a2;\n var e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach(function(buf) {\n return buf.unfreeze();\n });\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n var message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout: isCheckout\n };\n if (validatedOrigins) {\n for(var _iterator = _create_for_of_iterator_helper_loose(validatedOrigins), _step; !(_step = _iterator()).done;){\n var targetOrigin = _step.value;\n window.parent.postMessage(message, targetOrigin);\n }\n } else {\n window.parent.postMessage(message, \"*\");\n }\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n var exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n var exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot$1(true);\n }\n }\n };\n var wrappedMutationEmit = function(m) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Mutation\n }, m)\n });\n };\n var wrappedScrollEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Scroll\n }, p)\n });\n };\n var wrappedCanvasMutationEmit = function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CanvasMutation\n }, p)\n });\n };\n var wrappedAdoptedStyleSheetEmit = function(a2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.AdoptedStyleSheet\n }, a2)\n });\n };\n var stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n var iframeManager = new IframeManager({\n mirror: mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes: recordCrossOriginIframes,\n wrappedEmit: wrappedEmit\n });\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins || []), _step; !(_step = _iterator()).done;){\n var plugin3 = _step.value;\n if (plugin3.getMirror) plugin3.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n var processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas: recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass: blockClass,\n blockSelector: blockSelector,\n mirror: mirror,\n sampling: sampling.canvas,\n dataURLOptions: dataURLOptions\n });\n var shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n dataURLOptions: dataURLOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n sampling: sampling,\n slimDOMOptions: slimDOMOptions,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n canvasManager: canvasManager,\n keepIframeSrcFn: keepIframeSrcFn,\n processedNodeManager: processedNodeManager\n },\n mirror: mirror\n });\n takeFullSnapshot$1 = function(isCheckout) {\n if (isCheckout === void 0) isCheckout = false;\n if (!recordDOM) {\n return;\n }\n wrappedEmit({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n }, isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach(function(buf) {\n return buf.lock();\n });\n var node2 = snapshot(document, {\n mirror: mirror,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOM: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n onSerialize: function(n2) {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(index$2.shadowRoot(n2), document);\n }\n },\n onIframeLoad: function(iframe, childSn) {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: function(linkEl, childSn) {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn: keepIframeSrcFn\n });\n if (!node2) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit({\n type: EventType.FullSnapshot,\n data: {\n node: node2,\n initialOffset: getWindowScroll(window)\n }\n }, isCheckout);\n mutationBuffers.forEach(function(buf) {\n return buf.unlock();\n });\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n try {\n var handlers = [];\n var observe = function(doc) {\n var _a2;\n return callbackWrapper(initObservers)({\n mutationCb: wrappedMutationEmit,\n mousemoveCb: function(positions, source) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: source,\n positions: positions\n }\n });\n },\n mouseInteractionCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MouseInteraction\n }, d)\n });\n },\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: function(d) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.ViewportResize\n }, d)\n });\n },\n inputCb: function(v2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Input\n }, v2)\n });\n },\n mediaInteractionCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.MediaInteraction\n }, p)\n });\n },\n styleSheetRuleCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleSheetRule\n }, r2)\n });\n },\n styleDeclarationCb: function(r2) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.StyleDeclaration\n }, r2)\n });\n },\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: function(p) {\n return wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Font\n }, p)\n });\n },\n selectionCb: function(p) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.Selection\n }, p)\n });\n },\n customElementCb: function(c2) {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: _extends({\n source: IncrementalSource.CustomElement\n }, c2)\n });\n },\n blockClass: blockClass,\n ignoreClass: ignoreClass,\n ignoreSelector: ignoreSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n maskInputOptions: maskInputOptions,\n inlineStylesheet: inlineStylesheet,\n sampling: sampling,\n recordDOM: recordDOM,\n recordCanvas: recordCanvas,\n inlineImages: inlineImages,\n userTriggeredOnInput: userTriggeredOnInput,\n collectFonts: collectFonts,\n doc: doc,\n maskInputFn: maskInputFn,\n maskTextFn: maskTextFn,\n keepIframeSrcFn: keepIframeSrcFn,\n blockSelector: blockSelector,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n mirror: mirror,\n iframeManager: iframeManager,\n stylesheetManager: stylesheetManager,\n shadowDomManager: shadowDomManager,\n processedNodeManager: processedNodeManager,\n canvasManager: canvasManager,\n ignoreCSSAttributes: ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter(function(p) {\n return p.observer;\n })) == null ? void 0 : _a2.map(function(p) {\n return {\n observer: p.observer,\n options: p.options,\n callback: function(payload) {\n return wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload: payload\n }\n });\n }\n };\n })) || []\n }, hooks);\n };\n iframeManager.addLoadListener(function(iframeEl) {\n try {\n var iframeDoc = iframeEl.contentDocument;\n var iframeHandler = observe(iframeDoc);\n handlers.push(iframeHandler);\n var existingCleanup = iframeManager.getObserverCleanup(iframeEl);\n iframeManager.setObserverCleanup(iframeEl, function() {\n if (existingCleanup) {\n try {\n existingCleanup();\n } catch (e2) {}\n }\n try {\n iframeHandler();\n var idx = handlers.indexOf(iframeHandler);\n if (idx !== -1) handlers.splice(idx, 1);\n removeMutationBufferForDoc(iframeDoc);\n } catch (e2) {}\n });\n } catch (error) {\n console.warn(error);\n }\n });\n var init = function() {\n takeFullSnapshot$1();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(on(\"DOMContentLoaded\", function() {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\") init();\n }));\n handlers.push(on(\"load\", function() {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\") init();\n }, window));\n }\n return function() {\n handlers.forEach(function(handler) {\n try {\n handler();\n } catch (error) {\n var msg = String(error).toLowerCase();\n if (!msg.includes(\"cross-origin\")) {\n console.warn(error);\n }\n }\n });\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = function(tag, payload) {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag: tag,\n payload: payload\n }\n });\n};\nrecord.freezePage = function() {\n mutationBuffers.forEach(function(buf) {\n return buf.freeze();\n });\n};\nrecord.takeFullSnapshot = function(isCheckout) {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot$1(isCheckout);\n};\nrecord.mirror = mirror;\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nrecord.addCustomEvent;\nrecord.freezePage;\nrecord.takeFullSnapshot;\nvar testableAccessors = {\n Node: [\n \"childNodes\",\n \"parentNode\",\n \"parentElement\",\n \"textContent\"\n ],\n ShadowRoot: [\n \"host\",\n \"styleSheets\"\n ],\n Element: [\n \"shadowRoot\",\n \"querySelector\",\n \"querySelectorAll\"\n ],\n MutationObserver: []\n};\nvar testableMethods = {\n Node: [\n \"contains\",\n \"getRootNode\"\n ],\n ShadowRoot: [\n \"getSelection\"\n ],\n Element: [],\n MutationObserver: [\n \"constructor\"\n ]\n};\nvar untaintedBasePrototype = {};\nvar isAngularZonePresent = function() {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key]) return untaintedBasePrototype[key];\n var defaultObj = globalThis[key];\n var defaultPrototype = defaultObj.prototype;\n var accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n var isUntaintedAccessors = Boolean(accessorNames && // @ts-expect-error 2345\n accessorNames.every(function(accessor) {\n var _a, _b;\n return Boolean((_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\"));\n }));\n var methodNames = key in testableMethods ? testableMethods[key] : void 0;\n var isUntaintedMethods = Boolean(methodNames && methodNames.every(// @ts-expect-error 2345\n function(method) {\n var _a;\n return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n }));\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n var iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n var win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n var untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch (e) {\n return defaultPrototype;\n }\n}\nvar untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a;\n var cacheKey = key + \".\" + String(accessor);\n if (untaintedAccessorCache[cacheKey]) return untaintedAccessorCache[cacheKey].call(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(untaintedPrototype, accessor)) == null ? void 0 : _a.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nvar untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n var cacheKey = key + \".\" + String(method);\n if (untaintedMethodCache[cacheKey]) return untaintedMethodCache[cacheKey].bind(instance);\n var untaintedPrototype = getUntaintedPrototype(key);\n var untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n if (!n || !(\"host\" in n)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n return n.styleSheets;\n}\nfunction shadowRoot(n) {\n if (!n || !(\"shadowRoot\" in n)) return null;\n return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nfunction patch$1(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar index = {\n childNodes: childNodes,\n parentNode: parentNode,\n parentElement: parentElement,\n textContent: textContent,\n contains: contains,\n getRootNode: getRootNode,\n host: host,\n styleSheets: styleSheets,\n shadowRoot: shadowRoot,\n querySelector: querySelector,\n querySelectorAll: querySelectorAll,\n mutationObserver: mutationObserverCtor,\n patch: patch$1\n};\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n }\n for(var eIndex = node2.classList.length; eIndex--;){\n var className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index.parentNode(node2), regex, checkAncestors);\n}\nfunction getDefaultExportFromCjs(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace(n) {\n if (n.__esModule) return n;\n var f = n.default;\n if (typeof f == \"function\") {\n var a = function a2() {\n if (_instanceof(this, a2)) {\n return Reflect.construct(f, arguments, this.constructor);\n }\n return f.apply(this, arguments);\n };\n a.prototype = f.prototype;\n } else a = {};\n Object.defineProperty(a, \"__esModule\", {\n value: true\n });\n Object.keys(n).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n, k);\n Object.defineProperty(a, k, d.get ? d : {\n enumerable: true,\n get: function get() {\n return n[k];\n }\n });\n });\n return a;\n}\nvar picocolors_browser = {\n exports: {}\n};\nvar x = String;\nvar create = function create() {\n return {\n isColorSupported: false,\n reset: x,\n bold: x,\n dim: x,\n italic: x,\n underline: x,\n inverse: x,\n hidden: x,\n strikethrough: x,\n black: x,\n red: x,\n green: x,\n yellow: x,\n blue: x,\n magenta: x,\n cyan: x,\n white: x,\n gray: x,\n bgBlack: x,\n bgRed: x,\n bgGreen: x,\n bgYellow: x,\n bgBlue: x,\n bgMagenta: x,\n bgCyan: x,\n bgWhite: x\n };\n};\npicocolors_browser.exports = create();\npicocolors_browser.exports.createColors = create;\nvar picocolors_browserExports = picocolors_browser.exports;\nvar __viteBrowserExternal = {};\nvar __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal\n}, Symbol.toStringTag, {\n value: \"Module\"\n}));\nvar require$$2 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);\nvar pico = picocolors_browserExports;\nvar terminalHighlight$1 = require$$2;\nvar CssSyntaxError$3 = /*#__PURE__*/ function(Error1) {\n _inherits(CssSyntaxError, Error1);\n function CssSyntaxError(message, line, column, source, file, plugin2) {\n var _this;\n _this = Error1.call(this, message) || this;\n _this.name = \"CssSyntaxError\";\n _this.reason = message;\n if (file) {\n _this.file = file;\n }\n if (source) {\n _this.source = source;\n }\n if (plugin2) {\n _this.plugin = plugin2;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n _this.line = line;\n _this.column = column;\n } else {\n _this.line = line.line;\n _this.column = line.column;\n _this.endLine = column.line;\n _this.endColumn = column.column;\n }\n }\n _this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, CssSyntaxError);\n }\n return _this;\n }\n var _proto = CssSyntaxError.prototype;\n _proto.setMessage = function setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n };\n _proto.showSourceCode = function showSourceCode(color) {\n var _this = this;\n if (!this.source) return \"\";\n var css = this.source;\n if (color == null) color = pico.isColorSupported;\n if (terminalHighlight$1) {\n if (color) css = terminalHighlight$1(css);\n }\n var lines = css.split(/\\r?\\n/);\n var start = Math.max(this.line - 3, 0);\n var end = Math.min(this.line + 2, lines.length);\n var maxWidth = String(end).length;\n var mark, aside;\n if (color) {\n var _pico_createColors = pico.createColors(true), bold = _pico_createColors.bold, gray = _pico_createColors.gray, red = _pico_createColors.red;\n mark = function(text) {\n return bold(red(text));\n };\n aside = function(text) {\n return gray(text);\n };\n } else {\n mark = aside = function(str) {\n return str;\n };\n }\n return lines.slice(start, end).map(function(line, index2) {\n var number = start + 1 + index2;\n var gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === _this.line) {\n var spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n };\n _proto.toString = function toString() {\n var code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n };\n return CssSyntaxError;\n}(_wrap_native_super(Error));\nvar cssSyntaxError = CssSyntaxError$3;\nCssSyntaxError$3.default = CssSyntaxError$3;\nvar symbols = {};\nsymbols.isClean = Symbol(\"isClean\");\nsymbols.my = Symbol(\"my\");\nvar DEFAULT_RAW = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nvar Stringifier$2 = /*#__PURE__*/ function() {\n function Stringifier(builder) {\n this.builder = builder;\n }\n var _proto = Stringifier.prototype;\n _proto.atrule = function atrule(node2, semicolon) {\n var name = \"@\" + node2.name;\n var params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n var end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n };\n _proto.beforeAfter = function beforeAfter(node2, detect) {\n var value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n var buf = node2.parent;\n var depth = 0;\n while(buf && buf.type !== \"root\"){\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n var indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for(var step = 0; step < depth; step++)value += indent;\n }\n }\n return value;\n };\n _proto.block = function block(node2, start) {\n var between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n var after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n };\n _proto.body = function body(node2) {\n var last = node2.nodes.length - 1;\n while(last > 0){\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n var semicolon = this.raw(node2, \"semicolon\");\n for(var i = 0; i < node2.nodes.length; i++){\n var child = node2.nodes[i];\n var before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i || semicolon);\n }\n };\n _proto.comment = function comment(node2) {\n var left = this.raw(node2, \"left\", \"commentLeft\");\n var right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n };\n _proto.decl = function decl(node2, semicolon) {\n var between = this.raw(node2, \"between\", \"colon\");\n var string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n };\n _proto.document = function document1(node2) {\n this.body(node2);\n };\n _proto.raw = function raw(node2, own, detect) {\n var value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n var parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW[detect];\n var root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n var method = \"raw\" + capitalize(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk(function(i) {\n value = i.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW[detect];\n root2.rawCache[detect] = value;\n return value;\n };\n _proto.rawBeforeClose = function rawBeforeClose(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== \"undefined\") {\n value = i.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawBeforeComment = function rawBeforeComment(root2, node2) {\n var value;\n root2.walkComments(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeDecl = function rawBeforeDecl(root2, node2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n };\n _proto.rawBeforeOpen = function rawBeforeOpen(root2) {\n var value;\n root2.walk(function(i) {\n if (i.type !== \"decl\") {\n value = i.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawBeforeRule = function rawBeforeRule(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && (i.parent !== root2 || root2.first !== i)) {\n if (typeof i.raws.before !== \"undefined\") {\n value = i.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n };\n _proto.rawColon = function rawColon(root2) {\n var value;\n root2.walkDecls(function(i) {\n if (typeof i.raws.between !== \"undefined\") {\n value = i.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n };\n _proto.rawEmptyBody = function rawEmptyBody(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawIndent = function rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n var value;\n root2.walk(function(i) {\n var p = i.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i.raws.before !== \"undefined\") {\n var parts = i.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n };\n _proto.rawSemicolon = function rawSemicolon(root2) {\n var value;\n root2.walk(function(i) {\n if (i.nodes && i.nodes.length && i.last.type === \"decl\") {\n value = i.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n };\n _proto.rawValue = function rawValue(node2, prop) {\n var value = node2[prop];\n var raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n };\n _proto.root = function root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n };\n _proto.rule = function rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n };\n _proto.stringify = function stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\");\n }\n this[node2.type](node2, semicolon);\n };\n return Stringifier;\n}();\nvar stringifier = Stringifier$2;\nStringifier$2.default = Stringifier$2;\nvar Stringifier$1 = stringifier;\nfunction stringify$4(node2, builder) {\n var str = new Stringifier$1(builder);\n str.stringify(node2);\n}\nvar stringify_1 = stringify$4;\nstringify$4.default = stringify$4;\nvar isClean$2 = symbols.isClean, my$2 = symbols.my;\nvar CssSyntaxError$2 = cssSyntaxError;\nvar Stringifier2 = stringifier;\nvar stringify$3 = stringify_1;\nfunction cloneNode(obj, parent) {\n var cloned = new obj.constructor();\n for(var i in obj){\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n continue;\n }\n if (i === \"proxyCache\") continue;\n var value = obj[i];\n var type = typeof value === \"undefined\" ? \"undefined\" : _type_of(value);\n if (i === \"parent\" && type === \"object\") {\n if (parent) cloned[i] = parent;\n } else if (i === \"source\") {\n cloned[i] = value;\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(function(j) {\n return cloneNode(j, cloned);\n });\n } else {\n if (type === \"object\" && value !== null) value = cloneNode(value);\n cloned[i] = value;\n }\n }\n return cloned;\n}\nvar Node$4 = /*#__PURE__*/ function() {\n function Node1(defaults) {\n if (defaults === void 0) defaults = {};\n this.raws = {};\n this[isClean$2] = false;\n this[my$2] = true;\n for(var name in defaults){\n if (name === \"nodes\") {\n this.nodes = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(defaults[name]), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n var _proto = Node1.prototype;\n _proto.addToError = function addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n var s = this.source;\n error.stack = error.stack.replace(/\\n\\s{4}at /, \"$&\" + s.input.from + \":\" + s.start.line + \":\" + s.start.column + \"$&\");\n }\n return error;\n };\n _proto.after = function after(add) {\n this.parent.insertAfter(this, add);\n return this;\n };\n _proto.assign = function assign(overrides) {\n if (overrides === void 0) overrides = {};\n for(var name in overrides){\n this[name] = overrides[name];\n }\n return this;\n };\n _proto.before = function before(add) {\n this.parent.insertBefore(this, add);\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n };\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = cloneNode(this);\n for(var name in overrides){\n cloned[name] = overrides[name];\n }\n return cloned;\n };\n _proto.cloneAfter = function cloneAfter(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n };\n _proto.cloneBefore = function cloneBefore(overrides) {\n if (overrides === void 0) overrides = {};\n var cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n };\n _proto.error = function error(message, opts) {\n if (opts === void 0) opts = {};\n if (this.source) {\n var _this_rangeBy = this.rangeBy(opts), end = _this_rangeBy.end, start = _this_rangeBy.start;\n return this.source.input.error(message, {\n column: start.column,\n line: start.line\n }, {\n column: end.column,\n line: end.line\n }, opts);\n }\n return new CssSyntaxError$2(message);\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */ prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.markDirty = function markDirty() {\n if (this[isClean$2]) {\n this[isClean$2] = false;\n var next = this;\n while(next = next.parent){\n next[isClean$2] = false;\n }\n }\n };\n _proto.next = function next() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n };\n _proto.positionBy = function positionBy(opts, stringRepresentation) {\n var pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n };\n _proto.positionInside = function positionInside(index2, stringRepresentation) {\n var string = stringRepresentation || this.toString();\n var column = this.source.start.column;\n var line = this.source.start.line;\n for(var i = 0; i < index2; i++){\n if (string[i] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return {\n column: column,\n line: line\n };\n };\n _proto.prev = function prev() {\n if (!this.parent) return void 0;\n var index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n };\n _proto.rangeBy = function rangeBy(opts) {\n var start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n var end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n var stringRepresentation = this.toString();\n var index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = {\n column: start.column + 1,\n line: start.line\n };\n }\n return {\n end: end,\n start: start\n };\n };\n _proto.raw = function raw(prop, defaultType) {\n var str = new Stringifier2();\n return str.raw(this, prop, defaultType);\n };\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n };\n _proto.replaceWith = function replaceWith() {\n for(var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++){\n nodes[_key] = arguments[_key];\n }\n if (this.parent) {\n var bookmark = this;\n var foundSelf = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n };\n _proto.root = function root() {\n var result2 = this;\n while(result2.parent && result2.parent.type !== \"document\"){\n result2 = result2.parent;\n }\n return result2;\n };\n _proto.toJSON = function toJSON(_, inputs) {\n var fixed = {};\n var emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n var inputsNextIndex = 0;\n for(var name in this){\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n var value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map(function(i) {\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.toJSON) {\n return i.toJSON(null, inputs);\n } else {\n return i;\n }\n });\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n var inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId: inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [].concat(inputs.keys()).map(function(input2) {\n return input2.toJSON();\n });\n }\n return fixed;\n };\n _proto.toProxy = function toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n };\n _proto.toString = function toString(stringifier2) {\n if (stringifier2 === void 0) stringifier2 = stringify$3;\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n var result2 = \"\";\n stringifier2(this, function(i) {\n result2 += i;\n });\n return result2;\n };\n _proto.warn = function warn(result2, text, opts) {\n var data = {\n node: this\n };\n for(var i in opts)data[i] = opts[i];\n return result2.warn(text, data);\n };\n _create_class(Node1, [\n {\n key: \"proxyOf\",\n get: function get() {\n return this;\n }\n }\n ]);\n return Node1;\n}();\nvar node = Node$4;\nNode$4.default = Node$4;\nvar Node$3 = node;\nvar Declaration$4 = /*#__PURE__*/ function(Node$3) {\n _inherits(Declaration, Node$3);\n function Declaration(defaults) {\n var _this;\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = _extends({}, defaults, {\n value: String(defaults.value)\n });\n }\n _this = Node$3.call(this, defaults) || this;\n _this.type = \"decl\";\n return _this;\n }\n _create_class(Declaration, [\n {\n key: \"variable\",\n get: function get() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n }\n ]);\n return Declaration;\n}(Node$3);\nvar declaration = Declaration$4;\nDeclaration$4.default = Declaration$4;\nvar urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nvar nanoid$1 = function(size) {\n if (size === void 0) size = 21;\n var id = \"\";\n var i = size;\n while(i--){\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure = {\n nanoid: nanoid$1\n};\nvar SourceMapConsumer$2 = require$$2.SourceMapConsumer, SourceMapGenerator$2 = require$$2.SourceMapGenerator;\nvar existsSync = require$$2.existsSync, readFileSync = require$$2.readFileSync;\nvar dirname$1 = require$$2.dirname, join = require$$2.join;\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nvar PreviousMap$2 = /*#__PURE__*/ function() {\n function PreviousMap(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n var prev = opts.map ? opts.map.prev : void 0;\n var text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1(this.mapFile);\n if (text) this.text = text;\n }\n var _proto = PreviousMap.prototype;\n _proto.consumer = function consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2(this.text);\n }\n return this.consumerCache;\n };\n _proto.decodeInline = function decodeInline(text) {\n var baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n var baseUri = /^data:application\\/json;base64,/;\n var charsetUri = /^data:application\\/json;charset=utf-?8,/;\n var uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length));\n }\n var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n };\n _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n };\n _proto.isMap = function isMap(map) {\n if ((typeof map === \"undefined\" ? \"undefined\" : _type_of(map)) !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n };\n _proto.loadAnnotation = function loadAnnotation(css) {\n var comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n var start = css.lastIndexOf(comments.pop());\n var end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n };\n _proto.loadFile = function loadFile(path) {\n this.root = dirname$1(path);\n if (existsSync(path)) {\n this.mapFile = path;\n return readFileSync(path, \"utf-8\").toString().trim();\n }\n };\n _proto.loadMap = function loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n var prevPath = prev(file);\n if (prevPath) {\n var map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\"Unable to load previous source map: \" + prevPath.toString());\n }\n return map;\n }\n } else if (_instanceof(prev, SourceMapConsumer$2)) {\n return SourceMapGenerator$2.fromSourceMap(prev).toString();\n } else if (_instanceof(prev, SourceMapGenerator$2)) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\"Unsupported previous source map format: \" + prev.toString());\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n var map1 = this.annotation;\n if (file) map1 = join(dirname$1(file), map1);\n return this.loadFile(map1);\n }\n };\n _proto.startWith = function startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n };\n _proto.withContent = function withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n };\n return PreviousMap;\n}();\nvar previousMap = PreviousMap$2;\nPreviousMap$2.default = PreviousMap$2;\nvar SourceMapConsumer$1 = require$$2.SourceMapConsumer, SourceMapGenerator$1 = require$$2.SourceMapGenerator;\nvar fileURLToPath = require$$2.fileURLToPath, pathToFileURL$1 = require$$2.pathToFileURL;\nvar isAbsolute = require$$2.isAbsolute, resolve$1 = require$$2.resolve;\nvar nanoid = nonSecure.nanoid;\nvar terminalHighlight = require$$2;\nvar CssSyntaxError$1 = cssSyntaxError;\nvar PreviousMap$1 = previousMap;\nvar fromOffsetCache = Symbol(\"fromOffsetCache\");\nvar sourceMapAvailable$1 = Boolean(SourceMapConsumer$1 && SourceMapGenerator$1);\nvar pathAvailable$1 = Boolean(resolve$1 && isAbsolute);\nvar Input$4 = /*#__PURE__*/ function() {\n function Input(css, opts) {\n if (opts === void 0) opts = {};\n if (css === null || typeof css === \"undefined\" || (typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && !css.toString) {\n throw new Error(\"PostCSS received \" + css + \" instead of CSS string\");\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1(opts.from);\n }\n }\n if (pathAvailable$1 && sourceMapAvailable$1) {\n var map = new PreviousMap$1(this.css, opts);\n if (map.text) {\n this.map = map;\n var file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"\";\n }\n if (this.map) this.map.file = this.from;\n }\n var _proto = Input.prototype;\n _proto.error = function error(message, line, column, opts) {\n if (opts === void 0) opts = {};\n var result2, endLine, endColumn;\n if (line && (typeof line === \"undefined\" ? \"undefined\" : _type_of(line)) === \"object\") {\n var start = line;\n var end = column;\n if (typeof start.offset === \"number\") {\n var pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n var pos1 = this.fromOffset(end.offset);\n endLine = pos1.line;\n endColumn = pos1.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n var pos2 = this.fromOffset(line);\n line = pos2.line;\n column = pos2.col;\n }\n var origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1(message, origin.endLine === void 0 ? origin.line : {\n column: origin.column,\n line: origin.line\n }, origin.endLine === void 0 ? origin.column : {\n column: origin.endColumn,\n line: origin.endLine\n }, origin.source, origin.file, opts.plugin);\n } else {\n result2 = new CssSyntaxError$1(message, endLine === void 0 ? line : {\n column: column,\n line: line\n }, endLine === void 0 ? column : {\n column: endColumn,\n line: endLine\n }, this.css, this.file, opts.plugin);\n }\n result2.input = {\n column: column,\n endColumn: endColumn,\n endLine: endLine,\n line: line,\n source: this.css\n };\n if (this.file) {\n if (pathToFileURL$1) {\n result2.input.url = pathToFileURL$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n };\n _proto.fromOffset = function fromOffset(offset) {\n var lastLine, lineToIndex;\n if (!this[fromOffsetCache]) {\n var lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n var prevIndex = 0;\n for(var i = 0, l = lines.length; i < l; i++){\n lineToIndex[i] = prevIndex;\n prevIndex += lines[i].length + 1;\n }\n this[fromOffsetCache] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n var min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n var max = lineToIndex.length - 2;\n var mid;\n while(min < max){\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n };\n _proto.mapResolve = function mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n };\n _proto.origin = function origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n var consumer = this.map.consumer();\n var from = consumer.originalPositionFor({\n column: column,\n line: line\n });\n if (!from.source) return false;\n var to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({\n column: endColumn,\n line: endLine\n });\n }\n var fromUrl;\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL$1(from.source);\n } else {\n fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL$1(this.map.mapFile));\n }\n var result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath) {\n result2.file = fileURLToPath(fromUrl);\n } else {\n throw new Error(\"file: protocol is not available in this PostCSS build\");\n }\n }\n var source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n };\n _proto.toJSON = function toJSON() {\n var json = {};\n for(var _i = 0, _iter = [\n \"hasBOM\",\n \"css\",\n \"file\",\n \"id\"\n ]; _i < _iter.length; _i++){\n var name = _iter[_i];\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = _extends({}, this.map);\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n };\n _create_class(Input, [\n {\n key: \"from\",\n get: function get() {\n return this.file || this.id;\n }\n }\n ]);\n return Input;\n}();\nvar input = Input$4;\nInput$4.default = Input$4;\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input$4);\n}\nvar SourceMapConsumer = require$$2.SourceMapConsumer, SourceMapGenerator = require$$2.SourceMapGenerator;\nvar dirname = require$$2.dirname, relative = require$$2.relative, resolve = require$$2.resolve, sep = require$$2.sep;\nvar pathToFileURL = require$$2.pathToFileURL;\nvar Input$3 = input;\nvar sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\nvar pathAvailable = Boolean(dirname && resolve && relative && sep);\nvar MapGenerator$2 = /*#__PURE__*/ function() {\n function MapGenerator(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n var _proto = MapGenerator.prototype;\n _proto.addAnnotation = function addAnnotation() {\n var content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n var eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n };\n _proto.applyPrevMaps = function applyPrevMaps() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.previous()), _step; !(_step = _iterator()).done;){\n var prev = _step.value;\n var from = this.toUrl(this.path(prev.file));\n var root2 = prev.root || dirname(prev.file);\n var map = void 0;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n };\n _proto.clearAnnotation = function clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n var node2;\n for(var i = this.root.nodes.length - 1; i >= 0; i--){\n node2 = this.root.nodes[i];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n };\n _proto.generate = function generate() {\n this.clearAnnotation();\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap();\n } else {\n var result2 = \"\";\n this.stringify(this.root, function(i) {\n result2 += i;\n });\n return [\n result2\n ];\n }\n };\n _proto.generateMap = function generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n var prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: {\n column: 0,\n line: 1\n },\n original: {\n column: 0,\n line: 1\n },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [\n this.css\n ];\n } else {\n return [\n this.css,\n this.map\n ];\n }\n };\n _proto.generateString = function generateString() {\n var _this = this;\n this.css = \"\";\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n var line = 1;\n var column = 1;\n var noSource = \"\";\n var mapping = {\n generated: {\n column: 0,\n line: 0\n },\n original: {\n column: 0,\n line: 0\n },\n source: \"\"\n };\n var lines, last;\n this.stringify(this.root, function(str, node2, type) {\n _this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n _this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n var p = node2.parent || {\n raws: {}\n };\n var childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = _this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n _this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n _this.map.addMapping(mapping);\n }\n }\n }\n });\n };\n _proto.isAnnotation = function isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.annotation;\n });\n }\n return true;\n };\n _proto.isInline = function isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n var annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.inline;\n });\n }\n return true;\n };\n _proto.isMap = function isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n };\n _proto.isSourcesContent = function isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some(function(i) {\n return i.withContent();\n });\n }\n return true;\n };\n _proto.outputFile = function outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n };\n _proto.path = function path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n var cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n var from = this.opts.to ? dirname(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname(resolve(from, this.mapOpts.annotation));\n }\n var path = relative(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n };\n _proto.previous = function previous() {\n var _this = this;\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source && node2.source.input.map) {\n var map = node2.source.input.map;\n if (!_this.previousMaps.includes(map)) {\n _this.previousMaps.push(map);\n }\n }\n });\n } else {\n var input2 = new Input$3(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n };\n _proto.setSourcesContent = function setSourcesContent() {\n var _this = this;\n var already = {};\n if (this.root) {\n this.root.walk(function(node2) {\n if (node2.source) {\n var from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n var fromUrl = _this.usesFileUrls ? _this.toFileUrl(from) : _this.toUrl(_this.path(from));\n _this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n var from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"\";\n this.map.setSourceContent(from, this.css);\n }\n };\n _proto.sourcePath = function sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n };\n _proto.toBase64 = function toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n };\n _proto.toFileUrl = function toFileUrl(path) {\n var cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL) {\n var fileURL = pathToFileURL(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\"`map.absolute` option is not available in this PostCSS build\");\n }\n };\n _proto.toUrl = function toUrl(path) {\n var cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n var url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n };\n return MapGenerator;\n}();\nvar mapGenerator = MapGenerator$2;\nvar Node$2 = node;\nvar Comment$4 = /*#__PURE__*/ function(Node$2) {\n _inherits(Comment, Node$2);\n function Comment(defaults) {\n var _this;\n _this = Node$2.call(this, defaults) || this;\n _this.type = \"comment\";\n return _this;\n }\n return Comment;\n}(Node$2);\nvar comment = Comment$4;\nComment$4.default = Comment$4;\nvar isClean$1 = symbols.isClean, my$1 = symbols.my;\nvar Declaration$3 = declaration;\nvar Comment$3 = comment;\nvar Node$1 = node;\nvar parse$4, Rule$4, AtRule$4, Root$6;\nfunction cleanSource(nodes) {\n return nodes.map(function(i) {\n if (i.nodes) i.nodes = cleanSource(i.nodes);\n delete i.source;\n return i;\n });\n}\nfunction markDirtyUp(node2) {\n node2[isClean$1] = false;\n if (node2.proxyOf.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(node2.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n markDirtyUp(i);\n }\n }\n}\nvar Container$7 = /*#__PURE__*/ function(Node$1) {\n _inherits(Container, Node$1);\n function Container() {\n return Node$1.apply(this, arguments) || this;\n }\n var _proto = Container.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.last);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.push(node2);\n }\n }\n this.markDirty();\n return this;\n };\n _proto.cleanRaws = function cleanRaws(keepBetween) {\n Node$1.prototype.cleanRaws.call(this, keepBetween);\n if (this.nodes) {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.cleanRaws(keepBetween);\n }\n }\n };\n _proto.each = function each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n var iterator = this.getIterator();\n var index2, result2;\n while(this.indexes[iterator] < this.proxyOf.nodes.length){\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n };\n _proto.every = function every(condition) {\n return this.nodes.every(condition);\n };\n _proto.getIterator = function getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n var iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n };\n _proto.getProxyProcessor = function getProxyProcessor() {\n return {\n get: function get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _node2;\n return (_node2 = node2)[prop].apply(_node2, [].concat(args.map(function(i) {\n if (typeof i === \"function\") {\n return function(child, index2) {\n return i(child.toProxy(), index2);\n };\n } else {\n return i;\n }\n })));\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return function(cb) {\n return node2[prop](function(child) {\n for(var _len = arguments.length, other = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n other[_key - 1] = arguments[_key];\n }\n return cb.apply(void 0, [].concat([\n child.toProxy()\n ], other));\n });\n };\n } else if (prop === \"root\") {\n return function() {\n return node2.root().toProxy();\n };\n } else if (prop === \"nodes\") {\n return node2.nodes.map(function(i) {\n return i.toProxy();\n });\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set: function set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n };\n _proto.index = function index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n };\n _proto.insertAfter = function insertAfter(exist, add) {\n var existIndex = this.index(exist);\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.insertBefore = function insertBefore(exist, add) {\n var existIndex = this.index(exist);\n var type = existIndex === 0 ? \"prepend\" : false;\n var nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n this.proxyOf.nodes.splice(existIndex, 0, node2);\n }\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.normalize = function normalize(nodes, sample) {\n var _this = this;\n if (typeof nodes === \"string\") {\n nodes = cleanSource(parse$4(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.parent) i.parent.removeChild(i, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var i1 = _step1.value;\n if (i1.parent) i1.parent.removeChild(i1, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [\n nodes\n ];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [\n new Declaration$3(nodes)\n ];\n } else if (nodes.selector) {\n nodes = [\n new Rule$4(nodes)\n ];\n } else if (nodes.name) {\n nodes = [\n new AtRule$4(nodes)\n ];\n } else if (nodes.text) {\n nodes = [\n new Comment$3(nodes)\n ];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n var processed = nodes.map(function(i) {\n if (!i[my$1]) Container.rebuild(i);\n i = i.proxyOf;\n if (i.parent) i.parent.removeChild(i);\n if (i[isClean$1]) markDirtyUp(i);\n if (typeof i.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i.parent = _this.proxyOf;\n return i;\n });\n return processed;\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n children = children.reverse();\n for(var _iterator = _create_for_of_iterator_helper_loose(children), _step; !(_step = _iterator()).done;){\n var child = _step.value;\n var nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(nodes), _step1; !(_step1 = _iterator1()).done;){\n var node2 = _step1.value;\n this.proxyOf.nodes.unshift(node2);\n }\n for(var id in this.indexes){\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.push = function push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n };\n _proto.removeAll = function removeAll() {\n for(var _iterator = _create_for_of_iterator_helper_loose(this.proxyOf.nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.parent = void 0;\n }\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n };\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n var index2;\n for(var id in this.indexes){\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n };\n _proto.replaceValues = function replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls(function(decl) {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n };\n _proto.some = function some(condition) {\n return this.nodes.some(condition);\n };\n _proto.walk = function walk(callback) {\n return this.each(function(child, i) {\n var result2;\n try {\n result2 = callback(child, i);\n } catch (e) {\n throw child.addToError(e);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n };\n _proto.walkAtRules = function walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk(function(child, i) {\n if (child.type === \"atrule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(name, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i);\n }\n });\n };\n _proto.walkComments = function walkComments(callback) {\n return this.walk(function(child, i) {\n if (child.type === \"comment\") {\n return callback(child, i);\n }\n });\n };\n _proto.walkDecls = function walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk(function(child, i) {\n if (child.type === \"decl\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(prop, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i);\n }\n });\n };\n _proto.walkRules = function walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk(function(child, i) {\n if (child.type === \"rule\") {\n return callback(child, i);\n }\n });\n }\n if (_instanceof(selector, RegExp)) {\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i);\n }\n });\n }\n return this.walk(function(child, i) {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i);\n }\n });\n };\n _create_class(Container, [\n {\n key: \"first\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n },\n {\n key: \"last\",\n get: function get() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n }\n ]);\n return Container;\n}(Node$1);\nContainer$7.registerParse = function(dependant) {\n parse$4 = dependant;\n};\nContainer$7.registerRule = function(dependant) {\n Rule$4 = dependant;\n};\nContainer$7.registerAtRule = function(dependant) {\n AtRule$4 = dependant;\n};\nContainer$7.registerRoot = function(dependant) {\n Root$6 = dependant;\n};\nvar container = Container$7;\nContainer$7.default = Container$7;\nContainer$7.rebuild = function(node2) {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6.prototype);\n }\n node2[my$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach(function(child) {\n Container$7.rebuild(child);\n });\n }\n};\nvar Container$6 = container;\nvar LazyResult$4, Processor$3;\nvar Document$3 = /*#__PURE__*/ function(Container$6) {\n _inherits(Document, Container$6);\n function Document(defaults) {\n var _this;\n _this = Container$6.call(this, _extends({\n type: \"document\"\n }, defaults)) || this;\n if (!_this.nodes) {\n _this.nodes = [];\n }\n return _this;\n }\n var _proto = Document.prototype;\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$4(new Processor$3(), this, opts);\n return lazy.stringify();\n };\n return Document;\n}(Container$6);\nDocument$3.registerLazyResult = function(dependant) {\n LazyResult$4 = dependant;\n};\nDocument$3.registerProcessor = function(dependant) {\n Processor$3 = dependant;\n};\nvar document$1 = Document$3;\nDocument$3.default = Document$3;\nvar printed = {};\nvar warnOnce$2 = function warnOnce(message) {\n if (printed[message]) return;\n printed[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nvar Warning$2 = /*#__PURE__*/ function() {\n function Warning(text, opts) {\n if (opts === void 0) opts = {};\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n var range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for(var opt in opts)this[opt] = opts[opt];\n }\n var _proto = Warning.prototype;\n _proto.toString = function toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n };\n return Warning;\n}();\nvar warning = Warning$2;\nWarning$2.default = Warning$2;\nvar Warning$1 = warning;\nvar Result$3 = /*#__PURE__*/ function() {\n function Result(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n var _proto = Result.prototype;\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.warn = function warn(text, opts) {\n if (opts === void 0) opts = {};\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n var warning2 = new Warning$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n };\n _proto.warnings = function warnings() {\n return this.messages.filter(function(i) {\n return i.type === \"warning\";\n });\n };\n _create_class(Result, [\n {\n key: \"content\",\n get: function get() {\n return this.css;\n }\n }\n ]);\n return Result;\n}();\nvar result = Result$3;\nResult$3.default = Result$3;\nvar SINGLE_QUOTE = \"'\".charCodeAt(0);\nvar DOUBLE_QUOTE = '\"'.charCodeAt(0);\nvar BACKSLASH = \"\\\\\".charCodeAt(0);\nvar SLASH = \"/\".charCodeAt(0);\nvar NEWLINE = \"\\n\".charCodeAt(0);\nvar SPACE = \" \".charCodeAt(0);\nvar FEED = \"\\f\".charCodeAt(0);\nvar TAB = \"\t\".charCodeAt(0);\nvar CR = \"\\r\".charCodeAt(0);\nvar OPEN_SQUARE = \"[\".charCodeAt(0);\nvar CLOSE_SQUARE = \"]\".charCodeAt(0);\nvar OPEN_PARENTHESES = \"(\".charCodeAt(0);\nvar CLOSE_PARENTHESES = \")\".charCodeAt(0);\nvar OPEN_CURLY = \"{\".charCodeAt(0);\nvar CLOSE_CURLY = \"}\".charCodeAt(0);\nvar SEMICOLON = \";\".charCodeAt(0);\nvar ASTERISK = \"*\".charCodeAt(0);\nvar COLON = \":\".charCodeAt(0);\nvar AT = \"@\".charCodeAt(0);\nvar RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nvar RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\nvar RE_HEX_ESCAPE = /[\\da-f]/i;\nvar tokenize = function tokenizer(input2, options) {\n if (options === void 0) options = {};\n var css = input2.css.valueOf();\n var ignore = options.ignoreErrors;\n var code, next, quote, content, escape;\n var escaped, escapePos, prev, n, currentToken;\n var length = css.length;\n var pos = 0;\n var buffer = [];\n var returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch(code){\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED:\n {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n }while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n currentToken = [\n \"space\",\n css.slice(pos, next)\n ];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES:\n {\n var controlChar = String.fromCharCode(code);\n currentToken = [\n controlChar,\n controlChar,\n pos\n ];\n break;\n }\n case OPEN_PARENTHESES:\n {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"brackets\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = [\n \"(\",\n \"(\",\n pos\n ];\n } else {\n currentToken = [\n \"brackets\",\n content,\n pos,\n next\n ];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE:\n {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while(css.charCodeAt(escapePos - 1) === BACKSLASH){\n escapePos -= 1;\n escaped = !escaped;\n }\n }while (escaped);\n currentToken = [\n \"string\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case AT:\n {\n RE_AT_END.lastIndex = pos + 1;\n RE_AT_END.test(css);\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END.lastIndex - 2;\n }\n currentToken = [\n \"at-word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n case BACKSLASH:\n {\n next = pos;\n escape = true;\n while(css.charCodeAt(next + 1) === BACKSLASH){\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n next += 1;\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while(RE_HEX_ESCAPE.test(css.charAt(next + 1))){\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1;\n }\n }\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n break;\n }\n default:\n {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\n \"comment\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n pos = next;\n } else {\n RE_WORD_END.lastIndex = pos + 1;\n RE_WORD_END.test(css);\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END.lastIndex - 2;\n }\n currentToken = [\n \"word\",\n css.slice(pos, next + 1),\n pos,\n next\n ];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back: back,\n endOfFile: endOfFile,\n nextToken: nextToken,\n position: position\n };\n};\nvar Container$5 = container;\nvar AtRule$3 = /*#__PURE__*/ function(Container$5) {\n _inherits(AtRule, Container$5);\n function AtRule(defaults) {\n var _this;\n _this = Container$5.call(this, defaults) || this;\n _this.type = \"atrule\";\n return _this;\n }\n var _proto = AtRule.prototype;\n _proto.append = function append() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_append;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_append = Container$5.prototype.append).call.apply(_Container$5_prototype_append, [].concat([\n this\n ], children));\n };\n _proto.prepend = function prepend() {\n for(var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++){\n children[_key] = arguments[_key];\n }\n var _Container$5_prototype_prepend;\n if (!this.proxyOf.nodes) this.nodes = [];\n return (_Container$5_prototype_prepend = Container$5.prototype.prepend).call.apply(_Container$5_prototype_prepend, [].concat([\n this\n ], children));\n };\n return AtRule;\n}(Container$5);\nvar atRule = AtRule$3;\nAtRule$3.default = AtRule$3;\nContainer$5.registerAtRule(AtRule$3);\nvar Container$4 = container;\nvar LazyResult$3, Processor$2;\nvar Root$5 = /*#__PURE__*/ function(Container$4) {\n _inherits(Root, Container$4);\n function Root(defaults) {\n var _this;\n _this = Container$4.call(this, defaults) || this;\n _this.type = \"root\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n var _proto = Root.prototype;\n _proto.normalize = function normalize(child, sample, type) {\n var nodes = Container$4.prototype.normalize.call(this, child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for(var _iterator = _create_for_of_iterator_helper_loose(nodes), _step; !(_step = _iterator()).done;){\n var node2 = _step.value;\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n };\n _proto.removeChild = function removeChild(child, ignore) {\n var index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return Container$4.prototype.removeChild.call(this, child);\n };\n _proto.toResult = function toResult(opts) {\n if (opts === void 0) opts = {};\n var lazy = new LazyResult$3(new Processor$2(), this, opts);\n return lazy.stringify();\n };\n return Root;\n}(Container$4);\nRoot$5.registerLazyResult = function(dependant) {\n LazyResult$3 = dependant;\n};\nRoot$5.registerProcessor = function(dependant) {\n Processor$2 = dependant;\n};\nvar root = Root$5;\nRoot$5.default = Root$5;\nContainer$4.registerRoot(Root$5);\nvar list$2 = {\n comma: function comma(string) {\n return list$2.split(string, [\n \",\"\n ], true);\n },\n space: function space(string) {\n var spaces = [\n \" \",\n \"\\n\",\n \"\t\"\n ];\n return list$2.split(string, spaces);\n },\n split: function split(string, separators, last) {\n var array = [];\n var current = \"\";\n var split = false;\n var func = 0;\n var inQuote = false;\n var prevQuote = \"\";\n var escape = false;\n for(var _iterator = _create_for_of_iterator_helper_loose(string), _step; !(_step = _iterator()).done;){\n var letter = _step.value;\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1 = list$2;\nlist$2.default = list$2;\nvar Container$3 = container;\nvar list$1 = list_1;\nvar Rule$3 = /*#__PURE__*/ function(Container$3) {\n _inherits(Rule, Container$3);\n function Rule(defaults) {\n var _this;\n _this = Container$3.call(this, defaults) || this;\n _this.type = \"rule\";\n if (!_this.nodes) _this.nodes = [];\n return _this;\n }\n _create_class(Rule, [\n {\n key: \"selectors\",\n get: function get() {\n return list$1.comma(this.selector);\n },\n set: function set(values) {\n var match = this.selector ? this.selector.match(/,\\s*/) : null;\n var sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n }\n ]);\n return Rule;\n}(Container$3);\nvar rule = Rule$3;\nRule$3.default = Rule$3;\nContainer$3.registerRule(Rule$3);\nvar Declaration$2 = declaration;\nvar tokenizer2 = tokenize;\nvar Comment$2 = comment;\nvar AtRule$2 = atRule;\nvar Root$4 = root;\nvar Rule$2 = rule;\nvar SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition(tokens) {\n for(var i = tokens.length - 1; i >= 0; i--){\n var token = tokens[i];\n var pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nvar Parser$1 = /*#__PURE__*/ function() {\n function Parser(input2) {\n this.input = input2;\n this.root = new Root$4();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = {\n input: input2,\n start: {\n column: 1,\n line: 1,\n offset: 0\n }\n };\n }\n var _proto = Parser.prototype;\n _proto.atrule = function atrule(token) {\n var node2 = new AtRule$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n var type;\n var prev;\n var shift;\n var last = false;\n var open = false;\n var params = [];\n var brackets = [];\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while(prev && prev[0] === \"space\"){\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n };\n _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n var colon = this.colon(tokens);\n if (colon === false) return;\n var founded = 0;\n var token;\n for(var j = colon - 1; j >= 0; j--){\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\"Missed semicolon\", token[0] === \"word\" ? token[3] + 1 : token[2]);\n };\n _proto.colon = function colon(tokens) {\n var brackets = 0;\n var token, type, prev;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens.entries()), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, i = _step_value[0], element = _step_value[1];\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i;\n }\n }\n prev = token;\n }\n return false;\n };\n _proto.comment = function comment(token) {\n var node2 = new Comment$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n var text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n var match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n };\n _proto.createTokenizer = function createTokenizer() {\n this.tokenizer = tokenizer2(this.input);\n };\n _proto.decl = function decl(tokens, customProperty) {\n var node2 = new Declaration$2();\n this.init(node2, tokens[0][2]);\n var last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));\n node2.source.end.offset++;\n while(tokens[0][0] !== \"word\"){\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while(tokens.length){\n var type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n var token;\n while(tokens.length){\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([\n token\n ]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n var firstSpaces = [];\n var next;\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for(var i = tokens.length - 1; i >= 0; i--){\n token = tokens[i];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n var string = this.stringFrom(tokens, i);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n var cache = tokens.slice(0);\n var str = \"\";\n for(var j = i; j > 0; j--){\n var type1 = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type1 !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n var hasWord = tokens.some(function(i) {\n return i[0] !== \"space\" && i[0] !== \"comment\";\n });\n if (hasWord) {\n node2.raws.between += firstSpaces.map(function(i) {\n return i[1];\n }).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n };\n _proto.doubleColon = function doubleColon(token) {\n throw this.input.error(\"Double colon\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n _proto.emptyRule = function emptyRule(token) {\n var node2 = new Rule$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n };\n _proto.end = function end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n };\n _proto.endFile = function endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n };\n _proto.freeSemicolon = function freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n var prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n };\n // Helpers\n _proto.getPosition = function getPosition(offset) {\n var pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset: offset\n };\n };\n _proto.init = function init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n };\n _proto.other = function other(start) {\n var end = false;\n var type = null;\n var colon = false;\n var bracket = null;\n var brackets = [];\n var customProperty = start[1].startsWith(\"--\");\n var tokens = [];\n var token = start;\n while(token){\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while(tokens.length){\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n };\n _proto.parse = function parse() {\n var token;\n while(!this.tokenizer.endOfFile()){\n token = this.tokenizer.nextToken();\n switch(token[0]){\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n };\n _proto.precheckMissedSemicolon = function precheckMissedSemicolon() {};\n _proto.raw = function raw(node2, prop, tokens, customProperty) {\n var token, type;\n var length = tokens.length;\n var value = \"\";\n var clean = true;\n var next, prev;\n for(var i = 0; i < length; i += 1){\n token = tokens[i];\n type = token[0];\n if (type === \"space\" && i === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i - 1] ? tokens[i - 1][0] : \"empty\";\n next = tokens[i + 1] ? tokens[i + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n var raw = tokens.reduce(function(all, i) {\n return all + i[1];\n }, \"\");\n node2.raws[prop] = {\n raw: raw,\n value: value\n };\n }\n node2[prop] = value;\n };\n _proto.rule = function rule(tokens) {\n tokens.pop();\n var node2 = new Rule$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n };\n _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n // Errors\n _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n var next;\n var spaces = \"\";\n while(tokens.length){\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n };\n _proto.spacesFromEnd = function spacesFromEnd(tokens) {\n var lastTokenType;\n var spaces = \"\";\n while(tokens.length){\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n };\n _proto.stringFrom = function stringFrom(tokens, from) {\n var result2 = \"\";\n for(var i = from; i < tokens.length; i++){\n result2 += tokens[i][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n };\n _proto.unclosedBlock = function unclosedBlock() {\n var pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n };\n _proto.unclosedBracket = function unclosedBracket(bracket) {\n throw this.input.error(\"Unclosed bracket\", {\n offset: bracket[2]\n }, {\n offset: bracket[2] + 1\n });\n };\n _proto.unexpectedClose = function unexpectedClose(token) {\n throw this.input.error(\"Unexpected }\", {\n offset: token[2]\n }, {\n offset: token[2] + 1\n });\n };\n _proto.unknownWord = function unknownWord(tokens) {\n throw this.input.error(\"Unknown word\", {\n offset: tokens[0][2]\n }, {\n offset: tokens[0][2] + tokens[0][1].length\n });\n };\n _proto.unnamedAtrule = function unnamedAtrule(node2, token) {\n throw this.input.error(\"At-rule without name\", {\n offset: token[2]\n }, {\n offset: token[2] + token[1].length\n });\n };\n return Parser;\n}();\nvar parser = Parser$1;\nvar Container$2 = container;\nvar Parser2 = parser;\nvar Input$2 = input;\nfunction parse$3(css, opts) {\n var input2 = new Input$2(css, opts);\n var parser2 = new Parser2(input2);\n try {\n parser2.parse();\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e;\n }\n return parser2.root;\n}\nvar parse_1 = parse$3;\nparse$3.default = parse$3;\nContainer$2.registerParse(parse$3);\nvar isClean = symbols.isClean, my = symbols.my;\nvar MapGenerator$1 = mapGenerator;\nvar stringify$2 = stringify_1;\nvar Container$1 = container;\nvar Document$2 = document$1;\nvar warnOnce$1 = warnOnce$2;\nvar Result$2 = result;\nvar parse$2 = parse_1;\nvar Root$3 = root;\nvar TYPE_TO_CLASS_NAME = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nvar PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nvar NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nvar CHILDREN = 0;\nfunction isPromise(obj) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _type_of(obj)) === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents(node2) {\n var key = false;\n var type = TYPE_TO_CLASS_NAME[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [\n type,\n type + \"-\" + key,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (node2.append) {\n return [\n type,\n CHILDREN,\n type + \"Exit\"\n ];\n } else {\n return [\n type,\n type + \"Exit\"\n ];\n }\n}\nfunction toStack(node2) {\n var events;\n if (node2.type === \"document\") {\n events = [\n \"Document\",\n CHILDREN,\n \"DocumentExit\"\n ];\n } else if (node2.type === \"root\") {\n events = [\n \"Root\",\n CHILDREN,\n \"RootExit\"\n ];\n } else {\n events = getEvents(node2);\n }\n return {\n eventIndex: 0,\n events: events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks(node2) {\n node2[isClean] = false;\n if (node2.nodes) node2.nodes.forEach(function(i) {\n return cleanMarks(i);\n });\n return node2;\n}\nvar postcss$2 = {};\nvar LazyResult$2 = /*#__PURE__*/ function() {\n function LazyResult(processor2, css, opts) {\n var _this = this;\n this.stringified = false;\n this.processed = false;\n var root2;\n if ((typeof css === \"undefined\" ? \"undefined\" : _type_of(css)) === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks(css);\n } else if (_instanceof(css, LazyResult) || _instanceof(css, Result$2)) {\n root2 = cleanMarks(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n var parser2 = parse$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my]) {\n Container$1.rebuild(root2);\n }\n }\n this.result = new Result$2(processor2, root2, opts);\n this.helpers = _extends({}, postcss$2, {\n postcss: postcss$2,\n result: this.result\n });\n this.plugins = this.processor.plugins.map(function(plugin2) {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.prepare) {\n return _extends({}, plugin2, plugin2.prepare(_this.result));\n } else {\n return plugin2;\n }\n });\n }\n var _proto = LazyResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.getAsyncError = function getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n };\n _proto.handleError = function handleError(error, node2) {\n var plugin2 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin2.postcssPlugin;\n error.setMessage();\n } else if (plugin2.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n var pluginName = plugin2.postcssPlugin;\n var pluginVer = plugin2.postcssVersion;\n var runtimeVer = this.result.processor.version;\n var a = pluginVer.split(\".\");\n var b = runtimeVer.split(\".\");\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n console.error(\"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\");\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n };\n _proto.prepareVisitors = function prepareVisitors() {\n var _this = this;\n this.listeners = {};\n var add = function(plugin2, type, cb) {\n if (!_this.listeners[type]) _this.listeners[type] = [];\n _this.listeners[type].push([\n plugin2,\n cb\n ]);\n };\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\") {\n for(var event in plugin2){\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\"Unknown event \" + event + \" in \" + plugin2.postcssPlugin + \". Try to update PostCSS (\" + this.processor.version + \" now).\");\n }\n if (!NOT_VISITORS[event]) {\n if (_type_of(plugin2[event]) === \"object\") {\n for(var filter in plugin2[event]){\n if (filter === \"*\") {\n add(plugin2, event, plugin2[event][filter]);\n } else {\n add(plugin2, event + \"-\" + filter.toLowerCase(), plugin2[event][filter]);\n }\n }\n } else if (typeof plugin2[event] === \"function\") {\n add(plugin2, event, plugin2[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n };\n _proto.runAsync = function runAsync() {\n var _this = this;\n return _async_to_generator(function() {\n var i, plugin2, promise, error, root2, stack, promise1, e, node2, _loop, _iterator, _step;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _this.plugin = 0;\n i = 0;\n _state.label = 1;\n case 1:\n if (!(i < _this.plugins.length)) return [\n 3,\n 6\n ];\n plugin2 = _this.plugins[i];\n promise = _this.runOnRoot(plugin2);\n if (!isPromise(promise)) return [\n 3,\n 5\n ];\n _state.label = 2;\n case 2:\n _state.trys.push([\n 2,\n 4,\n ,\n 5\n ]);\n return [\n 4,\n promise\n ];\n case 3:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 4:\n error = _state.sent();\n throw _this.handleError(error);\n case 5:\n i++;\n return [\n 3,\n 1\n ];\n case 6:\n _this.prepareVisitors();\n if (!_this.hasListener) return [\n 3,\n 18\n ];\n root2 = _this.result.root;\n _state.label = 7;\n case 7:\n if (!!root2[isClean]) return [\n 3,\n 14\n ];\n root2[isClean] = true;\n stack = [\n toStack(root2)\n ];\n _state.label = 8;\n case 8:\n if (!(stack.length > 0)) return [\n 3,\n 13\n ];\n promise1 = _this.visitTick(stack);\n if (!isPromise(promise1)) return [\n 3,\n 12\n ];\n _state.label = 9;\n case 9:\n _state.trys.push([\n 9,\n 11,\n ,\n 12\n ]);\n return [\n 4,\n promise1\n ];\n case 10:\n _state.sent();\n return [\n 3,\n 12\n ];\n case 11:\n e = _state.sent();\n node2 = stack[stack.length - 1].node;\n throw _this.handleError(e, node2);\n case 12:\n return [\n 3,\n 8\n ];\n case 13:\n return [\n 3,\n 7\n ];\n case 14:\n if (!_this.listeners.OnceExit) return [\n 3,\n 18\n ];\n _loop = function() {\n var _step_value, plugin2, visitor, roots, e;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n _this.result.lastPlugin = plugin2;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n ,\n 7\n ]);\n if (!(root2.type === \"document\")) return [\n 3,\n 3\n ];\n roots = root2.nodes.map(function(subRoot) {\n return visitor(subRoot, _this.helpers);\n });\n return [\n 4,\n Promise.all(roots)\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n visitor(root2, _this.helpers)\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 3,\n 7\n ];\n case 6:\n e = _state.sent();\n throw _this.handleError(e);\n case 7:\n return [\n 2\n ];\n }\n });\n };\n _iterator = _create_for_of_iterator_helper_loose(_this.listeners.OnceExit);\n _state.label = 15;\n case 15:\n if (!!(_step = _iterator()).done) return [\n 3,\n 18\n ];\n return [\n 5,\n _ts_values(_loop())\n ];\n case 16:\n _state.sent();\n _state.label = 17;\n case 17:\n return [\n 3,\n 15\n ];\n case 18:\n _this.processed = true;\n return [\n 2,\n _this.stringify()\n ];\n }\n });\n })();\n };\n _proto.runOnRoot = function runOnRoot(plugin2) {\n var _this = this;\n this.result.lastPlugin = plugin2;\n try {\n if ((typeof plugin2 === \"undefined\" ? \"undefined\" : _type_of(plugin2)) === \"object\" && plugin2.Once) {\n if (this.result.root.type === \"document\") {\n var roots = this.result.root.nodes.map(function(root2) {\n return plugin2.Once(root2, _this.helpers);\n });\n if (isPromise(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin2.Once(this.result.root, this.helpers);\n } else if (typeof plugin2 === \"function\") {\n return plugin2(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n };\n _proto.stringify = function stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n var opts = this.result.opts;\n var str = stringify$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n var map = new MapGenerator$1(str, this.result.root, this.result.opts);\n var data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(this.plugins), _step; !(_step = _iterator()).done;){\n var plugin2 = _step.value;\n var promise = this.runOnRoot(plugin2);\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n var root2 = this.result.root;\n while(!root2[isClean]){\n root2[isClean] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for(var _iterator1 = _create_for_of_iterator_helper_loose(root2.nodes), _step1; !(_step1 = _iterator1()).done;){\n var subRoot = _step1.value;\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this.css;\n };\n _proto.visitSync = function visitSync(visitors, node2) {\n for(var _iterator = _create_for_of_iterator_helper_loose(visitors), _step; !(_step = _iterator()).done;){\n var _step_value = _step.value, plugin2 = _step_value[0], visitor = _step_value[1];\n this.result.lastPlugin = plugin2;\n var promise = void 0;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e) {\n throw this.handleError(e, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n };\n _proto.visitTick = function visitTick(stack) {\n var visit2 = stack[stack.length - 1];\n var node2 = visit2.node, visitors = visit2.visitors;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n var _visitors_visit2_visitorIndex = visitors[visit2.visitorIndex], plugin2 = _visitors_visit2_visitorIndex[0], visitor = _visitors_visit2_visitorIndex[1];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin2;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e) {\n throw this.handleError(e, node2);\n }\n }\n if (visit2.iterator !== 0) {\n var iterator = visit2.iterator;\n var child;\n while(child = node2.nodes[node2.indexes[iterator]]){\n node2.indexes[iterator] += 1;\n if (!child[isClean]) {\n child[isClean] = true;\n stack.push(toStack(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n var events = visit2.events;\n while(visit2.eventIndex < events.length){\n var event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n };\n _proto.walkSync = function walkSync(node2) {\n var _this = this;\n node2[isClean] = true;\n var events = getEvents(node2);\n for(var _iterator = _create_for_of_iterator_helper_loose(events), _step; !(_step = _iterator()).done;){\n var event = _step.value;\n if (event === CHILDREN) {\n if (node2.nodes) {\n node2.each(function(child) {\n if (!child[isClean]) _this.walkSync(child);\n });\n }\n } else {\n var visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n };\n _proto.warnings = function warnings() {\n return this.sync().warnings();\n };\n _create_class(LazyResult, [\n {\n key: \"content\",\n get: function get() {\n return this.stringify().content;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.stringify().css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.stringify().map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return this.sync().messages;\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n return this.sync().root;\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"LazyResult\";\n }\n }\n ]);\n return LazyResult;\n}();\nLazyResult$2.registerPostcss = function(dependant) {\n postcss$2 = dependant;\n};\nvar lazyResult = LazyResult$2;\nLazyResult$2.default = LazyResult$2;\nRoot$3.registerLazyResult(LazyResult$2);\nDocument$2.registerLazyResult(LazyResult$2);\nvar MapGenerator2 = mapGenerator;\nvar stringify$1 = stringify_1;\nvar warnOnce2 = warnOnce$2;\nvar parse$1 = parse_1;\nvar Result$1 = result;\nvar NoWorkResult$1 = /*#__PURE__*/ function() {\n function NoWorkResult(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n var root2;\n var str = stringify$1;\n this.result = new Result$1(this._processor, root2, this._opts);\n this.result.css = css;\n var self = this;\n Object.defineProperty(this.result, \"root\", {\n get: function get() {\n return self.root;\n }\n });\n var map = new MapGenerator2(str, root2, this._opts, css);\n if (map.isMap()) {\n var _map_generate = map.generate(), generatedCSS = _map_generate[0], generatedMap = _map_generate[1];\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n var _proto = NoWorkResult.prototype;\n _proto.async = function async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n };\n _proto.catch = function _catch(onRejected) {\n return this.async().catch(onRejected);\n };\n _proto.finally = function _finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n };\n _proto.sync = function sync() {\n if (this.error) throw this.error;\n return this.result;\n };\n _proto.then = function then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2(\"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\");\n }\n }\n return this.async().then(onFulfilled, onRejected);\n };\n _proto.toString = function toString() {\n return this._css;\n };\n _proto.warnings = function warnings() {\n return [];\n };\n _create_class(NoWorkResult, [\n {\n key: \"content\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"css\",\n get: function get() {\n return this.result.css;\n }\n },\n {\n key: \"map\",\n get: function get() {\n return this.result.map;\n }\n },\n {\n key: \"messages\",\n get: function get() {\n return [];\n }\n },\n {\n key: \"opts\",\n get: function get() {\n return this.result.opts;\n }\n },\n {\n key: \"processor\",\n get: function get() {\n return this.result.processor;\n }\n },\n {\n key: \"root\",\n get: function get() {\n if (this._root) {\n return this._root;\n }\n var root2;\n var parser2 = parse$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n },\n {\n key: Symbol.toStringTag,\n get: function get() {\n return \"NoWorkResult\";\n }\n }\n ]);\n return NoWorkResult;\n}();\nvar noWorkResult = NoWorkResult$1;\nNoWorkResult$1.default = NoWorkResult$1;\nvar NoWorkResult2 = noWorkResult;\nvar LazyResult$1 = lazyResult;\nvar Document$1 = document$1;\nvar Root$2 = root;\nvar Processor$1 = /*#__PURE__*/ function() {\n function Processor(plugins) {\n if (plugins === void 0) plugins = [];\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n var _proto = Processor.prototype;\n _proto.normalize = function normalize(plugins) {\n var normalized = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(plugins), _step; !(_step = _iterator()).done;){\n var i = _step.value;\n if (i.postcss === true) {\n i = i();\n } else if (i.postcss) {\n i = i.postcss;\n }\n if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && i.postcssPlugin) {\n normalized.push(i);\n } else if (typeof i === \"function\") {\n normalized.push(i);\n } else if ((typeof i === \"undefined\" ? \"undefined\" : _type_of(i)) === \"object\" && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\");\n }\n } else {\n throw new Error(i + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n };\n _proto.process = function process1(css, opts) {\n if (opts === void 0) opts = {};\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2(this, css, opts);\n } else {\n return new LazyResult$1(this, css, opts);\n }\n };\n _proto.use = function use(plugin2) {\n this.plugins = this.plugins.concat(this.normalize([\n plugin2\n ]));\n return this;\n };\n return Processor;\n}();\nvar processor = Processor$1;\nProcessor$1.default = Processor$1;\nRoot$2.registerProcessor(Processor$1);\nDocument$1.registerProcessor(Processor$1);\nvar Declaration$1 = declaration;\nvar PreviousMap2 = previousMap;\nvar Comment$1 = comment;\nvar AtRule$1 = atRule;\nvar Input$1 = input;\nvar Root$1 = root;\nvar Rule$1 = rule;\nfunction fromJSON$1(json, inputs) {\n if (Array.isArray(json)) return json.map(function(n) {\n return fromJSON$1(n);\n });\n var ownInputs = json.inputs, defaults = _object_without_properties_loose(json, [\n \"inputs\"\n ]);\n if (ownInputs) {\n inputs = [];\n for(var _iterator = _create_for_of_iterator_helper_loose(ownInputs), _step; !(_step = _iterator()).done;){\n var input2 = _step.value;\n var inputHydrated = _extends({}, input2, {\n __proto__: Input$1.prototype\n });\n if (inputHydrated.map) {\n inputHydrated.map = _extends({}, inputHydrated.map, {\n __proto__: PreviousMap2.prototype\n });\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(function(n) {\n return fromJSON$1(n, inputs);\n });\n }\n if (defaults.source) {\n var _defaults_source = defaults.source, inputId = _defaults_source.inputId, source = _object_without_properties_loose(_defaults_source, [\n \"inputId\"\n ]);\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1 = fromJSON$1;\nfromJSON$1.default = fromJSON$1;\nvar CssSyntaxError2 = cssSyntaxError;\nvar Declaration2 = declaration;\nvar LazyResult2 = lazyResult;\nvar Container2 = container;\nvar Processor2 = processor;\nvar stringify$5 = stringify_1;\nvar fromJSON = fromJSON_1;\nvar Document2 = document$1;\nvar Warning2 = warning;\nvar Comment2 = comment;\nvar AtRule2 = atRule;\nvar Result2 = result;\nvar Input2 = input;\nvar parse = parse_1;\nvar list = list_1;\nvar Rule2 = rule;\nvar Root2 = root;\nvar Node2 = node;\nfunction postcss() {\n for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){\n plugins[_key] = arguments[_key];\n }\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2(plugins);\n}\npostcss.plugin = function plugin(name, initializer) {\n var warningPrinted = false;\n function creator() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\");\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\");\n }\n }\n var transformer = initializer.apply(void 0, [].concat(args));\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2().version;\n return transformer;\n }\n var cache;\n Object.defineProperty(creator, \"postcss\", {\n get: function get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss([\n creator(pluginOpts)\n ]).process(css, processOpts);\n };\n return creator;\n};\npostcss.stringify = stringify$5;\npostcss.parse = parse;\npostcss.fromJSON = fromJSON;\npostcss.list = list;\npostcss.comment = function(defaults) {\n return new Comment2(defaults);\n};\npostcss.atRule = function(defaults) {\n return new AtRule2(defaults);\n};\npostcss.decl = function(defaults) {\n return new Declaration2(defaults);\n};\npostcss.rule = function(defaults) {\n return new Rule2(defaults);\n};\npostcss.root = function(defaults) {\n return new Root2(defaults);\n};\npostcss.document = function(defaults) {\n return new Document2(defaults);\n};\npostcss.CssSyntaxError = CssSyntaxError2;\npostcss.Declaration = Declaration2;\npostcss.Container = Container2;\npostcss.Processor = Processor2;\npostcss.Document = Document2;\npostcss.Comment = Comment2;\npostcss.Warning = Warning2;\npostcss.AtRule = AtRule2;\npostcss.Result = Result2;\npostcss.Input = Input2;\npostcss.Rule = Rule2;\npostcss.Root = Root2;\npostcss.Node = Node2;\nLazyResult2.registerPostcss(postcss);\nvar postcss_1 = postcss;\npostcss.default = postcss;\nvar postcss$1 = /* @__PURE__ */ getDefaultExportFromCjs(postcss_1);\npostcss$1.stringify;\npostcss$1.fromJSON;\npostcss$1.plugin;\npostcss$1.parse;\npostcss$1.list;\npostcss$1.document;\npostcss$1.comment;\npostcss$1.atRule;\npostcss$1.rule;\npostcss$1.decl;\npostcss$1.root;\npostcss$1.CssSyntaxError;\npostcss$1.Declaration;\npostcss$1.Container;\npostcss$1.Processor;\npostcss$1.Document;\npostcss$1.Comment;\npostcss$1.Warning;\npostcss$1.AtRule;\npostcss$1.Result;\npostcss$1.Input;\npostcss$1.Rule;\npostcss$1.Root;\npostcss$1.Node;\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = function(obj, key, value) {\n return key in obj ? __defProp(obj, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n }) : obj[key] = value;\n};\nvar __publicField = function(obj, key, value) {\n return __defNormalProp(obj, (typeof key === \"undefined\" ? \"undefined\" : _type_of(key)) !== \"symbol\" ? key + \"\" : key, value);\n};\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n } catch (e) {\n return function() {};\n }\n}\nvar StackFrame = /*#__PURE__*/ function() {\n function StackFrame(obj) {\n __publicField(this, \"fileName\");\n __publicField(this, \"functionName\");\n __publicField(this, \"lineNumber\");\n __publicField(this, \"columnNumber\");\n this.fileName = obj.fileName || \"\";\n this.functionName = obj.functionName || \"\";\n this.lineNumber = obj.lineNumber;\n this.columnNumber = obj.columnNumber;\n }\n var _proto = StackFrame.prototype;\n _proto.toString = function toString() {\n var lineNumber = this.lineNumber || \"\";\n var columnNumber = this.columnNumber || \"\";\n if (this.functionName) return this.functionName + \" (\" + this.fileName + \":\" + lineNumber + \":\" + columnNumber + \")\";\n return this.fileName + \":\" + lineNumber + \":\" + columnNumber;\n };\n return StackFrame;\n}();\nvar FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\nvar CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nvar SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nvar ErrorStackParser = {\n /**\n * Given an Error object, extract the most information from it.\n */ parse: function parse(error) {\n if (!error) {\n return [];\n }\n if (// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error.stacktrace !== \"undefined\" || // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error[\"opera#sourceloc\"] !== \"undefined\") {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n console.warn(\"[console-record-plugin]: Failed to parse error object:\", error);\n return [];\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function extractLocation(urlLike) {\n if (urlLike.indexOf(\":\") === -1) {\n return [\n urlLike\n ];\n }\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, \"\"));\n if (!parts) throw new Error(\"Cannot parse given url: \" + urlLike);\n return [\n parts[1],\n parts[2] || void 0,\n parts[3] || void 0\n ];\n },\n parseV8OrIE: function parseV8OrIE(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\"(eval \") > -1) {\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g, \"\");\n }\n var sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\");\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(\" \") || void 0;\n var fileName = [\n \"eval\",\n \"\"\n ].indexOf(locationParts[0]) > -1 ? void 0 : locationParts[0];\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n },\n parseFFOrSafari: function parseFFOrSafari(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\" > eval\") > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, \":$1\");\n }\n if (line.indexOf(\"@\") === -1 && line.indexOf(\":\") === -1) {\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : void 0;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, \"\"));\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }\n }, this);\n },\n parseOpera: function parseOpera(e) {\n if (!e.stacktrace || e.message.indexOf(\"\\n\") > -1 && e.message.split(\"\\n\").length > e.stacktrace.split(\"\\n\").length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split(\"\\n\");\n var result = [];\n for(var i = 2, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n parseOpera10: function parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split(\"\\n\");\n var result = [];\n for(var i = 0, len = lines.length; i < len; i += 2){\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n functionName: match[3] || void 0,\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n }));\n }\n }\n return result;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function parseOpera11(error) {\n var filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function(line) {\n var tokens = line.split(\"@\");\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = tokens.shift() || \"\";\n var functionName = functionCall.replace(//, \"$2\").replace(/\\([^)]*\\)/g, \"\") || void 0;\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n }\n};\nfunction pathToSelector(node) {\n if (!node || !node.outerHTML) {\n return \"\";\n }\n var path = \"\";\n while(node.parentElement){\n var name = node.localName;\n if (!name) {\n break;\n }\n name = name.toLowerCase();\n var parent = node.parentElement;\n var domSiblings = [];\n if (parent.children && parent.children.length > 0) {\n for(var i = 0; i < parent.children.length; i++){\n var sibling = parent.children[i];\n if (sibling.localName && sibling.localName.toLowerCase) {\n if (sibling.localName.toLowerCase() === name) {\n domSiblings.push(sibling);\n }\n }\n }\n }\n if (domSiblings.length > 1) {\n name += \":eq(\" + domSiblings.indexOf(node) + \")\";\n }\n path = name + (path ? \">\" + path : \"\");\n node = parent;\n }\n return path;\n}\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isObjTooDeep(obj, limit) {\n if (limit === 0) {\n return true;\n }\n var keys = Object.keys(obj);\n for(var _iterator = _create_for_of_iterator_helper_loose(keys), _step; !(_step = _iterator()).done;){\n var key = _step.value;\n if (isObject(obj[key]) && isObjTooDeep(obj[key], limit - 1)) {\n return true;\n }\n }\n return false;\n}\nfunction stringify(obj, stringifyOptions) {\n var options = {\n numOfKeysLimit: 50,\n depthOfLimit: 4\n };\n Object.assign(options, stringifyOptions);\n var stack = [];\n var keys = [];\n return JSON.stringify(obj, function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) {\n if (stack[0] === value) {\n value = \"[Circular ~]\";\n } else {\n value = \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n }\n }\n } else {\n stack.push(value);\n }\n if (value === null) return value;\n if (value === void 0) return \"undefined\";\n if (shouldIgnore(value)) {\n return toString(value);\n }\n if ((typeof value === \"undefined\" ? \"undefined\" : _type_of(value)) === \"bigint\") {\n return value.toString() + \"n\";\n }\n if (_instanceof(value, Event)) {\n var eventResult = {};\n for(var eventKey in value){\n var eventValue = value[eventKey];\n if (Array.isArray(eventValue)) {\n eventResult[eventKey] = pathToSelector(eventValue.length ? eventValue[0] : null);\n } else {\n eventResult[eventKey] = eventValue;\n }\n }\n return eventResult;\n } else if (_instanceof(value, Node)) {\n if (_instanceof(value, HTMLElement)) {\n return value ? value.outerHTML : \"\";\n }\n return value.nodeName;\n } else if (_instanceof(value, Error)) {\n return value.stack ? value.stack + \"\\nEnd of stack for Error object\" : value.name + \": \" + value.message;\n }\n return value;\n });\n function shouldIgnore(_obj) {\n if (isObject(_obj) && Object.keys(_obj).length > options.numOfKeysLimit) {\n return true;\n }\n if (typeof _obj === \"function\") {\n return true;\n }\n if (isObject(_obj) && isObjTooDeep(_obj, options.depthOfLimit)) {\n return true;\n }\n return false;\n }\n function toString(_obj) {\n var str = _obj.toString();\n if (options.stringLengthLimit && str.length > options.stringLengthLimit) {\n str = \"\" + str.slice(0, options.stringLengthLimit) + \"...\";\n }\n return str;\n }\n}\nvar defaultLogOptions = {\n level: [\n \"assert\",\n \"clear\",\n \"count\",\n \"countReset\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"info\",\n \"log\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"trace\",\n \"warn\"\n ],\n lengthThreshold: 1e3,\n logger: \"console\"\n};\nfunction initLogObserver(cb, win, options) {\n var logOptions = options ? Object.assign({}, defaultLogOptions, options) : defaultLogOptions;\n var loggerType = logOptions.logger;\n if (!loggerType) {\n return function() {};\n }\n var logger;\n if (typeof loggerType === \"string\") {\n logger = win[loggerType];\n } else {\n logger = loggerType;\n }\n var logCount = 0;\n var inStack = false;\n var cancelHandlers = [];\n if (logOptions.level.includes(\"error\")) {\n var errorHandler = function(event) {\n var message = event.message, error = event.error;\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n var payload = [\n stringify(message, logOptions.stringifyOptions)\n ];\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"error\", errorHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"error\", errorHandler);\n });\n var unhandledrejectionHandler = function(event) {\n var error;\n var payload;\n if (_instanceof(event.reason, Error)) {\n error = event.reason;\n payload = [\n stringify(\"Uncaught (in promise) \" + error.name + \": \" + error.message, logOptions.stringifyOptions)\n ];\n } else {\n error = new Error();\n payload = [\n stringify(\"Uncaught (in promise)\", logOptions.stringifyOptions),\n stringify(event.reason, logOptions.stringifyOptions)\n ];\n }\n var trace = ErrorStackParser.parse(error).map(function(stackFrame) {\n return stackFrame.toString();\n });\n cb({\n level: \"error\",\n trace: trace,\n payload: payload\n });\n };\n win.addEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n cancelHandlers.push(function() {\n win.removeEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n });\n }\n for(var _iterator = _create_for_of_iterator_helper_loose(logOptions.level), _step; !(_step = _iterator()).done;){\n var levelType = _step.value;\n cancelHandlers.push(replace(logger, levelType));\n }\n return function() {\n cancelHandlers.forEach(function(h) {\n return h();\n });\n };\n function replace(_logger, level) {\n var _this = this;\n if (!_logger[level]) {\n return function() {};\n }\n return patch(_logger, level, function(original) {\n var _this1 = _this;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n original.apply(_this1, args);\n if (level === \"assert\" && !!args[0]) {\n return;\n }\n if (inStack) {\n return;\n }\n inStack = true;\n try {\n var trace = ErrorStackParser.parse(new Error()).map(function(stackFrame) {\n return stackFrame.toString();\n }).splice(1);\n var argsForPayload = level === \"assert\" ? args.slice(1) : args;\n var payload = argsForPayload.map(function(s) {\n return stringify(s, logOptions.stringifyOptions);\n });\n logCount++;\n if (logCount < logOptions.lengthThreshold) {\n cb({\n level: level,\n trace: trace,\n payload: payload\n });\n } else if (logCount === logOptions.lengthThreshold) {\n cb({\n level: \"warn\",\n trace: [],\n payload: [\n stringify(\"The number of log records reached the threshold.\")\n ]\n });\n }\n } catch (error) {\n original.apply(void 0, [].concat([\n \"rrweb logger error:\",\n error\n ], args));\n } finally{\n inStack = false;\n }\n };\n });\n }\n}\nvar PLUGIN_NAME = \"rrweb/console@1\";\nvar getRecordConsolePlugin = function(options) {\n return {\n name: PLUGIN_NAME,\n observer: initLogObserver,\n options: options\n };\n};\n\nexport { EventType, IncrementalSource, classMatchesRegex, getRecordConsolePlugin, record };\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","import { Promise } from '../promise-polyfill';\nimport { window } from '../window';\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar IDBStorageWrapper = function (dbName, storeName, versionData, options) {\n this.dbName = dbName;\n this.storeName = storeName;\n this.version = versionData.version;\n this.storeNamesInDb = versionData.storeNames;\n // false to only open a database the device already has, for cleanup that mustn't create one\n this.createIfMissing = !options || options.createIfMissing !== false;\n /**\n * @type {Promise|null}\n */\n this.dbPromise = null;\n};\n\nIDBStorageWrapper.prototype._openDb = function () {\n var dbName = this.dbName;\n var version = this.version;\n var storeNamesInDb = this.storeNamesInDb;\n var createIfMissing = this.createIfMissing;\n var open = function () {\n return new Promise(function (resolve, reject) {\n var openRequest = window.indexedDB.open(dbName, version);\n openRequest['onerror'] = function () {\n reject(openRequest.error);\n };\n\n openRequest['onsuccess'] = function () {\n resolve(openRequest.result);\n };\n\n openRequest['onupgradeneeded'] = function (ev) {\n if (!createIfMissing && ev['oldVersion'] === 0) {\n // aborting fails the open; the new database stays at version 0, which\n // databases() doesn't list\n openRequest['transaction']['abort']();\n return;\n }\n var db = ev.target.result;\n\n storeNamesInDb.forEach(function (storeName) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n });\n };\n });\n };\n\n // where the browser lists its databases, a missing one isn't even opened\n if (createIfMissing || !window.indexedDB['databases']) {\n return open();\n }\n return window.indexedDB['databases']().then(function (databases) {\n for (var i = 0; i < databases.length; i++) {\n if (databases[i]['name'] === dbName) {\n return open();\n }\n }\n return Promise.reject(dbName + ' does not exist');\n });\n};\n\nIDBStorageWrapper.prototype.init = function () {\n if (!window.indexedDB) {\n return Promise.reject('indexedDB is not supported in this browser');\n }\n\n if (!this.dbPromise) {\n this.dbPromise = this._openDb();\n }\n\n return this.dbPromise\n .then(function (dbOrError) {\n if (dbOrError instanceof window['IDBDatabase']) {\n return Promise.resolve();\n } else {\n return Promise.reject(dbOrError);\n }\n });\n};\n\nIDBStorageWrapper.prototype.isInitialized = function () {\n return !!this.dbPromise;\n};\n\n/**\n * @param {IDBTransactionMode} mode\n * @param {function(IDBObjectStore): void} storeCb\n */\nIDBStorageWrapper.prototype.makeTransaction = function (mode, storeCb) {\n var storeName = this.storeName;\n var doTransaction = function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction(storeName, mode);\n transaction.oncomplete = function () {\n resolve(transaction);\n };\n transaction.onabort = transaction.onerror = function () {\n reject(transaction.error);\n };\n\n storeCb(transaction.objectStore(storeName));\n });\n };\n\n return this.dbPromise\n .then(doTransaction)\n .catch(function (err) {\n if (err && err['name'] === 'InvalidStateError') {\n // try reopening the DB if the connection is closed\n this.dbPromise = this._openDb();\n return this.dbPromise.then(doTransaction);\n } else {\n return Promise.reject(err);\n }\n }.bind(this));\n};\n\nIDBStorageWrapper.prototype.setItem = function (key, value) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.put(value, key);\n });\n};\n\nIDBStorageWrapper.prototype.getItem = function (key) {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.get(key);\n }).then(function () {\n return req.result;\n });\n};\n\nIDBStorageWrapper.prototype.removeItem = function (key) {\n return this.makeTransaction('readwrite', function (objectStore) {\n objectStore.delete(key);\n });\n};\n\nIDBStorageWrapper.prototype.getAll = function () {\n var req;\n return this.makeTransaction('readonly', function (objectStore) {\n req = objectStore.getAll();\n }).then(function () {\n return req.result;\n });\n};\n\nexport {\n IDBStorageWrapper\n};\n","var MIXPANEL_BROWSER_DB_NAME = 'mixpanelBrowserDb';\nvar RECORDING_EVENTS_STORE_NAME = 'mixpanelRecordingEvents';\nvar RECORDING_REGISTRY_STORE_NAME = 'mixpanelRecordingRegistry';\n\n// Keeping these two properties closeby, as adding additional stores to a DB in IndexedDB requires a version increment\nvar RECORDER_VERSION_DATA = {\n version: 1,\n storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME]\n};\n\nexport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n};\n","import { Promise } from './promise-polyfill';\nimport { console_with_prefix, localStorageSupported, getLocalStorage, _ } from './utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n * console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function(key, options) {\n options = options || {};\n\n this.storageKey = key;\n this.storage = options.storage || getLocalStorage();\n this.pollIntervalMS = options.pollIntervalMS || 100;\n this.timeoutMS = options.timeoutMS || 2000;\n\n // dependency-inject promise implementation for testing purposes\n this.promiseImpl = options.promiseImpl || Promise;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function(lockedCB, pid) {\n var Promise = this.promiseImpl;\n return new Promise(_.bind(function (resolve, reject) {\n var i = pid || (new Date().getTime() + '|' + Math.random());\n var startTime = new Date().getTime();\n var key = this.storageKey;\n var pollIntervalMS = this.pollIntervalMS;\n var timeoutMS = this.timeoutMS;\n var storage = this.storage;\n\n var keyX = key + ':X';\n var keyY = key + ':Y';\n var keyZ = key + ':Z';\n\n var delay = function(cb) {\n if (new Date().getTime() - startTime > timeoutMS) {\n logger.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n storage.removeItem(keyZ);\n storage.removeItem(keyY);\n loop();\n return;\n }\n setTimeout(function() {\n try {\n cb();\n } catch(err) {\n reject(err);\n }\n }, pollIntervalMS * (Math.random() + 0.1));\n };\n\n var waitFor = function(predicate, cb) {\n if (predicate()) {\n cb();\n } else {\n delay(function() {\n waitFor(predicate, cb);\n });\n }\n };\n\n var getSetY = function() {\n var valY = storage.getItem(keyY);\n if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases)\n return false;\n } else {\n storage.setItem(keyY, i);\n if (storage.getItem(keyY) === i) {\n return true;\n } else {\n if (!localStorageSupported(storage, true)) {\n reject(new Error('localStorage support dropped while acquiring lock'));\n }\n return false;\n }\n }\n };\n\n var loop = function() {\n storage.setItem(keyX, i);\n\n waitFor(getSetY, function() {\n if (storage.getItem(keyX) === i) {\n criticalSection();\n return;\n }\n\n delay(function() {\n if (storage.getItem(keyY) !== i) {\n loop();\n return;\n }\n waitFor(function() {\n return !storage.getItem(keyZ);\n }, criticalSection);\n });\n });\n };\n\n var criticalSection = function() {\n storage.setItem(keyZ, '1');\n var removeLock = function () {\n storage.removeItem(keyZ);\n if (storage.getItem(keyY) === i) {\n storage.removeItem(keyY);\n }\n if (storage.getItem(keyX) === i) {\n storage.removeItem(keyX);\n }\n };\n\n lockedCB()\n .then(function (ret) {\n removeLock();\n resolve(ret);\n })\n .catch(function (err) {\n removeLock();\n reject(err);\n });\n };\n\n try {\n if (localStorageSupported(storage, true)) {\n loop();\n } else {\n throw new Error('localStorage support check failed');\n }\n } catch(err) {\n reject(err);\n }\n }, this));\n};\n\nexport { SharedLock };\n","import { Promise } from '../promise-polyfill';\nimport { _, JSONParse, JSONStringify, getLocalStorage } from '../utils'; // eslint-disable-line camelcase\n\n/**\n * @type {import('./wrapper').StorageWrapper}\n */\nvar LocalStorageWrapper = function (storageOverride) {\n this.storage = storageOverride || getLocalStorage();\n};\n\nLocalStorageWrapper.prototype.init = function () {\n if (!this.storage) {\n return Promise.reject(new Error('localStorage is not available'));\n }\n return Promise.resolve();\n};\n\nLocalStorageWrapper.prototype.isInitialized = function () {\n return true;\n};\n\nLocalStorageWrapper.prototype.setItem = function (key, value) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.setItem(key, JSONStringify(value));\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nLocalStorageWrapper.prototype.getItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n var item;\n try {\n item = JSONParse(this.storage.getItem(key));\n } catch (e) {\n reject(e);\n }\n resolve(item);\n }, this));\n};\n\nLocalStorageWrapper.prototype.removeItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.removeItem(key);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nexport { LocalStorageWrapper };\n","import { SharedLock } from './shared-lock';\nimport { batchedThrottle, cheap_guid, console_with_prefix, localStorageSupported, _ } from './utils'; // eslint-disable-line camelcase\nimport { LocalStorageWrapper } from './storage/local-storage';\nimport { Promise } from './promise-polyfill';\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function (storageKey, options) {\n options = options || {};\n this.storageKey = storageKey;\n this.usePersistence = options.usePersistence;\n if (this.usePersistence) {\n this.queueStorage = options.queueStorage || new LocalStorageWrapper();\n this.lock = new SharedLock(storageKey, {\n storage: options.sharedLockStorage,\n timeoutMS: options.sharedLockTimeoutMS,\n });\n }\n this.reportError = options.errorReporter || _.bind(logger.error, logger);\n this.consentGate = options.consentGate;\n\n this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n this.memQueue = [];\n this.initialized = false;\n\n if (options.enqueueThrottleMs) {\n this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs);\n } else {\n this.enqueuePersisted = _.bind(function (queueEntry) {\n return this._enqueuePersisted([queueEntry]);\n }, this);\n }\n};\n\nRequestQueue.prototype.ensureInit = function () {\n if (this.initialized || !this.usePersistence) {\n return Promise.resolve();\n }\n\n return this.queueStorage\n .init()\n .then(_.bind(function () {\n this.initialized = true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error initializing queue persistence. Disabling persistence', err);\n this.initialized = true;\n this.usePersistence = false;\n }, this));\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function (item, flushInterval) {\n var queueEntry = {\n 'id': cheap_guid(),\n 'flushAfter': new Date().getTime() + flushInterval * 2,\n 'payload': item\n };\n\n if (!this._persists()) {\n this.memQueue.push(queueEntry);\n return Promise.resolve(true);\n } else {\n return this.enqueuePersisted(queueEntry);\n }\n};\n\n/**\n * Whether the queue is kept in storage now: with persistence, and while consent allows storing.\n * The lock writes storage keys too, so nothing that takes it runs without this.\n * @returns {boolean}\n */\nRequestQueue.prototype._persists = function () {\n return this.usePersistence && this.consentGate.allowsStoring();\n};\n\nRequestQueue.prototype._enqueuePersisted = function (queueEntries) {\n // a throttled enqueue can run after consent stops storage; its items are dropped\n if (!this._persists()) {\n return Promise.resolve(false);\n }\n var enqueueItem = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n return this.saveToStorage(storedQueue.concat(queueEntries));\n }, this))\n .then(_.bind(function (succeeded) {\n // only add to in-memory queue when storage succeeds\n if (succeeded) {\n this.memQueue = this.memQueue.concat(queueEntries);\n }\n\n return succeeded;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error enqueueing items', err, queueEntries);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(enqueueItem, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function (batchSize) {\n var batch = this.memQueue.slice(0, batchSize);\n if (this.usePersistence && batch.length < batchSize) {\n // don't need lock just to read events; localStorage is thread-safe\n // and the worst that could happen is a duplicate send of some\n // orphaned events, which will be deduplicated on the server side\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n if (storedQueue.length) {\n // item IDs already in batch; don't duplicate out of storage\n var idsInBatch = {}; // poor man's Set\n _.each(batch, function (item) {\n idsInBatch[item['id']] = true;\n });\n\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n item.orphaned = true;\n batch.push(item);\n if (batch.length >= batchSize) {\n break;\n }\n }\n }\n }\n\n return batch;\n }, this));\n } else {\n return Promise.resolve(batch);\n }\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function (items, idSet) {\n var filteredItems = [];\n _.each(items, function (item) {\n if (item['id'] && !idSet[item['id']]) {\n filteredItems.push(item);\n }\n });\n return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function (ids) {\n var idSet = {}; // poor man's Set\n _.each(ids, function (id) {\n idSet[id] = true;\n });\n\n this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n if (!this._persists()) {\n return Promise.resolve(true);\n } else {\n var removeFromStorage = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n // an extra check: did storage report success but somehow\n // the items are still there?\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (item['id'] && !!idSet[item['id']]) {\n throw new Error('Item not removed from storage');\n }\n }\n return true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error removing items', err, ids);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(removeFromStorage, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n if (!localStorageSupported(this.lock.storage, true)) {\n // Looks like localStorage writes have stopped working sometime after\n // initialization (probably full), and so nobody can acquire locks\n // anymore. Consider it temporarily safe to remove items without the\n // lock, since nobody's writing successfully anyway.\n return removeFromStorage()\n .then(_.bind(function (success) {\n if (!success) {\n // OK, we couldn't even write out the smaller queue. Try clearing it\n // entirely.\n return this.queueStorage.removeItem(this.storageKey).then(function () {\n return success;\n });\n }\n return success;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n return false;\n }, this));\n } else {\n return false;\n }\n }, this));\n }\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function (existingItems, itemsToUpdate) {\n var newItems = [];\n _.each(existingItems, function (item) {\n var id = item['id'];\n if (id in itemsToUpdate) {\n var newPayload = itemsToUpdate[id];\n if (newPayload !== null) {\n item['payload'] = newPayload;\n newItems.push(item);\n }\n } else {\n // no update\n newItems.push(item);\n }\n });\n return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function (itemsToUpdate) {\n this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n if (!this._persists()) {\n return Promise.resolve(true);\n } else {\n return this.lock\n .withLock(_.bind(function lockAcquired() {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n return this.saveToStorage(storedQueue);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error updating items', itemsToUpdate, err);\n return false;\n }, this));\n }, this), this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.getItem(this.storageKey);\n }, this))\n .then(_.bind(function (storageEntry) {\n if (storageEntry) {\n if (!_.isArray(storageEntry)) {\n this.reportError('Invalid storage entry:', storageEntry);\n storageEntry = null;\n }\n }\n return storageEntry || [];\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error retrieving queue', err);\n return [];\n }, this));\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function (queue) {\n return this.ensureInit()\n .then(_.bind(function () {\n // a save that started before consent stopped storage writes nothing\n if (!this._persists()) {\n return false;\n }\n return this.queueStorage.setItem(this.storageKey, queue).then(function () {\n return true;\n });\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error saving queue', err);\n return false;\n }, this));\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function () {\n this.memQueue = [];\n\n if (this.usePersistence) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.removeItem(this.storageKey);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n }, this));\n } else {\n return Promise.resolve();\n }\n};\n\nexport { RequestQueue };\n","import { Config } from './config';\nimport { Promise } from './promise-polyfill';\nimport { RequestQueue } from './request-queue';\nimport { console_with_prefix, isOnline, _ } from './utils'; // eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function(storageKey, options) {\n this.errorReporter = options.errorReporter;\n this.queue = new RequestQueue(storageKey, {\n errorReporter: _.bind(this.reportError, this),\n queueStorage: options.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n sharedLockTimeoutMS: options.sharedLockTimeoutMS,\n usePersistence: options.usePersistence,\n enqueueThrottleMs: options.enqueueThrottleMs,\n consentGate: options.consentGate\n });\n\n this.libConfig = options.libConfig;\n this.sendRequest = options.sendRequestFunc;\n this.beforeSendHook = options.beforeSendHook;\n this.stopAllBatching = options.stopAllBatchingFunc;\n\n // seed variable batch size + flush interval with configured values\n this.batchSize = this.libConfig['batch_size'];\n this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n\n this.stopped = !this.libConfig['batch_autostart'];\n this.consecutiveRemovalFailures = 0;\n\n // extra client-side dedupe\n this.itemIdsSentSuccessfully = {};\n\n // Make the flush occur at the interval specified by flushIntervalMs, default behavior will attempt consecutive flushes\n // as long as the queue is not empty. This is useful for high-frequency events like Session Replay where we might end up\n // in a request loop and get ratelimited by the server.\n this.flushOnlyOnInterval = options.flushOnlyOnInterval || false;\n\n this._flushPromise = null;\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function(item) {\n return this.queue.enqueue(item, this.flushInterval);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function() {\n this.stopped = false;\n this.consecutiveRemovalFailures = 0;\n return this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function() {\n this.stopped = true;\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n this.timeoutID = null;\n }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function() {\n return this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function() {\n this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function() {\n this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function(flushMS) {\n this.flushInterval = flushMS;\n if (!this.stopped) { // don't schedule anymore if batching has been stopped\n this.timeoutID = setTimeout(_.bind(function() {\n if (!this.stopped) {\n this._flushPromise = this.flush();\n }\n }, this), this.flushInterval);\n }\n};\n\n/**\n * Send a request using the sendRequest callback, but promisified.\n * TODO: sendRequest should be promisified in the first place.\n */\nRequestBatcher.prototype.sendRequestPromise = function(data, options) {\n return new Promise(_.bind(function(resolve) {\n this.sendRequest(data, options, resolve);\n }, this));\n};\n\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function(options) {\n if (this.requestInProgress) {\n logger.log('Flush: Request already in progress');\n return Promise.resolve();\n }\n\n this.requestInProgress = true;\n\n options = options || {};\n var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n var startTime = new Date().getTime();\n var currentBatchSize = this.batchSize;\n\n return this.queue.fillBatch(currentBatchSize)\n .then(_.bind(function(batch) {\n\n // if there's more items in the queue than the batch size, attempt\n // to flush again after the current batch is done.\n var attemptSecondaryFlush = batch.length === currentBatchSize;\n var dataForRequest = [];\n var transformedItems = {};\n _.each(batch, function(item) {\n var payload = item['payload'];\n if (this.beforeSendHook && !item.orphaned) {\n payload = this.beforeSendHook(payload);\n }\n if (payload) {\n // mp_sent_by_lib_version prop captures which lib version actually\n // sends each event (regardless of which version originally queued\n // it for sending)\n if (payload['event'] && payload['properties']) {\n payload['properties'] = _.extend(\n {},\n payload['properties'],\n {'mp_sent_by_lib_version': Config.LIB_VERSION}\n );\n }\n var addPayload = true;\n var itemId = item['id'];\n if (itemId) {\n if ((this.itemIdsSentSuccessfully[itemId] || 0) > 5) {\n this.reportError('[dupe] item ID sent too many times, not sending', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n addPayload = false;\n }\n } else {\n this.reportError('[dupe] found item with no ID', {item: item});\n }\n\n if (addPayload) {\n dataForRequest.push(payload);\n }\n }\n transformedItems[item['id']] = payload;\n }, this);\n\n if (dataForRequest.length < 1) {\n this.requestInProgress = false;\n this.resetFlush();\n return Promise.resolve(); // nothing to do\n }\n\n var removeItemsFromQueue = _.bind(function () {\n return this.queue\n .removeItemsByID(\n _.map(batch, function (item) {\n return item['id'];\n })\n )\n .then(_.bind(function (succeeded) {\n // client-side dedupe\n _.each(batch, _.bind(function(item) {\n var itemId = item['id'];\n if (itemId) {\n this.itemIdsSentSuccessfully[itemId] = this.itemIdsSentSuccessfully[itemId] || 0;\n this.itemIdsSentSuccessfully[itemId]++;\n if (this.itemIdsSentSuccessfully[itemId] > 5) {\n this.reportError('[dupe] item ID sent too many times', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n }\n } else {\n this.reportError('[dupe] found item with no ID while removing', {item: item});\n }\n }, this));\n\n if (succeeded) {\n this.consecutiveRemovalFailures = 0;\n if (this.flushOnlyOnInterval && !attemptSecondaryFlush) {\n this.resetFlush(); // schedule next batch with a delay\n return Promise.resolve();\n } else {\n return this.flush(); // handle next batch if the queue isn't empty\n }\n } else {\n if (++this.consecutiveRemovalFailures > 5) {\n this.reportError('Too many queue failures; disabling batching system.');\n this.stopAllBatching();\n } else {\n this.resetFlush();\n }\n return Promise.resolve();\n }\n }, this));\n }, this);\n\n var batchSendCallback = _.bind(function(res) {\n this.requestInProgress = false;\n\n try {\n\n // handle API response in a try-catch to make sure we can reset the\n // flush operation if something goes wrong\n\n if (options.unloading) {\n // update persisted data to include hook transformations\n return this.queue.updatePayloads(transformedItems);\n } else if (\n _.isObject(res) &&\n res.error === 'timeout' &&\n new Date().getTime() - startTime >= timeoutMS\n ) {\n this.reportError('Network timeout; retrying');\n return this.flush();\n } else if (\n _.isObject(res) &&\n (\n res.httpStatusCode >= 500\n || res.httpStatusCode === 429\n || (res.httpStatusCode <= 0 && !isOnline())\n || res.error === 'timeout'\n )\n ) {\n // network or API error, or 429 Too Many Requests, retry\n var retryMS = this.flushInterval * 2;\n if (res.retryAfter) {\n retryMS = (parseInt(res.retryAfter, 10) * 1000) || retryMS;\n }\n retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n this.reportError('Error; retry in ' + retryMS + ' ms');\n this.scheduleFlush(retryMS);\n return Promise.resolve();\n } else if (_.isObject(res) && res.httpStatusCode === 413) {\n // 413 Payload Too Large\n if (batch.length > 1) {\n var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n this.reportError('413 response; reducing batch size to ' + this.batchSize);\n this.resetFlush();\n return Promise.resolve();\n } else {\n this.reportError('Single-event request too large; dropping', batch);\n this.resetBatchSize();\n return removeItemsFromQueue();\n }\n } else {\n // successful network request+response; remove each item in batch from queue\n // (even if it was e.g. a 400, in which case retrying won't help)\n return removeItemsFromQueue();\n }\n } catch(err) {\n this.reportError('Error handling API response', err);\n this.resetFlush();\n }\n }, this);\n var requestOptions = {\n method: 'POST',\n verbose: true,\n ignore_json_errors: true, // eslint-disable-line camelcase\n timeout_ms: timeoutMS // eslint-disable-line camelcase\n };\n if (options.unloading) {\n requestOptions.transport = 'sendBeacon';\n }\n logger.log('MIXPANEL REQUEST:', dataForRequest);\n return this.sendRequestPromise(dataForRequest, requestOptions).then(batchSendCallback);\n }, this))\n .catch(_.bind(function(err) {\n this.reportError('Error flushing request queue', err);\n this.resetFlush();\n }, this));\n};\n\n/**\n * Log error to global logger and optional user-defined logger.\n */\nRequestBatcher.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n if (this.errorReporter) {\n try {\n if (!(err instanceof Error)) {\n err = new Error(msg);\n }\n this.errorReporter(msg, err);\n } catch(err) {\n logger.error(err);\n }\n }\n};\n\nexport { RequestBatcher };\n","import { _ } from '../utils';\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n * @returns {boolean}\n */\nvar isRecordingExpired = function(serializedRecording) {\n var now = Date.now();\n return !serializedRecording || now > serializedRecording['maxExpires'] || now > serializedRecording['idleExpires'];\n};\n\n\nvar RECORD_ENQUEUE_THROTTLE_MS = 250;\n\nvar validateAllowedOrigins = function(origins, logger) {\n if (!_.isArray(origins)) {\n if (origins) {\n logger.critical('record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled.');\n }\n return [];\n }\n var valid = [];\n for (var i = 0; i < origins.length; i++) {\n try {\n var origin = new URL(origins[i]).origin;\n if (origin === 'null') {\n logger.critical(origins[i] + ' has an opaque origin. Skipping this entry.');\n continue;\n }\n valid.push(origin);\n } catch (e) {\n logger.critical(origins[i] + ' is not a valid origin URL. Skipping this entry.');\n }\n }\n return valid;\n};\n\nexport {\n isRecordingExpired,\n RECORD_ENQUEUE_THROTTLE_MS,\n validateAllowedOrigins\n};\n","// stateless utils\n// mostly from https://github.com/mixpanel/mixpanel-js/blob/989ada50f518edab47b9c4fd9535f9fbd5ec5fc0/src/autotrack-utils.js\n\nimport { _, console_with_prefix, document, safewrap } from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\n\nvar EV_CHANGE = 'change';\nvar EV_CLICK = 'click';\nvar EV_HASHCHANGE = 'hashchange';\nvar EV_INPUT = 'input';\nvar EV_LOAD = 'load';\nvar EV_MP_LOCATION_CHANGE = 'mp_locationchange';\nvar EV_POPSTATE = 'popstate';\n// TODO scrollend isn't available in Safari: document or polyfill?\nvar EV_SCROLLEND = 'scrollend';\nvar EV_SCROLL = 'scroll';\nvar EV_SELECT = 'select';\nvar EV_SUBMIT = 'submit';\nvar EV_TOGGLE = 'toggle';\nvar EV_VISIBILITYCHANGE = 'visibilitychange';\n\nvar CLICK_EVENT_PROPS = [\n 'clientX', 'clientY',\n 'offsetX', 'offsetY',\n 'pageX', 'pageY',\n 'screenX', 'screenY',\n 'x', 'y'\n];\nvar OPT_IN_CLASSES = ['mp-include'];\nvar OPT_OUT_CLASSES = ['mp-no-track'];\nvar SENSITIVE_DATA_CLASSES = OPT_OUT_CLASSES.concat(['mp-sensitive']);\nvar TRACKED_ATTRS = [\n 'aria-label', 'aria-labelledby', 'aria-describedby',\n 'href', 'name', 'role', 'title', 'type'\n];\n\nvar INTERACTIVE_ARIA_ROLES = {\n 'button': true,\n 'checkbox': true,\n 'combobox': true,\n 'grid': true,\n 'link': true,\n 'listbox': true,\n 'menu': true,\n 'menubar': true,\n 'menuitem': true,\n 'menuitemcheckbox': true,\n 'menuitemradio': true,\n 'navigation': true,\n 'option': true,\n 'radio': true,\n 'radiogroup': true,\n 'searchbox': true,\n 'slider': true,\n 'spinbutton': true,\n 'switch': true,\n 'tab': true,\n 'tablist': true,\n 'textbox': true,\n 'tree': true,\n 'treegrid': true,\n 'treeitem': true\n};\n\nvar ALWAYS_NON_INTERACTIVE_TAGS = {\n // Document metadata\n 'base': true,\n 'head': true,\n 'html': true,\n 'link': true,\n 'meta': true,\n 'script': true,\n 'style': true,\n 'title': true,\n // Text formatting\n 'br': true,\n 'hr': true,\n 'wbr': true,\n // Other\n 'noscript': true,\n 'picture': true,\n 'source': true,\n 'template': true,\n 'track': true\n};\n\n// Common container tags that need additional checks\nvar TEXT_CONTAINER_TAGS = {\n 'article': true,\n 'div': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'p': true,\n 'section': true,\n 'span': true\n};\n\nvar EVENT_HANDLER_ATTRIBUTES = [\n 'onclick', 'onmousedown', 'onmouseup', 'onpointerdown', 'onpointerup', 'ontouchend', 'ontouchstart'\n];\n\nvar MAX_DEPTH = 5;\n\nvar logger = console_with_prefix('autocapture');\n\n\nfunction getClasses(el) {\n var classes = {};\n var classList = getClassName(el).split(' ');\n for (var i = 0; i < classList.length; i++) {\n var cls = classList[i];\n if (cls) {\n classes[cls] = true;\n }\n }\n return classes;\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n * @param {Element} el - element to get the className of\n * @returns {string} the element's class\n */\nfunction getClassName(el) {\n switch(typeof el.className) {\n case 'string':\n return el.className;\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n return el.className.baseVal || el.getAttribute('class') || '';\n default: // future proof\n return '';\n }\n}\n\nfunction getPreviousElementSibling(el) {\n if (el.previousElementSibling) {\n return el.previousElementSibling;\n } else {\n do {\n el = el.previousSibling;\n } while (el && !isElementNode(el));\n return el;\n }\n}\n\nfunction getPropertiesFromElement(el, ev, blockAttrsSet, extraAttrs, allowElementCallback, allowSelectors) {\n var props = {\n '$classes': getClassName(el).split(' '),\n '$tag_name': el.tagName.toLowerCase()\n };\n var elId = el.id;\n if (elId) {\n props['$id'] = elId;\n }\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors)) {\n _.each(TRACKED_ATTRS.concat(extraAttrs), function(attr) {\n if (el.hasAttribute(attr) && !blockAttrsSet[attr]) {\n var attrVal = el.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$attr-' + attr] = attrVal;\n }\n }\n });\n }\n\n var nthChild = 1;\n var nthOfType = 1;\n var currentElem = el;\n while (currentElem = getPreviousElementSibling(currentElem)) { // eslint-disable-line no-cond-assign\n nthChild++;\n if (currentElem.tagName === el.tagName) {\n nthOfType++;\n }\n }\n props['$nth_child'] = nthChild;\n props['$nth_of_type'] = nthOfType;\n\n return props;\n}\n\nfunction getPropsForDOMEvent(ev, config) {\n var allowElementCallback = config.allowElementCallback;\n var allowSelectors = config.allowSelectors || [];\n var blockAttrs = config.blockAttrs || [];\n var blockElementCallback = config.blockElementCallback;\n var blockSelectors = config.blockSelectors || [];\n var captureTextContent = config.captureTextContent || false;\n var captureExtraAttrs = config.captureExtraAttrs || [];\n var capturedForHeatMap = config.capturedForHeatMap || false;\n\n // convert array to set every time, as the config may have changed\n var blockAttrsSet = {};\n _.each(blockAttrs, function(attr) {\n blockAttrsSet[attr] = true;\n });\n\n var props = null;\n\n var target = typeof ev.target === 'undefined' ? ev.srcElement : ev.target;\n if (isTextNode(target)) { // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = target.parentNode;\n }\n\n if (\n shouldTrackDomEvent(target, ev) &&\n isElementAllowed(target, ev, allowElementCallback, allowSelectors) &&\n !isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n var targetElementList = [target];\n var curEl = target;\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n targetElementList.push(curEl.parentNode);\n curEl = curEl.parentNode;\n }\n\n var elementsJson = [];\n var href, explicitNoTrack = false;\n _.each(targetElementList, function(el) {\n var shouldTrackDetails = shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors);\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (!blockAttrsSet['href'] && el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href');\n href = shouldTrackDetails && shouldTrackValue(href) && href;\n }\n\n if (isElementBlocked(el, ev, blockElementCallback, blockSelectors)) {\n explicitNoTrack = true;\n }\n\n elementsJson.push(getPropertiesFromElement(el, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors));\n }, this);\n\n if (!explicitNoTrack) {\n var docElement = document['documentElement'];\n props = {\n '$event_type': ev.type,\n '$host': window.location.host,\n '$pathname': window.location.pathname,\n '$elements': elementsJson,\n '$el_attr__href': href,\n '$viewportHeight': Math.max(docElement['clientHeight'], window['innerHeight'] || 0),\n '$viewportWidth': Math.max(docElement['clientWidth'], window['innerWidth'] || 0),\n '$pageHeight': document['body']['offsetHeight'] || 0,\n '$pageWidth': document['body']['offsetWidth'] || 0,\n };\n _.each(captureExtraAttrs, function(attr) {\n if (!blockAttrsSet[attr] && target.hasAttribute(attr)) {\n var attrVal = target.getAttribute(attr);\n if (shouldTrackValue(attrVal)) {\n props['$el_attr__' + attr] = attrVal;\n }\n }\n });\n\n if (captureTextContent) {\n elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (ev.type === EV_CLICK) {\n _.each(CLICK_EVENT_PROPS, function(prop) {\n if (prop in ev) {\n props['$' + prop] = ev[prop];\n }\n });\n if (capturedForHeatMap) {\n props['$captured_for_heatmap'] = true;\n }\n target = guessRealClickTarget(ev);\n }\n // prioritize text content from \"real\" click target if different from original target\n if (captureTextContent) {\n var elementText = getSafeText(target, ev, allowElementCallback, allowSelectors);\n if (elementText && elementText.length) {\n props['$el_text'] = elementText;\n }\n }\n\n if (target) {\n // target may have been recalculated; check allowlists and blocklists again\n if (\n !isElementAllowed(target, ev, allowElementCallback, allowSelectors) ||\n isElementBlocked(target, ev, blockElementCallback, blockSelectors)\n ) {\n return null;\n }\n\n var targetProps = getPropertiesFromElement(target, ev, blockAttrsSet, captureExtraAttrs, allowElementCallback, allowSelectors);\n props['$target'] = targetProps;\n // pull up more props onto main event props\n props['$el_classes'] = targetProps['$classes'];\n _.extend(props, _.strip_empty_properties({\n '$el_id': targetProps['$id'],\n '$el_tag_name': targetProps['$tag_name']\n }));\n }\n }\n }\n\n return props;\n}\n\n\n/**\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {string} the element's direct text content\n */\nfunction getSafeText(el, ev, allowElementCallback, allowSelectors) {\n var elText = '';\n\n if (shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) && el.childNodes && el.childNodes.length) {\n _.each(el.childNodes, function(child) {\n if (isTextNode(child) && child.textContent) {\n elText += child.textContent.trim()\n // scrub potentially sensitive values\n .split(/(\\s+)/).filter(shouldTrackValue).join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ').replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255);\n }\n });\n }\n\n return elText.trim();\n}\n\nfunction guessRealClickTarget(ev) {\n var target = ev.target;\n var composedPath = ev['composedPath']();\n for (var i = 0; i < composedPath.length; i++) {\n var node = composedPath[i];\n if (\n isTag(node, 'a') ||\n isTag(node, 'button') ||\n isTag(node, 'input') ||\n isTag(node, 'select') ||\n (node.getAttribute && node.getAttribute('role') === 'button')\n ) {\n target = node;\n break;\n }\n if (node === target) {\n break;\n }\n }\n return target;\n}\n\nfunction isElementAllowed(el, ev, allowElementCallback, allowSelectors) {\n if (allowElementCallback) {\n try {\n if (!allowElementCallback(el, ev)) {\n return false;\n }\n } catch (err) {\n logger.critical('Error while checking element in allowElementCallback', err);\n return false;\n }\n }\n\n if (!allowSelectors.length) {\n // no allowlist; all elements are fair game\n return true;\n }\n\n for (var i = 0; i < allowSelectors.length; i++) {\n var sel = allowSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n return false;\n}\n\nfunction isElementBlocked(el, ev, blockElementCallback, blockSelectors) {\n var i;\n\n if (blockElementCallback) {\n try {\n if (blockElementCallback(el, ev)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking element in blockElementCallback', err);\n return true;\n }\n }\n\n if (blockSelectors && blockSelectors.length) {\n // programmatically prevent tracking of elements that match CSS selectors\n for (i = 0; i < blockSelectors.length; i++) {\n var sel = blockSelectors[i];\n try {\n if (el['matches'](sel)) {\n return true;\n }\n } catch (err) {\n logger.critical('Error while checking selector: ' + sel, err);\n }\n }\n }\n\n // allow users to programmatically prevent tracking of elements by adding default classes such as 'mp-no-track'\n var classes = getClasses(el);\n for (i = 0; i < OPT_OUT_CLASSES.length; i++) {\n if (classes[OPT_OUT_CLASSES[i]]) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM node has nodeType Node.ELEMENT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of the correct nodeType\n */\nfunction isElementNode(node) {\n return node && node.nodeType === 1; // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nfunction isTag(el, tag) {\n return el && el.tagName && el.tagName.toLowerCase() === tag.toLowerCase();\n}\n\n/*\n * Check whether a DOM node is a TEXT_NODE\n * @param {Node} node - node to check\n * @returns {boolean} whether node is of type Node.TEXT_NODE\n */\nfunction isTextNode(node) {\n return node && node.nodeType === 3; // Node.TEXT_NODE - use integer constant for browser portability\n}\n\nfunction minDOMApisSupported() {\n try {\n var testEl = document.createElement('div');\n return !!testEl['matches'];\n } catch (err) {\n return false;\n }\n}\n\nfunction weakSetSupported() {\n return typeof WeakSet !== 'undefined';\n}\n\n/*\n * Check whether a DOM event should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} ev - event to check\n * @returns {boolean} whether the event should be tracked\n */\nfunction shouldTrackDomEvent(el, ev) {\n if (!el || isTag(el, 'html') || !isElementNode(el)) {\n return false;\n }\n var tag = el.tagName.toLowerCase();\n switch (tag) {\n case 'form':\n return ev.type === EV_SUBMIT;\n case 'input':\n if (['button', 'submit'].indexOf(el.getAttribute('type')) === -1) {\n return ev.type === EV_CHANGE;\n } else {\n return ev.type === EV_CLICK;\n }\n case 'select':\n case 'textarea':\n return ev.type === EV_CHANGE;\n default:\n return ev.type === EV_CLICK;\n }\n}\n\nfunction elementLooksSensitive(el) {\n var name = (el.name || el.id || '').toString().toLowerCase();\n if (typeof name === 'string') { // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n var sensitiveNameRegex = /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i;\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return true;\n }\n }\n\n return false;\n}\n\n/*\n * Check whether a DOM element should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Array} allowSelectors - CSS selectors for elements that should be included\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackElementDetails(el, ev, allowElementCallback, allowSelectors) {\n var i;\n\n if (!isElementAllowed(el, ev, allowElementCallback, allowSelectors)) {\n return false;\n }\n\n for (var curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode) {\n var classes = getClasses(curEl);\n for (i = 0; i < SENSITIVE_DATA_CLASSES.length; i++) {\n if (classes[SENSITIVE_DATA_CLASSES[i]]) {\n return false;\n }\n }\n }\n\n var elClasses = getClasses(el);\n for (i = 0; i < OPT_IN_CLASSES.length; i++) {\n if (elClasses[OPT_IN_CLASSES[i]]) {\n return true;\n }\n }\n\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n if (\n isTag(el, 'input') ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return false;\n }\n\n // don't include hidden or password fields\n var type = el.type || '';\n if (typeof type === 'string') { // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch(type.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n if (elementLooksSensitive(el)) {\n return false;\n }\n\n return true;\n}\n\n\n/*\n * Check whether a string value should be \"tracked\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @returns {boolean} whether the element should be tracked\n */\nfunction shouldTrackValue(value) {\n if (value === null || _.isUndefined(value)) {\n return false;\n }\n\n if (typeof value === 'string') {\n value = value.trim();\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n var ccRegex = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false;\n }\n\n // check to see if input value looks like a social security number\n var ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(value)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Creates a cross-browser compatible scroll end function with appropriate event listener.\n * For browsers that support scrollend, returns the original function with scrollend event.\n * For browsers without scrollend support, returns a debounced function that triggers\n * 100ms after the last scroll event to simulate scrollend behavior.\n * @param {Function} originalFunction - The function to call when scrolling ends\n * @returns {Object} Object containing listener function and eventType string\n * @returns {Function} returns.listener - The wrapped function to use as event listener\n * @returns {string} returns.eventType - The event type to listen for ('scrollend' or 'scroll')\n */\nfunction getPolyfillScrollEndFunction(originalFunction) {\n var supportsScrollEnd = 'onscrollend' in window;\n var polyfillFunction = safewrap(originalFunction);\n var polyfillEvent = EV_SCROLLEND;\n if (!supportsScrollEnd) {\n // Polyfill for browsers without scrollend support: wait 100ms after the last scroll event\n // https://developer.chrome.com/blog/scrollend-a-new-javascript-event\n var scrollTimer = null;\n var scrollDelayMs = 100;\n\n polyfillFunction = safewrap(function() {\n clearTimeout(scrollTimer);\n scrollTimer = setTimeout(originalFunction, scrollDelayMs);\n });\n\n polyfillEvent = EV_SCROLL;\n }\n\n return {\n listener: polyfillFunction,\n eventType: polyfillEvent\n };\n}\n\nfunction hasInlineEventHandlers(element) {\n for (var i = 0; i < EVENT_HANDLER_ATTRIBUTES.length; i++) {\n if (element.hasAttribute(EVENT_HANDLER_ATTRIBUTES[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction hasInteractiveAriaRole(element) {\n var role = element.getAttribute('role');\n if (!role) return false;\n\n // Handle invalid markup where multiple roles might be specified\n // Only the first token is recognized per ARIA spec\n var primaryRole = role.trim().split(/\\s+/)[0].toLowerCase();\n\n return INTERACTIVE_ARIA_ROLES[primaryRole];\n}\n\nfunction hasAnyInteractivityIndicators(element) {\n var tagName = element.tagName.toLowerCase();\n\n // Check for interactive HTML elements\n if (tagName === 'button' ||\n tagName === 'input' ||\n tagName === 'select' ||\n tagName === 'textarea' ||\n tagName === 'details' ||\n tagName === 'dialog') {\n return true;\n }\n\n if (element.isContentEditable) {\n return true;\n }\n\n if (element.onclick || element.onmousedown || element.onmouseup || element.ontouchstart || element.ontouchend) {\n return true;\n }\n\n if (hasInlineEventHandlers(element)) {\n return true;\n }\n\n if (hasInteractiveAriaRole(element)) {\n return true;\n }\n\n if (tagName === 'a' && element.hasAttribute('href')) {\n return true;\n }\n\n if (element.hasAttribute('tabindex')) {\n return true;\n }\n\n return false;\n}\n\n\nfunction isDefinitelyNonInteractive(element) {\n if (!element || !element.tagName) {\n return true;\n }\n\n var tagName = element.tagName.toLowerCase();\n\n // These tags are definitely non-interactive\n if (ALWAYS_NON_INTERACTIVE_TAGS[tagName]) {\n return true;\n }\n\n // For all other elements, we can only be certain they're non-interactive if they lack ALL indicators of interactivity\n // Check for any signs of interactivity\n if (hasAnyInteractivityIndicators(element)) {\n return false;\n }\n\n // Check parent chain for interactive context\n var parent = element.parentElement;\n var depth = 0;\n\n while (parent && depth < MAX_DEPTH) {\n if (hasAnyInteractivityIndicators(parent)) {\n return false; // Element is inside an interactive parent\n }\n\n if (parent.getRootNode && parent.getRootNode() !== document) {\n var root = parent.getRootNode();\n if (root.host && hasAnyInteractivityIndicators(root.host)) {\n return false; // Inside an interactive shadow host\n }\n }\n\n parent = parent.parentElement;\n depth++;\n }\n\n // Pure text containers without any interactive context\n if (TEXT_CONTAINER_TAGS[tagName]) {\n // These are non-interactive ONLY if they have no interactive indicators (already checked as part of hasAnyInteractivityIndicators)\n return true;\n }\n\n // Default: we can't be certain it's non-interactive\n return false;\n}\n\n/**\n * Get the composed path of a click event for elements embedded in shadow DOM.\n * @param {Event} event - event to get the composed path from\n * @returns {Array} the composed path of the click event\n*/\nfunction getClickEventComposedPath(event) {\n if ('composedPath' in event) {\n return event['composedPath']();\n }\n\n return [];\n}\n\n/**\n * Get the element from a click event, accounting for elements embedded in shadow DOM.\n * @param {Event} event - event to get the target from\n * @returns {Element | null} the element that was the target of the click event\n */\nfunction getClickEventTargetElement(event) {\n var path = getClickEventComposedPath(event);\n\n if (path && path.length > 0) {\n return path[0];\n }\n\n return event['target'] || event['srcElement'];\n}\n\nexport {\n EV_CHANGE, EV_CLICK, EV_HASHCHANGE, EV_INPUT, EV_LOAD,EV_MP_LOCATION_CHANGE, EV_POPSTATE,\n EV_SCROLL, EV_SCROLLEND, EV_SELECT, EV_SUBMIT, EV_TOGGLE, EV_VISIBILITYCHANGE,\n elementLooksSensitive,\n getClickEventComposedPath,\n getClickEventTargetElement,\n getPolyfillScrollEndFunction,\n getPropsForDOMEvent,\n getSafeText,\n isDefinitelyNonInteractive,\n logger,\n minDOMApisSupported,\n shouldTrackDomEvent, shouldTrackElementDetails, shouldTrackValue,\n weakSetSupported\n};\n","/**\n * @typedef {Object} MaskingConfig\n * @property {string} maskingSelector - Combined CSS selector string to mask\n * @property {string} unmaskingSelector - Combined CSS selector string to unmask\n * @property {boolean} maskAll - Whether to mask all by default\n * @property {RegExp} [_legacyClassRegex] - Legacy class regex for backwards compatibility\n */\n\n/**\n * @typedef {Object} PrivacyConfig\n * @property {MaskingConfig} input - Input masking configuration\n * @property {MaskingConfig} text - Text masking configuration\n */\n\nimport { classMatchesRegex } from './rrweb-entrypoint';\nimport { elementLooksSensitive } from '../autocapture/utils';\n\nvar COMMON_MASK_CLASSES_SELECTOR = '.mp-mask, .fs-mask, .amp-mask, .rr-mask, .ph-mask';\nvar RRWEB_PASSWORD_ATTRIBUTE = 'data-rr-is-password';\nvar ALWAYS_MASKED_INPUT_TYPES = ['password', 'email', 'tel', 'hidden'];\n\n/**\n * Normalizes a selector value to an array of selectors\n * @param {string|string[]|undefined} selector\n * @returns {string[]}\n */\nfunction normalizeSelectors(selector) {\n if (!selector) {\n return [];\n }\n if (Array.isArray(selector)) {\n return selector;\n }\n return [selector];\n}\n\n/**\n * Reads flat config options and normalizes them into internal privacy config structure\n * @param {Object} mixpanelInstance\n * @returns {PrivacyConfig} privacyConfig\n */\nfunction getPrivacyConfig(mixpanelInstance) {\n var privacyConfig = {\n input: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n },\n text: {\n maskingSelector: '',\n unmaskingSelector: '',\n maskAll: true\n }\n };\n\n // Input related config\n var maskInputSelector = mixpanelInstance.get_config('record_mask_input_selector');\n var unmaskInputSelector = mixpanelInstance.get_config('record_unmask_input_selector');\n var maskAllInputs = mixpanelInstance.get_config('record_mask_all_inputs');\n\n privacyConfig.input.maskingSelector = normalizeSelectors(maskInputSelector).join(',');\n privacyConfig.input.unmaskingSelector = normalizeSelectors(unmaskInputSelector).join(',');\n if (maskAllInputs !== undefined) {\n privacyConfig.input.maskAll = maskAllInputs;\n }\n\n // Text related config\n var maskTextSelector = mixpanelInstance.get_config('record_mask_text_selector');\n var unmaskTextSelector = mixpanelInstance.get_config('record_unmask_text_selector');\n var maskAllText = mixpanelInstance.get_config('record_mask_all_text');\n var legacyMaskTextClass = mixpanelInstance.get_config('record_mask_text_class');\n\n var textMaskingSelectors = normalizeSelectors(maskTextSelector);\n\n // Handle legacy record_mask_text_class\n if (legacyMaskTextClass) {\n if (legacyMaskTextClass instanceof RegExp) {\n // For RegExp classes, we'll need to handle this differently in the shouldMaskText function\n privacyConfig.text._legacyClassRegex = legacyMaskTextClass;\n } else {\n // String class name - convert to selector\n var classSelector = '.' + legacyMaskTextClass;\n if (textMaskingSelectors.indexOf(classSelector) === -1) {\n textMaskingSelectors.push(classSelector);\n }\n }\n }\n\n privacyConfig.text.maskingSelector = textMaskingSelectors.join(',');\n privacyConfig.text.unmaskingSelector = normalizeSelectors(unmaskTextSelector).join(',');\n\n // Migrate old config: if only record_mask_text_selector is specified, set maskAll to false\n // preserves behavior where the masking selector defaulted to \"*\"\n if (maskAllText === undefined && maskTextSelector !== undefined) {\n privacyConfig.text.maskAll = false;\n } else if (maskAllText !== undefined) {\n privacyConfig.text.maskAll = maskAllText;\n }\n\n return privacyConfig;\n}\n\n/**\n * Checks if element matches a combined CSS selector\n * @param {HTMLElement} element\n * @param {string} selector - Combined CSS selector (comma-separated)\n * @returns {boolean}\n */\nfunction elementMatchesSelector(element, selector) {\n if (!selector) {\n return false;\n }\n return !!element.closest(selector);\n}\n\n/**\n * Determines if an input should be masked based on privacy config\n * @param {HTMLElement} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskInput(element, privacyConfig) {\n var inputType = (element.getAttribute('type') || '').toLowerCase();\n if (ALWAYS_MASKED_INPUT_TYPES.indexOf(inputType) !== -1) {\n return true;\n }\n\n var autocomplete = (element.getAttribute('autocomplete') || '').toLowerCase();\n if (autocomplete && autocomplete !== '' && autocomplete !== 'off') {\n return true;\n }\n\n if (element.hasAttribute(RRWEB_PASSWORD_ATTRIBUTE)) {\n return true;\n }\n\n if (elementLooksSensitive(element)) {\n return true;\n }\n\n if (privacyConfig.input.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.input.unmaskingSelector)) {\n return false;\n }\n\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.input.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\n/**\n * Determines if text should be masked based on privacy config\n * @param {HTMLElement|null} element\n * @param {PrivacyConfig} privacyConfig\n * @returns {boolean}\n */\nfunction shouldMaskText(element, privacyConfig) {\n if (!element) {\n return false;\n }\n\n // Check legacy class regex if present (for backwards compatibility)\n if (privacyConfig.text._legacyClassRegex) {\n if (classMatchesRegex(element, privacyConfig.text._legacyClassRegex, true)) {\n return true;\n }\n }\n\n if (privacyConfig.text.maskAll) {\n if (elementMatchesSelector(element, privacyConfig.text.unmaskingSelector)) {\n return false;\n }\n return true;\n } else {\n if (elementMatchesSelector(element, privacyConfig.text.maskingSelector)) {\n return true;\n }\n if (elementMatchesSelector(element, COMMON_MASK_CLASSES_SELECTOR)) {\n return true;\n }\n return false;\n }\n}\n\nexport {\n COMMON_MASK_CLASSES_SELECTOR,\n getPrivacyConfig,\n shouldMaskInput,\n shouldMaskText\n};\n","/**\n * This is a port of the open rrweb network plugin in this PR https://github.com/rrweb-io/rrweb/pull/1105\n * the hope is that eventually this can be replaced with the official plugin once it's published (and we sync the mixpanel rrweb fork)\n *\n * This plugin incorporates some important fixes for fetch/XHR body recording that are not yet in the main rrweb repo, as well as makes\n * header and body recording more restrictive by requiring an allowlist instead of content type / blocklist.\n *\n */\nimport { urlMatchesRegexList, console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('network-plugin');\n\n/**\n * Get the time origin for converting performance timestamps to absolute timestamps.\n * Uses Date.now() - performance.now() instead of performance.timeOrigin because\n * browsers can report timeOrigin values that are skewed from actual time, and some\n * browsers (notably older Safari versions) don't implement timeOrigin at all.\n * See: https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L49-L70\n * @param {Window} win\n * @returns {number}\n */\nfunction getTimeOrigin(win) {\n return Math.round(Date.now() - win.performance.now());\n}\n\n/**\n * @typedef {import('../index.d.ts').InitiatorType} InitiatorType\n * @typedef {import('../index.d.ts').NetworkRequest} NetworkRequest\n * @typedef {import('../index.d.ts').NetworkRecordOptions} NetworkRecordOptions\n * @typedef {import('../index.d.ts').NetworkData} NetworkData\n */\n\n/**\n * @typedef {Record} Headers\n */\n\n/**\n * @typedef {string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream | null} Body\n */\n\n/**\n * @callback networkCallback\n * @param {NetworkData} data\n * @returns {void}\n */\n\n/**\n * @callback listenerHandler\n * @returns {void}\n */\n\n/**\n * @typedef {(PerformanceNavigationTiming | PerformanceResourceTiming) & { responseStatus?: number }} ObservedPerformanceEntry\n */\n\n/**\n * @typedef {Object} RecordPlugin\n * @property {string} name\n * @property {(callback: networkCallback, win: Window, options: NetworkRecordOptions) => listenerHandler} observer\n * @property {NetworkRecordOptions} [options]\n */\n\n/** @type {Required} */\nvar defaultNetworkOptions = {\n initiatorTypes: [\n 'audio',\n 'beacon',\n 'body',\n 'css',\n 'early-hint',\n 'embed',\n 'fetch',\n 'frame',\n 'iframe',\n 'icon',\n 'image',\n 'img',\n 'input',\n 'link',\n 'navigation',\n 'object',\n 'ping',\n 'script',\n 'track',\n 'video',\n 'xmlhttprequest',\n ],\n ignoreRequestFn: function() { return false; },\n recordHeaders: {\n request: [],\n response: [],\n },\n recordBodyUrls: {\n request: [],\n response: [],\n },\n recordInitialRequests: false,\n};\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceNavigationTiming}\n */\nfunction isNavigationTiming(entry) {\n return entry.entryType === 'navigation';\n}\n\n/**\n * @param {PerformanceEntry} entry\n * @returns {entry is PerformanceResourceTiming}\n */\nfunction isResourceTiming (entry) {\n return entry.entryType === 'resource';\n}\n\nexport function findLast(array, predicate) {\n var length = array.length;\n for (var i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i];\n }\n }\n}\n\n/**\n * Monkey-patches a method on an object with a wrapped version, returning a function that restores the original.\n * Adapted from Sentry's `fill` utility:\n * https://github.com/getsentry/sentry-javascript/blob/de5c5cbe177b4334386e747857225eec36a91ea1/packages/core/src/utils/object.ts#L67-L95\n *\n * @param {object} source - The object containing the method to patch\n * @param {string} name - The method name to patch\n * @param {function} replacementFactory - A function that receives the original method and returns the replacement\n * @returns {function} A function that restores the original method\n */\nexport function patch(source, name, replacementFactory) {\n if (!(name in source) || typeof source[name] !== 'function') {\n return function() {};\n }\n var original = source[name];\n var wrapped = replacementFactory(original);\n source[name] = wrapped;\n return function() {\n source[name] = original;\n };\n}\n\n\n/**\n * Maximum body size to record (1MB)\n */\nvar MAX_BODY_SIZE = 1024 * 1024;\n\n/**\n * Truncate string if it exceeds max size\n * @param {string} str\n * @returns {string}\n */\nexport function truncateBody(str) {\n if (!str || typeof str !== 'string') {\n return str;\n }\n if (str.length > MAX_BODY_SIZE) {\n logger.error('Body truncated from ' + str.length + ' to ' + MAX_BODY_SIZE + ' characters');\n return str.substring(0, MAX_BODY_SIZE) + '... [truncated]';\n }\n return str;\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initPerformanceObserver(cb, win, options) {\n if (!win.PerformanceObserver) {\n logger.error('PerformanceObserver not supported');\n return function() {\n //\n };\n }\n if (options.recordInitialRequests) {\n var initialPerformanceEntries = win.performance\n .getEntries()\n .filter(function(entry) {\n return isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType));\n });\n cb({\n requests: initialPerformanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n isInitial: true,\n });\n }\n var observer = new win.PerformanceObserver(function(entries) {\n var performanceEntries = entries\n .getEntries()\n .filter(function(entry) {\n return isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType) &&\n entry.initiatorType !== 'xmlhttprequest' &&\n entry.initiatorType !== 'fetch';\n });\n cb({\n requests: performanceEntries.map(function(entry) {\n return {\n url: entry.name,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n };\n }),\n });\n });\n observer.observe({ entryTypes: ['navigation', 'resource'] });\n return function() {\n observer.disconnect();\n };\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for headers instead of supporting boolean options\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordHeaders']} recordHeaders\n * @param {string} headerName\n * @returns {boolean}\n */\nexport function shouldRecordHeader(type, recordHeaders, headerName) {\n if (!recordHeaders[type] || recordHeaders[type].length === 0) {\n return false;\n }\n\n return recordHeaders[type].includes(headerName.toLowerCase());\n}\n\n/**\n * Variation of the original rrweb function that requires an allowlist for URLs instead of supporting boolean options or by content type\n * @param {'request' | 'response'} type\n * @param {NetworkRecordOptions['recordBodyUrls']} recordBodyUrls\n * @param {string} url\n * @returns {boolean}\n */\nexport function shouldRecordBody(type, recordBodyUrls, url) {\n if (!recordBodyUrls[type] || recordBodyUrls[type].length === 0) {\n return false;\n }\n\n return urlMatchesRegexList(url, recordBodyUrls[type]);\n}\n\nfunction tryReadXHRBody(body) {\n if (body === null || body === undefined) {\n return null;\n }\n\n var result;\n if (typeof body === 'string') {\n result = body;\n } else if (body instanceof Document) {\n result = body.textContent;\n } else if (body instanceof FormData) {\n result = _.HTTPBuildQuery(body);\n } else if (_.isObject(body)) {\n try {\n result = JSON.stringify(body);\n } catch (e) {\n return 'Failed to stringify response object';\n }\n } else {\n return 'Cannot read body of type ' + typeof body;\n }\n\n return truncateBody(result);\n}\n\n/**\n * @param {Request | Response} r\n * @returns {Promise}\n */\nfunction tryReadFetchBody(r) {\n return new Promise(function(resolve) {\n var timeout = setTimeout(function() {\n resolve('Timeout while trying to read body');\n }, 500);\n try {\n r.clone()\n .text()\n .then(\n function(txt) {\n clearTimeout(timeout);\n resolve(truncateBody(txt));\n },\n function(reason) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(reason));\n }\n );\n } catch (e) {\n clearTimeout(timeout);\n resolve('Failed to read body: ' + String(e));\n }\n });\n}\n\n/**\n * @param {Window} win\n * @param {string} initiatorType\n * @param {string} url\n * @param {number} [after]\n * @param {number} [before]\n * @param {number} [attempt]\n * @returns {Promise}\n */\nfunction getRequestPerformanceEntry(win, initiatorType, url, after, before, attempt) {\n if (attempt === undefined) {\n attempt = 0;\n }\n if (attempt > 10) {\n logger.error('Cannot find performance entry');\n return Promise.resolve(null);\n }\n var urlPerformanceEntries = /** @type {PerformanceResourceTiming[]} */ (\n win.performance.getEntriesByName(url)\n );\n var performanceEntry = findLast(\n urlPerformanceEntries,\n function(entry) {\n return isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (!after || entry.startTime >= after) &&\n (!before || entry.startTime <= before);\n }\n );\n if (!performanceEntry) {\n return new Promise(function(resolve) {\n setTimeout(resolve, 50 * attempt);\n }).then(function() {\n return getRequestPerformanceEntry(\n win,\n initiatorType,\n url,\n after,\n before,\n attempt + 1\n );\n });\n }\n return Promise.resolve(performanceEntry);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nfunction initXhrObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return function() {\n //\n };\n }\n var restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n function(/** @type {typeof XMLHttpRequest.prototype.open} */ originalOpen) {\n return function(\n /** @type {string} */ method,\n /** @type {string | URL} */ url,\n /** @type {boolean} */ async,\n username, password\n ) {\n if (async === undefined) {\n async = true;\n }\n var xhr = /** @type {XMLHttpRequest} */ (this);\n var req = new Request(url, { method: method });\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n /** @type {Headers} */\n var requestHeaders = {};\n var originalSetRequestHeader = xhr.setRequestHeader.bind(xhr);\n xhr.setRequestHeader = function(/** @type {string} */ header, /** @type {string} */ value) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n return originalSetRequestHeader(header, value);\n };\n networkRequest.requestHeaders = requestHeaders;\n\n var originalSend = xhr.send.bind(xhr);\n xhr.send = function(/** @type {Body} */ body) {\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n networkRequest.requestBody = tryReadXHRBody(body);\n }\n after = win.performance.now();\n return originalSend(body);\n };\n xhr.addEventListener('readystatechange', function() {\n if (xhr.readyState !== xhr.DONE) {\n return;\n }\n before = win.performance.now();\n /** @type {Headers} */\n var responseHeaders = {};\n var rawHeaders = xhr.getAllResponseHeaders();\n if (rawHeaders) {\n var headers = rawHeaders.trim().split(/[\\r\\n]+/);\n headers.forEach(function(line) {\n if (!line) return;\n var colonIndex = line.indexOf(': ');\n if (colonIndex === -1) return;\n var header = line.substring(0, colonIndex);\n var value = line.substring(colonIndex + 2);\n if (header && shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n }\n networkRequest.responseHeaders = responseHeaders;\n if (\n shouldRecordBody('response', options.recordBodyUrls, req.url)\n ) {\n networkRequest.responseBody = tryReadXHRBody(xhr.response);\n }\n getRequestPerformanceEntry(\n win,\n 'xmlhttprequest',\n req.url,\n after,\n before\n )\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for XHR request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: xhr.status,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function(e) {\n logger.error('Error recording XHR request to ' + req.url + ': ' + String(e));\n });\n });\n\n originalOpen.call(xhr, method, url, async, username, password);\n };\n }\n );\n return function() {\n restorePatch();\n };\n}\n\n/**\n * Build the Request used to inspect an outgoing fetch call.\n *\n * Constructing a Request from another Request marks the source's body as used, which makes\n * the caller's own fetch fail with \"Cannot construct a Request with a Request object that has\n * already been used\". Clone Request inputs first so the object the caller passed stays intact.\n *\n * @param {RequestInfo | URL} input\n * @param {RequestInit} [init]\n * @returns {Request}\n */\nexport function buildRecordedRequest(input, init) {\n if (typeof Request !== 'undefined' && input instanceof Request) {\n var cloned = input.clone();\n return init ? new Request(cloned, init) : cloned;\n }\n return new Request(input, init);\n}\n\n/**\n * @param {networkCallback} cb\n * @param {Window} win\n * @param {Required} options\n * @returns {listenerHandler}\n */\nexport function initFetchObserver(cb, win, options) {\n if (!options.initiatorTypes.includes('fetch')) {\n return function() {\n //\n };\n }\n\n var restorePatch = patch(win, 'fetch', function(/** @type {typeof fetch} */ originalFetch) {\n return function() {\n var req = buildRecordedRequest(arguments[0], arguments[1]);\n /** @type {Response | undefined} */\n var res;\n /** @type {Partial} */\n var networkRequest = {};\n /** @type {number | undefined} */\n var after;\n /** @type {number | undefined} */\n var before;\n\n var originalFetchPromise;\n var requestBodyPromise = Promise.resolve(undefined);\n var responseBodyResolve;\n var responseBodyPromise = new Promise(function(resolve) {\n responseBodyResolve = resolve;\n });\n try {\n /** @type {Headers} */\n var requestHeaders = {};\n req.headers.forEach(function(value, header) {\n if (shouldRecordHeader('request', options.recordHeaders, header)) {\n requestHeaders[header] = value;\n }\n });\n networkRequest.requestHeaders = requestHeaders;\n\n if (shouldRecordBody('request', options.recordBodyUrls, req.url)) {\n requestBodyPromise = tryReadFetchBody(req)\n .then(function(body) {\n networkRequest.requestBody = body;\n });\n }\n\n after = win.performance.now();\n originalFetchPromise = originalFetch.apply(win, arguments).then(function(response) {\n res = response;\n before = win.performance.now();\n\n /** @type {Headers} */\n var responseHeaders = {};\n res.headers.forEach(function(value, header) {\n if (shouldRecordHeader('response', options.recordHeaders, header)) {\n responseHeaders[header] = value;\n }\n });\n networkRequest.responseHeaders = responseHeaders;\n\n if (shouldRecordBody('response', options.recordBodyUrls, req.url)) {\n tryReadFetchBody(res).then(function(body) {\n networkRequest.responseBody = body;\n responseBodyResolve();\n });\n } else {\n responseBodyResolve();\n }\n\n return res;\n });\n } catch (e) {\n originalFetchPromise = Promise.reject(e);\n }\n\n // await concurrently so we don't delay the fetch response\n Promise.all([requestBodyPromise, responseBodyPromise, originalFetchPromise])\n .then(function () {\n return getRequestPerformanceEntry(win, 'fetch', req.url, after, before);\n })\n .then(function(entry) {\n if (!entry) {\n logger.error('Failed to get performance entry for fetch request to ' + req.url);\n return;\n }\n /** @type {NetworkRequest} */\n var request = {\n url: entry.name,\n method: req.method,\n initiatorType: /** @type {InitiatorType} */ (entry.initiatorType),\n status: res ? res.status : undefined,\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin: getTimeOrigin(win),\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n };\n cb({ requests: [request] });\n })\n .catch(function (e) {\n logger.error('Error recording fetch request to ' + req.url + ': ' + String(e));\n });\n\n return originalFetchPromise;\n };\n });\n return function() {\n restorePatch();\n };\n}\n\n/**\n * @param {networkCallback} callback\n * @param {Window} win\n * @param {NetworkRecordOptions} options\n * @returns {listenerHandler}\n */\nfunction initNetworkObserver(callback, win, options) {\n if (!('performance' in win)) {\n return function() {\n //\n };\n }\n\n var recordHeaders = Object.assign({}, defaultNetworkOptions.recordHeaders, options.recordHeaders || {});\n var recordBodyUrls = Object.assign({}, defaultNetworkOptions.recordBodyUrls, options.recordBodyUrls || {});\n options = Object.assign({}, options, {\n recordHeaders: recordHeaders,\n recordBodyUrls: recordBodyUrls,\n });\n var networkOptions = /** @type {Required} */ Object.assign({}, defaultNetworkOptions, options);\n\n /** @type {networkCallback} */\n var cb = function(data) {\n var requests = data.requests.filter(function(request) {\n var shouldIgnoreUrl = urlMatchesRegexList(request.url, networkOptions.ignoreRequestUrls || []);\n return !shouldIgnoreUrl && !networkOptions.ignoreRequestFn(request);\n });\n if (requests.length > 0 || data.isInitial) {\n callback(Object.assign({}, data, { requests: requests }));\n }\n };\n var performanceObserver = initPerformanceObserver(cb, win, networkOptions);\n var xhrObserver = initXhrObserver(cb, win, networkOptions);\n var fetchObserver = initFetchObserver(cb, win, networkOptions);\n return function() {\n performanceObserver();\n xhrObserver();\n fetchObserver();\n };\n}\n\n// arbitrary .mp suffix in case rrweb does publish this plugin later and we use it but need to handle\n// a changed format in the mixpanel product.\nexport var NETWORK_PLUGIN_NAME = 'rrweb/network@1.mp';\n\n/**\n * @param {NetworkRecordOptions} [options]\n * @returns {RecordPlugin}\n */\nexport var getRecordNetworkPlugin = function(options) {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n };\n};\n","/**\n * @typedef {import('../index').RecordPrivacyConfig} RecordPrivacyConfig\n */\n\nimport { window } from '../window';\nimport { EventType, getRecordConsolePlugin, IncrementalSource } from './rrweb-entrypoint';\nimport { MAX_RECORDING_MS, MAX_VALUE_FOR_MIN_RECORDING_MS, console_with_prefix, NOOP_FUNC, _, localStorageSupported, getLocalStorage, canUseCompressionStream, navigator, userAgent, windowOpera} from '../utils'; // eslint-disable-line camelcase\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_EVENTS_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { RequestBatcher } from '../request-batcher';\n\nimport { Config } from '../config';\nimport { RECORD_ENQUEUE_THROTTLE_MS, validateAllowedOrigins } from './utils';\nimport { shouldMaskInput, shouldMaskText, getPrivacyConfig } from './masking';\nimport { getRecordNetworkPlugin } from './rrweb-network-plugin';\n\nvar logger = console_with_prefix('recorder');\nvar CompressionStream = window['CompressionStream'];\n\nvar RECORDER_BATCHER_LIB_CONFIG = {\n 'batch_size': 1000,\n 'batch_flush_interval_ms': 10 * 1000,\n 'batch_request_timeout_ms': 90 * 1000,\n 'batch_autostart': true\n};\n\nvar ACTIVE_SOURCES = new Set([\n IncrementalSource.MouseMove,\n IncrementalSource.MouseInteraction,\n IncrementalSource.Scroll,\n IncrementalSource.ViewportResize,\n IncrementalSource.Input,\n IncrementalSource.TouchMove,\n IncrementalSource.MediaInteraction,\n IncrementalSource.Drag,\n IncrementalSource.Selection,\n]);\n\nfunction isUserEvent(ev) {\n return ev.type === EventType.IncrementalSnapshot && ACTIVE_SOURCES.has(ev.data.source);\n}\n\n/**\n * @typedef {Object} SerializedRecording\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayId\n * @property {string} tabId\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} SessionRecordingOptions\n * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks\n * before it stores or sends\n * @property {String} [options.replayId] - unique uuid for a single replay\n * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout\n * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length\n * @property {import('./rrweb-entrypoint').record} [options.rrwebRecord] - rrweb's `record` function\n * @property {Function} [options.onBatchSent] - callback when a batch of events is sent to the server\n * @property {Storage} [options.sharedLockStorage] - optional storage for shared lock, used for test dependency injection\n * optional properties for deserialization:\n * @property {number} idleExpires\n * @property {number} maxExpires\n * @property {number} replayStartTime\n * @property {number} lastEventTimestamp - the unix timestamp of the last recorded event from rrweb\n * @property {number} seqNo\n * @property {string} batchStartUrl\n * @property {string} replayStartUrl\n */\n\n/**\n * @typedef {Object} UserIdInfo\n * @property {string} distinct_id\n * @property {string} user_id\n * @property {string} device_id\n */\n\n\n/**\n * This class encapsulates a single session recording and its lifecycle.\n * @param {SessionRecordingOptions} options\n */\nvar SessionRecording = function(options) {\n this._mixpanel = options.mixpanelInstance;\n this.consentGate = options.consentGate;\n this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC;\n this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC;\n this._onBatchSent = options.onBatchSent || NOOP_FUNC;\n this._rrwebRecord = options.rrwebRecord || null;\n\n // internal rrweb stopRecording function\n this._stopRecording = null;\n this.replayId = options.replayId;\n\n this.batchStartUrl = options.batchStartUrl || null;\n this.replayStartUrl = options.replayStartUrl || null;\n this.idleExpires = options.idleExpires || null;\n this.maxExpires = options.maxExpires || null;\n this.replayStartTime = options.replayStartTime || null;\n this.lastEventTimestamp = options.lastEventTimestamp || null;\n this.seqNo = options.seqNo || 0;\n\n this.idleTimeoutId = null;\n this.maxTimeoutId = null;\n\n this.recordMaxMs = MAX_RECORDING_MS;\n this.recordMinMs = 0;\n this._recordMinMsCheckStart = null;\n\n // disable persistence if localStorage is not supported\n // request-queue will automatically disable persistence if indexedDB fails to initialize\n var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence();\n\n // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings\n this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId;\n this.queueStorage = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_EVENTS_STORE_NAME, RECORDER_VERSION_DATA);\n this.batcher = new RequestBatcher(this.batcherKey, {\n errorReporter: this.reportError.bind(this),\n flushOnlyOnInterval: true,\n libConfig: RECORDER_BATCHER_LIB_CONFIG,\n sendRequestFunc: this.flushEventsWithOptOut.bind(this),\n queueStorage: this.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n usePersistence: usePersistence,\n stopAllBatchingFunc: this.stopRecording.bind(this),\n consentGate: this.consentGate,\n\n // increased throttle and shared lock timeout because recording events are very high frequency.\n // this will minimize the amount of lock contention between enqueued events.\n // for session recordings there is a lock for each tab anyway, so there's no risk of deadlock between tabs.\n enqueueThrottleMs: RECORD_ENQUEUE_THROTTLE_MS,\n sharedLockTimeoutMS: 10 * 1000,\n });\n};\n\n/**\n * @returns {UserIdInfo}\n */\nSessionRecording.prototype.getUserIdInfo = function () {\n if (this.finalFlushUserIdInfo) {\n return this.finalFlushUserIdInfo;\n }\n\n var userIdInfo = {\n 'distinct_id': String(this._mixpanel.get_distinct_id()),\n };\n\n // send ID management props if they exist\n var deviceId = this._mixpanel.get_property('$device_id');\n if (deviceId) {\n userIdInfo['$device_id'] = deviceId;\n }\n var userId = this._mixpanel.get_property('$user_id');\n if (userId) {\n userIdInfo['$user_id'] = userId;\n }\n return userIdInfo;\n};\n\nSessionRecording.prototype.unloadPersistedData = function () {\n this.batcher.stop();\n\n return this.queueStorage.init().catch(function () {\n this.reportError('Error initializing IndexedDB storage for unloading persisted data.');\n }.bind(this)).then(function () {\n // if the recording is too short, just delete any stored events without flushing\n if (this.getDurationMs() < this._getRecordMinMs()) {\n return this.queueStorage.removeItem(this.batcherKey);\n }\n\n return this.batcher.flush()\n .then(function () {\n return this.queueStorage.removeItem(this.batcherKey);\n }.bind(this));\n }.bind(this));\n};\n\nSessionRecording.prototype.getConfig = function(configVar) {\n return this._mixpanel.get_config(configVar);\n};\n\nSessionRecording.prototype.startRecording = function (shouldStopBatcher) {\n if (this._rrwebRecord === null) {\n this.reportError('rrweb record function not provided. ');\n return;\n }\n\n if (this._stopRecording !== null) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n this.recordMaxMs = this.getConfig('record_max_ms');\n if (this.recordMaxMs > MAX_RECORDING_MS) {\n this.recordMaxMs = MAX_RECORDING_MS;\n logger.critical('record_max_ms cannot be greater than ' + MAX_RECORDING_MS + 'ms. Capping value.');\n }\n\n if (!this.maxExpires) {\n this.maxExpires = new Date().getTime() + this.recordMaxMs;\n }\n\n this.recordMinMs = this._getRecordMinMs();\n\n if (!this.replayStartTime) {\n this.replayStartTime = new Date().getTime();\n this.batchStartUrl = _.info.currentUrl();\n this.replayStartUrl = _.info.currentUrl();\n }\n\n if (shouldStopBatcher || this.recordMinMs > 0) {\n // the primary case for shouldStopBatcher is when we're starting recording after a reset\n // and don't want to send anything over the network until there's\n // actual user activity\n // this also applies if the minimum recording length has not been hit yet\n // so that we don't send data until we know the recording will be long enough\n this.batcher.stop();\n this._recordMinMsCheckStart = null;\n } else {\n this.batcher.start();\n }\n\n var resetIdleTimeout = function () {\n clearTimeout(this.idleTimeoutId);\n var idleTimeoutMs = this.getConfig('record_idle_timeout_ms');\n this.idleTimeoutId = setTimeout(this._onIdleTimeout, idleTimeoutMs);\n this.idleExpires = new Date().getTime() + idleTimeoutMs;\n }.bind(this);\n resetIdleTimeout();\n\n var blockSelector = this.getConfig('record_block_selector');\n if (blockSelector === '' || blockSelector === null) {\n blockSelector = undefined;\n }\n\n var privacyConfig = getPrivacyConfig(this._mixpanel);\n\n var plugins = [];\n if (this.getConfig('record_network')) {\n var options = this.getConfig('record_network_options') || {};\n // don't track requests to Mixpanel /record API\n var ignoreRequestUrls = (options.ignoreRequestUrls || []).slice();\n ignoreRequestUrls.push(this._getApiRoute());\n options.ignoreRequestUrls = ignoreRequestUrls;\n\n plugins.push(getRecordNetworkPlugin(options));\n }\n\n if (this.getConfig('record_console')) {\n plugins.push(\n getRecordConsolePlugin({\n stringifyOptions: {\n stringLengthLimit: 1000,\n numOfKeysLimit: 50,\n depthOfLimit: 2\n }\n })\n );\n }\n\n var validatedOrigins = validateAllowedOrigins(this.getConfig('record_allowed_iframe_origins'), logger);\n\n try {\n this._stopRecording = this._rrwebRecord({\n 'emit': function (ev) {\n if (this.idleExpires && this.idleExpires < ev.timestamp) {\n this._onIdleTimeout();\n return;\n }\n if (this._recordMinMsCheckStart === null) {\n this._recordMinMsCheckStart = ev.timestamp;\n }\n if (isUserEvent(ev)) {\n if (this.batcher.stopped && ev.timestamp - this._recordMinMsCheckStart >= this.recordMinMs) {\n this.batcher.start();\n }\n resetIdleTimeout();\n }\n // promise only used to await during tests\n this.__enqueuePromise = this.batcher.enqueue(ev);\n\n // Capture the timestamp of the last event for duration calculation.\n if (this.lastEventTimestamp === null || ev.timestamp > this.lastEventTimestamp) {\n this.lastEventTimestamp = ev.timestamp;\n }\n }.bind(this),\n 'blockClass': this.getConfig('record_block_class'),\n 'blockSelector': blockSelector,\n 'collectFonts': this.getConfig('record_collect_fonts'),\n 'dataURLOptions': { // canvas image options (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL)\n 'type': 'image/webp',\n 'quality': 0.6\n },\n // mask all inputs and text by default, unmasking is applied via callbacks maskInputFn and maskTextFn\n 'maskAllInputs': true,\n 'maskTextSelector': '*',\n 'maskInputFn': this._getMaskFn(shouldMaskInput, privacyConfig),\n 'maskTextFn': this._getMaskFn(shouldMaskText, privacyConfig),\n 'recordCrossOriginIframes': validatedOrigins.length > 0,\n 'allowedIframeOrigins': validatedOrigins,\n 'recordCanvas': this.getConfig('record_canvas'),\n 'sampling': {\n 'canvas': 15\n },\n 'plugins': plugins,\n });\n } catch (err) {\n this.reportError('Unexpected error when starting rrweb recording.', err);\n }\n\n if (typeof this._stopRecording !== 'function') {\n this.reportError('rrweb failed to start, skipping this recording.');\n this._stopRecording = null;\n this.stopRecording(); // stop batcher looping and any timeouts\n return;\n }\n\n var maxTimeoutMs = this.maxExpires - new Date().getTime();\n this.maxTimeoutId = setTimeout(this._onMaxLengthReached.bind(this), maxTimeoutMs);\n};\n\nSessionRecording.prototype.stopRecording = function (skipFlush) {\n // store the user ID info in case this is getting called in mixpanel.reset()\n this.finalFlushUserIdInfo = this.getUserIdInfo();\n\n if (!this.isRrwebStopped()) {\n try {\n this._stopRecording();\n } catch (err) {\n this.reportError('Error with rrweb stopRecording', err);\n }\n this._stopRecording = null;\n }\n\n var flushPromise;\n if (this.batcher.stopped) {\n // never got user activity to flush after reset, so just clear the batcher\n flushPromise = this.batcher.clear();\n } else if (!skipFlush) {\n // flush any remaining events from running batcher\n flushPromise = this.batcher.flush();\n }\n this.batcher.stop();\n\n clearTimeout(this.idleTimeoutId);\n clearTimeout(this.maxTimeoutId);\n return flushPromise;\n};\n\nSessionRecording.prototype.isRrwebStopped = function () {\n return this._stopRecording === null;\n};\n\n\n/**\n * Flushes the current batch of events to the server, or stops recording if consent stops the calls.\n */\nSessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) {\n if (!this.consentGate.allowsApiCalls()) {\n this.stopRecording();\n cb({error: 'Tracking has been opted out, stopping recording.'});\n return;\n }\n this._flushEvents(data, options, cb);\n};\n\n/**\n * @returns {SerializedRecording}\n */\nSessionRecording.prototype.serialize = function () {\n // don't break if mixpanel instance was destroyed at some point\n var tabId;\n try {\n tabId = this._mixpanel.get_tab_id();\n } catch (e) {\n this.reportError('Error getting tab ID for serialization ', e);\n tabId = null;\n }\n\n return {\n 'replayId': this.replayId,\n 'seqNo': this.seqNo,\n 'replayStartTime': this.replayStartTime,\n 'batchStartUrl': this.batchStartUrl,\n 'replayStartUrl': this.replayStartUrl,\n 'lastEventTimestamp': this.lastEventTimestamp,\n 'idleExpires': this.idleExpires,\n 'maxExpires': this.maxExpires,\n 'tabId': tabId,\n };\n};\n\n\n/**\n * @static\n * @param {SerializedRecording} serializedRecording\n * @param {SessionRecordingOptions} options\n * @returns {SessionRecording}\n */\nSessionRecording.deserialize = function (serializedRecording, options) {\n var recording = new SessionRecording(_.extend({}, options, {\n replayId: serializedRecording['replayId'],\n batchStartUrl: serializedRecording['batchStartUrl'],\n replayStartUrl: serializedRecording['replayStartUrl'],\n idleExpires: serializedRecording['idleExpires'],\n maxExpires: serializedRecording['maxExpires'],\n replayStartTime: serializedRecording['replayStartTime'],\n lastEventTimestamp: serializedRecording['lastEventTimestamp'],\n seqNo: serializedRecording['seqNo'],\n sharedLockStorage: options.sharedLockStorage,\n }));\n\n return recording;\n};\n\nSessionRecording.prototype._getApiRoute = function () {\n return this.getConfig('api_routes')['record'];\n};\n\n// consent can be withdrawn while the batch is compressed, so it is checked again before sending\nSessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) {\n if (!this.consentGate.allowsApiCalls()) {\n callback(0);\n return;\n }\n var onSuccess = function (response, responseBody) {\n // Update batch specific props only if the request was successful to guarantee ordering.\n // RequestBatcher will always flush the next batch after the previous one succeeds.\n // extra check to see if the replay ID has changed so that we don't increment the seqNo on the wrong replay\n if (response.status === 200 && this.replayId === currentReplayId) {\n this.seqNo++;\n this.batchStartUrl = _.info.currentUrl();\n }\n\n this._onBatchSent();\n callback({\n status: 0,\n httpStatusCode: response.status,\n responseBody: responseBody,\n retryAfter: response.headers.get('Retry-After')\n });\n }.bind(this);\n var apiHost = (this._mixpanel.get_api_host && this._mixpanel.get_api_host('record')) || this.getConfig('api_host');\n window['fetch'](apiHost + '/' + this._getApiRoute() + '?' + new URLSearchParams(reqParams), {\n 'method': 'POST',\n 'headers': {\n 'Authorization': 'Basic ' + btoa(this.getConfig('token') + ':'),\n 'Content-Type': 'application/octet-stream'\n },\n 'body': reqBody,\n }).then(function (response) {\n response.json().then(function (responseBody) {\n onSuccess(response, responseBody);\n }).catch(function (error) {\n callback({error: error});\n });\n }).catch(function (error) {\n callback({error: error, httpStatusCode: 0});\n });\n};\n\nSessionRecording.prototype._flushEvents = function(data, options, callback) {\n var numEvents = data.length;\n\n if (numEvents > 0) {\n var replayId = this.replayId;\n\n // each rrweb event has a timestamp - leverage those to get time properties\n var batchStartTime = Infinity;\n var batchEndTime = -Infinity;\n var hasFullSnapshot = false;\n for (var i = 0; i < numEvents; i++) {\n batchStartTime = Math.min(batchStartTime, data[i].timestamp);\n batchEndTime = Math.max(batchEndTime, data[i].timestamp);\n if (data[i].type === EventType.FullSnapshot) {\n hasFullSnapshot = true;\n }\n }\n\n if (this.seqNo === 0) {\n if (!hasFullSnapshot) {\n callback({error: 'First batch does not contain a full snapshot. Aborting recording.'});\n this.stopRecording(true);\n return;\n }\n this.replayStartTime = batchStartTime;\n } else if (!this.replayStartTime) {\n this.reportError('Replay start time not set but seqNo is not 0. Using current batch start time as a fallback.');\n this.replayStartTime = batchStartTime;\n }\n\n var replayLengthMs = batchEndTime - this.replayStartTime;\n\n var reqParams = {\n '$current_url': this.batchStartUrl,\n '$lib_version': Config.LIB_VERSION,\n 'batch_start_time': batchStartTime / 1000,\n 'mp_lib': 'web',\n 'replay_id': replayId,\n 'replay_length_ms': replayLengthMs,\n 'replay_start_time': this.replayStartTime / 1000,\n 'replay_start_url': this.replayStartUrl,\n 'seq': this.seqNo\n };\n var eventsJson = JSON.stringify(data);\n Object.assign(reqParams, this.getUserIdInfo());\n\n var sendUncompressed = function() {\n reqParams['format'] = 'body';\n this._sendRequest(replayId, reqParams, eventsJson, callback);\n }.bind(this);\n\n if (canUseCompressionStream(userAgent, navigator.vendor, windowOpera)) {\n var jsonStream = new Blob([eventsJson], {type: 'application/json'}).stream();\n var gzipStream = jsonStream.pipeThrough(new CompressionStream('gzip'));\n new Response(gzipStream)\n .blob()\n .then(function(compressedBlob) {\n reqParams['format'] = 'gzip';\n this._sendRequest(replayId, reqParams, compressedBlob, callback);\n }.bind(this), function(err) {\n this.reportError('Error compressing session recording batch; sending uncompressed', err);\n sendUncompressed();\n }.bind(this));\n } else {\n sendUncompressed();\n }\n }\n};\n\n\nSessionRecording.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n try {\n if (!err && !(msg instanceof Error)) {\n msg = new Error(msg);\n }\n this.getConfig('error_reporter')(msg, err);\n } catch(err) {\n logger.error(err);\n }\n};\n\n/**\n * Calculates the duration of the recording in milliseconds, based on the start time and time of last recorded event.\n * @returns {number} The duration of the recording in milliseconds. Returns 0 if recording hasn't started.\n */\nSessionRecording.prototype.getDurationMs = function() {\n if (this.replayStartTime === null) {\n return 0;\n }\n\n // If the recording has no events, assume it is in progress and use the current time as the end time.\n if (this.lastEventTimestamp === null) {\n return new Date().getTime() - this.replayStartTime;\n }\n\n return this.lastEventTimestamp - this.replayStartTime;\n};\n\n/**\n * Lazily loads the minimum recording length config in milliseconds, respecting the maximum limit.\n * @returns {number} The minimum recording length in milliseconds.\n */\nSessionRecording.prototype._getRecordMinMs = function() {\n var configValue = this.getConfig('record_min_ms');\n\n if (configValue > MAX_VALUE_FOR_MIN_RECORDING_MS) {\n logger.critical('record_min_ms cannot be greater than ' + MAX_VALUE_FOR_MIN_RECORDING_MS + 'ms. Capping value.');\n return MAX_VALUE_FOR_MIN_RECORDING_MS;\n }\n\n return configValue;\n};\n\n/**\n * Creates a masking function for rrweb's maskInputFn or maskTextFn\n * @param {(element: HTMLElement, privacyConfig: RecordPrivacyConfig) => boolean} shouldMaskFn - Function that determines if element should be masked\n * @param {RecordPrivacyConfig} privacyConfig - Privacy configuration\n * @returns {(text: string, element: HTMLElement) => string} Function that masks text based on privacy config\n */\nSessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) {\n return function(text, element) {\n // whitespace-only text has nothing to mask, and dropping it would join adjacent words\n // (e.g. a space text node between two inline elements)\n if (!text.trim().length) {\n return text;\n }\n\n var shouldMask = true;\n try {\n shouldMask = shouldMaskFn(element, privacyConfig);\n } catch (err) {\n this.reportError('Error checking if text should be masked, defaulting to masked', err);\n }\n\n if (shouldMask) {\n var textLength = Math.min(text.length, 10000); // limit to 10000 chars to optimize performance\n return '*'.repeat(textLength);\n } else {\n return text;\n }\n }.bind(this);\n};\n\nexport { SessionRecording };\n","import { Promise } from '../promise-polyfill';\nimport { IDBStorageWrapper } from '../storage/indexed-db';\nimport {\n MIXPANEL_BROWSER_DB_NAME,\n RECORDING_REGISTRY_STORE_NAME,\n RECORDER_VERSION_DATA\n} from './idb-config';\nimport { SessionRecording } from './session-recording';\nimport { isRecordingExpired } from './utils';\n\n/**\n * Module for handling the storage and retrieval of recording metadata as well as any active recordings.\n * Makes sure that only one tab can be recording at a time.\n */\nvar RecordingRegistry = function (options) {\n /** @type {IDBStorageWrapper} */\n this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA);\n this.errorReporter = options.errorReporter;\n this.mixpanelInstance = options.mixpanelInstance;\n this.consentGate = options.consentGate;\n this.sharedLockStorage = options.sharedLockStorage;\n};\n\nRecordingRegistry.prototype.isPersistenceEnabled = function() {\n return this.consentGate.allowsPersistence();\n};\n\nRecordingRegistry.prototype.handleError = function (err) {\n this.errorReporter('IndexedDB error: ', err);\n};\n\n/**\n * @param {import('./session-recording').SerializedRecording} serializedRecording\n */\nRecordingRegistry.prototype.setActiveRecording = function (serializedRecording) {\n // a recording that resumes after consent stops storage writes nothing\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve();\n }\n\n var tabId = serializedRecording['tabId'];\n if (!tabId) {\n console.warn('No tab ID is set, cannot persist recording metadata.');\n return Promise.resolve();\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.setItem(tabId, serializedRecording);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\n/**\n * @returns {Promise}\n */\nRecordingRegistry.prototype.getActiveRecording = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve(null);\n }\n\n return this.idb.init()\n .then(function () {\n return this.idb.getItem(this.mixpanelInstance.get_tab_id());\n }.bind(this))\n .then(function (serializedRecording) {\n return isRecordingExpired(serializedRecording) ? null : serializedRecording;\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nRecordingRegistry.prototype.clearActiveRecording = function () {\n // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion.\n // this will ensure the next pageload will flush the remaining events, but not try to continue the recording.\n // without persistence the entry is left as it is, and its unsent events wait for a load that allows them.\n return this.markActiveRecordingExpired();\n};\n\nRecordingRegistry.prototype.markActiveRecordingExpired = function () {\n return this.getActiveRecording()\n .then(function (serializedRecording) {\n if (serializedRecording) {\n serializedRecording['maxExpires'] = 0;\n return this.setActiveRecording(serializedRecording);\n }\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\n/**\n * Flush any inactive recordings from the registry to minimize data loss.\n * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch.\n */\nRecordingRegistry.prototype.flushInactiveRecordings = function () {\n if (!this.isPersistenceEnabled()) {\n return Promise.resolve([]);\n }\n\n return this.idb.init()\n .then(function() {\n return this.idb.getAll();\n }.bind(this))\n .then(function (serializedRecordings) {\n // clean up any expired recordings from the registry, non-expired ones may be active in other tabs\n var unloadPromises = serializedRecordings\n .filter(function (serializedRecording) {\n return isRecordingExpired(serializedRecording);\n })\n .map(function (serializedRecording) {\n var sessionRecording = SessionRecording.deserialize(serializedRecording, {\n mixpanelInstance: this.mixpanelInstance,\n consentGate: this.consentGate,\n sharedLockStorage: this.sharedLockStorage\n });\n return sessionRecording.unloadPersistedData()\n .then(function () {\n // expired recording was successfully flushed, we can clean it up from the registry\n return this.idb.removeItem(serializedRecording['tabId']);\n }.bind(this))\n .catch(this.handleError.bind(this));\n }.bind(this));\n\n return Promise.all(unloadPromises);\n }.bind(this))\n .catch(this.handleError.bind(this));\n};\n\nexport { RecordingRegistry };\n","/**\n * What the services ask before they store or send on their own. A ConsentManager is one; a new\n * storage write or network send must ask it too.\n * @typedef {Object} ConsentGate\n * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and\n * replay methods run\n * @property {function(): boolean} allowsSending whether tracking requests go out\n * @property {function(): boolean} allowsFetching whether feature flags and remote settings are\n * fetched\n * @property {function(): boolean} allowsStoring whether consent allows storing data about the\n * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them\n * @property {function(): boolean} allowsPersistence whether the services may write to browser\n * storage: consent allows storing, and disable_persistence is off. Without it they keep their data\n * in memory.\n */\n\nimport { console } from './utils';\n\n/**\n * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send',\n * 'fetch' or 'store' now\n * @param {function(string): *} getConfigFunc\n * @returns {ConsentGate}\n */\nfunction buildConsentGate(allowsFunc, getConfigFunc) {\n var gate = {\n // if asking throws, the call runs\n allowsApiCalls: function() {\n try {\n return allowsFunc('api_calls');\n } catch (err) {\n console.error('Unexpected error when checking tracking opt-out status: ' + err);\n return true;\n }\n },\n allowsSending: function() {\n return allowsFunc('send');\n },\n allowsFetching: function() {\n return allowsFunc('fetch');\n },\n allowsStoring: function() {\n return allowsFunc('store');\n },\n allowsPersistence: function() {\n return gate.allowsStoring() && !getConfigFunc('disable_persistence');\n }\n };\n return gate;\n}\n\n/**\n * The consent gate the recorder bundle builds when it starts, and hands to its services. The core\n * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name,\n * the bundle being built separately. A core without it only knows the opt-out, through\n * has_opted_out_tracking().\n * @param {Object} mixpanelInstance\n * @returns {ConsentGate}\n */\nfunction consentGateFor(mixpanelInstance) {\n return buildConsentGate(\n function(capability) {\n var consentAllows = mixpanelInstance['_consent_allows'];\n if (typeof consentAllows === 'function') {\n return !!consentAllows.call(mixpanelInstance, capability);\n }\n return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking();\n },\n function(key) {\n return mixpanelInstance.get_config(key);\n }\n );\n}\n\nexport { buildConsentGate, consentGateFor };\n","import { record } from './rrweb-entrypoint';\nimport { Promise } from '../promise-polyfill';\nimport { SessionRecording } from './session-recording';\nimport { RecordingRegistry } from './recording-registry';\nimport { consentGateFor } from '../consent-gate';\n\nimport { console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('recorder');\n\n/**\n * Recorder API: bundles rrweb and and exposes methods to start and stop recordings.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n*/\nvar MixpanelRecorder = function(mixpanelInstance, rrwebRecord, sharedLockStorage) {\n this.mixpanelInstance = mixpanelInstance;\n this.rrwebRecord = rrwebRecord || record;\n this.sharedLockStorage = sharedLockStorage;\n this.consentGate = consentGateFor(mixpanelInstance);\n\n /**\n * @member {import('./registry').RecordingRegistry}\n */\n this.recordingRegistry = new RecordingRegistry({\n mixpanelInstance: this.mixpanelInstance,\n consentGate: this.consentGate,\n errorReporter: logger.error,\n sharedLockStorage: sharedLockStorage\n });\n this._flushInactivePromise = this.recordingRegistry.flushInactiveRecordings();\n\n this.activeRecording = null;\n this.stopRecordingInProgress = false;\n};\n\nMixpanelRecorder.prototype.startRecording = function(options) {\n options = options || {};\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n var onIdleTimeout = function () {\n logger.log('Idle timeout reached, restarting recording.');\n this.resetRecording();\n }.bind(this);\n\n var onMaxLengthReached = function () {\n logger.log('Max recording length reached, stopping recording.');\n this.resetRecording();\n }.bind(this);\n\n var onBatchSent = function () {\n this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n this['__flushPromise'] = this.activeRecording.batcher._flushPromise;\n }.bind(this);\n\n /**\n * @type {import('./session-recording').SessionRecordingOptions}\n */\n var sessionRecordingOptions = {\n mixpanelInstance: this.mixpanelInstance,\n consentGate: this.consentGate,\n onBatchSent: onBatchSent,\n onIdleTimeout: onIdleTimeout,\n onMaxLengthReached: onMaxLengthReached,\n replayId: _.UUID(),\n rrwebRecord: this.rrwebRecord,\n sharedLockStorage: this.sharedLockStorage\n };\n\n if (options.activeSerializedRecording) {\n this.activeRecording = SessionRecording.deserialize(options.activeSerializedRecording, sessionRecordingOptions);\n } else {\n this.activeRecording = new SessionRecording(sessionRecordingOptions);\n }\n\n this.activeRecording.startRecording(options.shouldStopBatcher);\n return this.recordingRegistry.setActiveRecording(this.activeRecording.serialize());\n};\n\nMixpanelRecorder.prototype.stopRecording = function() {\n // Prevents activeSerializedRecording from being reused when stopping the recording.\n this.stopRecordingInProgress = true;\n return this._stopCurrentRecording(false, true).then(function() {\n return this.recordingRegistry.clearActiveRecording();\n }.bind(this)).then(function() {\n this.stopRecordingInProgress = false;\n }.bind(this));\n};\n\nMixpanelRecorder.prototype.pauseRecording = function() {\n return this._stopCurrentRecording(false);\n};\n\nMixpanelRecorder.prototype._stopCurrentRecording = function(skipFlush, disableActiveRecording) {\n if (this.activeRecording) {\n var stopRecordingPromise = this.activeRecording.stopRecording(skipFlush);\n if (disableActiveRecording) {\n this.activeRecording = null;\n }\n return stopRecordingPromise;\n }\n return Promise.resolve();\n};\n\nMixpanelRecorder.prototype.resumeRecording = function (startNewIfInactive) {\n if (this.activeRecording && this.activeRecording.isRrwebStopped()) {\n this.activeRecording.startRecording(false);\n return Promise.resolve(null);\n }\n\n return this.recordingRegistry.getActiveRecording()\n .then(function (activeSerializedRecording) {\n if (activeSerializedRecording && !this.stopRecordingInProgress) {\n return this.startRecording({activeSerializedRecording: activeSerializedRecording});\n } else if (startNewIfInactive) {\n return this.startRecording({shouldStopBatcher: false});\n } else {\n logger.log('No resumable recording found.');\n return null;\n }\n }.bind(this));\n};\n\n\nMixpanelRecorder.prototype.resetRecording = function () {\n this.stopRecording();\n this.startRecording({shouldStopBatcher: true});\n};\n\nMixpanelRecorder.prototype.isRecording = function () {\n return this.activeRecording && !this.activeRecording.isRrwebStopped();\n};\n\nMixpanelRecorder.prototype.getActiveReplayId = function () {\n if (this.isRecording()) {\n return this.activeRecording.replayId;\n } else {\n return null;\n }\n};\n\n// getter so that older mixpanel-core versions can still retrieve the replay ID\n// when pulling the latest recorder bundle from the CDN\nObject.defineProperty(MixpanelRecorder.prototype, 'replayId', {\n get: function () {\n return this.getActiveReplayId();\n }\n});\n\n\nexport { MixpanelRecorder };\n","import { window } from '../window';\nimport { RECORDER_GLOBAL_NAME } from '../config';\nimport { MixpanelRecorder } from './recorder';\n\nwindow[RECORDER_GLOBAL_NAME] = MixpanelRecorder;\n"],"names":["win","loc","Config","RECORDER_GLOBAL_NAME","_array_like_to_array","arr","len","i","arr2","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_async_to_generator","fn","self","args","err","_construct","Parent","Class","_is_native_reflect_construct","Constructor","instance","_set_prototype_of","_defineProperties","target","props","descriptor","_create_class","protoProps","staticProps","_extends","source","_get_prototype_of","o","_inherits","subClass","superClass","_instanceof","left","right","_is_native_function","_object_without_properties_loose","excluded","sourceKeys","p","_type_of","obj","_unsupported_iterable_to_array","minLen","n","_wrap_native_super","_cache","Wrapper","result","_","_create_for_of_iterator_helper_loose","allowArrayLike","it","_ts_generator","thisArg","body","f","y","g","verb","v","step","op","e","_ts_values","s","m","__defProp$1","__defNormalProp$1","__publicField$1","_a","__defProp$1$1","__defNormalProp$1$1","__publicField$1$1","NodeType$3","NodeType2","testableAccessors$1","testableMethods$1","untaintedBasePrototype$1","isAngularZonePresent$1","getUntaintedPrototype$1","defaultObj","defaultPrototype","accessorNames","isUntaintedAccessors","accessor","_a2","_b","methodNames","isUntaintedMethods","method","iframeEl","untaintedObject","untaintedAccessorCache$1","getUntaintedAccessor$1","cacheKey","untaintedPrototype","untaintedAccessor","untaintedMethodCache$1","getUntaintedMethod$1","untaintedMethod","childNodes$1","n2","parentNode$1","parentElement$1","textContent$1","contains$1","other","getRootNode$1","host$1","styleSheets$1","shadowRoot$1","querySelector$1","selectors","querySelectorAll$1","mutationObserverCtor$1","patch$1$1","name","replacement","original","wrapped","index$1","isElement","isShadowRoot","hostEl","isNativeShadowDom","shadowRoot2","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule2","statement","stringifyStylesheet","s2","rules2","sheetHref","stringifiedRules","stringifyRule","isCSSImportRule","importStringified","absolutifyURLs","ruleStringified","isCSSStyleRule","fixSafariColons","cssStringified","regex","Mirror","_proto","id","permanent","_this","childNode","node2","meta","oldNode","createMirror$2","maskInputValue","param","element","maskInputOptions","tagName","type","maskInputFn","text","actualType","toLowerCase","str","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","ctx","chunkSize","x2","getImageData","originalGetImageData","pixelBuffer","pixel","getInputType","extractFileExtension","path","baseURL","url","match","_ref","extractOrigin","origin","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","parts","_iterator","_step","part","normalizeCssString","_testNoPxNorm","splitCssText","style","childNodes2","splits","iterCount","cssTextNorm","normFactor","i2","textContentNorm","jLimit","j","startSubstring","cssNormSplits","splitNorm","prevTextContent","prevMinLength","k","normPart","markCssSplits","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName$1","processedTagName","canvasService","canvasCtx","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars2","output","absoluteToDoc","descriptorsStr","inParens","c2","cachedDocument","getHref","isSVGElement","el","customHref","a2","transformAttribute","ignoreAttribute","_value","_isBlockedElement","blockClass","blockSelector","eIndex","className","e2","classMatchesRegex$1","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","listener","iframeLoadTimeout","fired","readyState","timer","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","options","mirror2","needsMask","inlineStylesheet","_options_maskInputOptions","maskTextFn","_options_dataURLOptions","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","_options_newlyAddedElement","newlyAddedElement","_options_cssCaptured","cssCaptured","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parent","parentTagName","textContent2","isStyle","isScript","needBlock","attributes","attr","stylesheet","cssText1","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","imageSrc","priorCrossOrigin","recordInlineImage","mediaAttributes","_n2_getBoundingClientRect","width","height","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","_options_skipChild","skipChild","_options_inlineStylesheet","_options_inlineImages","_options_recordCanvas","onSerialize","onIframeLoad","_options_iframeLoadTimeout","onStylesheetLoad","_options_stylesheetLoadTimeout","stylesheetLoadTimeout","_options_keepIframeSrcFn","_options_preserveWhiteSpace","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","shadowRootEl","bypassOptions","childN","serializedChildNode","shadowRootEl1","_iterator1","_step1","childN1","serializedChildNode1","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","tmp","_ref_blockClass","_ref_blockSelector","_ref_maskTextClass","_ref_maskTextSelector","_ref_inlineStylesheet","_ref_inlineImages","_ref_recordCanvas","_ref_maskAllInputs","maskAllInputs","_ref_slimDOM","slimDOM","_ref_keepIframeSrcFn","getDefaultExportFromCjs$1","getAugmentedNamespace$1","f2","a22","d","picocolors_browser$1","x$1","create$1","picocolors_browserExports$1","__viteBrowserExternal$2","__viteBrowserExternal$1$1","require$$2$1","pico$1","terminalHighlight$1$1","CssSyntaxError$3$1","Error1","CssSyntaxError","message","line","column","file","plugin22","color","css","lines","start","end","maxWidth","mark","aside","_pico$1_createColors","bold","gray","red","index2","number","gutter","spacing","code","cssSyntaxError$1","symbols$1","DEFAULT_RAW$1","capitalize$1","Stringifier$2$1","Stringifier","builder","semicolon","params","detect","buf","depth","indent","between","after","last","child","before","string","own","root2","prop","raw","stringifier$1","Stringifier$1$1","stringify$4$1","stringify_1$1","isClean$2$1","my$2$1","CssSyntaxError$2$1","Stringifier2$1","stringify$3$1","cloneNode$1","cloned","Node$4$1","Node2","defaults","add","overrides","keepBetween","opts","_this_rangeBy","next","stringRepresentation","defaultType","_len","nodes","_key","bookmark","foundSelf","result2","inputs","fixed","emitInputs","inputsNextIndex","inputId","input2","stringifier2","data","node$1","Node$3$1","Declaration$4$1","Declaration","declaration$1","urlAlphabet$1","nanoid$1$1","size","nonSecure$1","SourceMapConsumer$2$1","SourceMapGenerator$2$1","existsSync$1","readFileSync$1","dirname$1$1","join$1","fromBase64$1","PreviousMap$2$1","PreviousMap","prev","baseCharsetUri","baseUri","charsetUri","uri","encoding","sourceMapString","map","comments","prevPath","map1","previousMap$1","SourceMapConsumer$1$1","SourceMapGenerator$1$1","fileURLToPath$1","pathToFileURL$1$1","isAbsolute$1","resolve$1$1","nanoid$2","terminalHighlight$2","CssSyntaxError$1$1","PreviousMap$1$1","fromOffsetCache$1","sourceMapAvailable$1$1","pathAvailable$1$1","Input$4$1","Input","endLine","endColumn","pos1","pos2","offset","lastLine","lineToIndex","prevIndex","l2","min","max","mid","consumer","from","to","fromUrl","json","_i","_iter","input$1","SourceMapConsumer$3","SourceMapGenerator$3","dirname$2","relative$1","resolve$2","sep$1","pathToFileURL$2","Input$3$1","sourceMapAvailable$2","pathAvailable$2","MapGenerator$2$1","MapGenerator","stringify2","cssString","content","eol","noSource","mapping","childless","annotation","cached","already","fileURL","mapGenerator$1","Node$2$1","Comment$4$1","Comment","comment$1","isClean$1$1","my$1$1","Declaration$3$1","Comment$3$1","Node$1$1","parse$4$1","Rule$4$1","AtRule$4$1","Root$6$1","cleanSource$1","markDirtyUp$1","Container$7$1","Container","children","callback","iterator","condition","_node2","cb","exist","existIndex","sample","i21","processed","pattern","decl","selector","dependant","container$1","Container$6$1","LazyResult$4$1","Processor$3$1","Document$3$1","Document2","lazy","document$1$1","printed$1","warnOnce$2$1","Warning$2$1","Warning","range","opt","warning$1","Warning$1$1","Result$3$1","Result","processor2","warning2","result$1","SINGLE_QUOTE$1","DOUBLE_QUOTE$1","BACKSLASH$1","SLASH$1","NEWLINE$1","SPACE$1","FEED$1","TAB$1","CR$1","OPEN_SQUARE$1","CLOSE_SQUARE$1","OPEN_PARENTHESES$1","CLOSE_PARENTHESES$1","OPEN_CURLY$1","CLOSE_CURLY$1","SEMICOLON$1","ASTERISK$1","COLON$1","AT$1","RE_AT_END$1","RE_WORD_END$1","RE_BAD_BRACKET$1","RE_HEX_ESCAPE$1","tokenize$1","ignore","quote","escape","escaped","escapePos","currentToken","length","buffer","returned","position","unclosed","what","endOfFile","nextToken","ignoreUnclosed","controlChar","back","token","Container$5$1","AtRule$3$1","AtRule","_Container$5$1_prototype_append","_Container$5$1_prototype_prepend","atRule$1","Container$4$1","LazyResult$3$1","Processor$2$1","Root$5$1","Root","root$1","list$2$1","spaces","separators","array","current","split","func","inQuote","prevQuote","letter","list_1$1","Container$3$1","list$1$1","Rule$3$1","Rule","values","sep2","rule$1","Declaration$2$1","tokenizer2$1","Comment$2$1","AtRule$2$1","Root$4$1","Rule$2$1","SAFE_COMMENT_NEIGHBOR$1","findLastWithPosition$1","tokens","Parser$1$1","Parser","shift","open","brackets","colon","founded","_step_value","customProperty","firstSpaces","cache","type1","hasWord","bracket","clean","all","lastTokenType","parser$1","Container$2$1","Parser2$1","Input$2$1","parse$3$1","parser2","parse_1$1","isClean$3","my$3","MapGenerator$1$1","stringify$2$1","Container$1$1","Document$2$1","warnOnce$1$1","Result$2$1","parse$2$1","Root$3$1","TYPE_TO_CLASS_NAME$1","PLUGIN_PROPS$1","NOT_VISITORS$1","CHILDREN$1","isPromise$1","getEvents$1","toStack$1","events","cleanMarks$1","postcss$2$1","LazyResult$2$1","LazyResult","onRejected","onFinally","pluginName","pluginVer","runtimeVer","b","event","filter","promise","promise1","_loop","_state","visitor","roots","subRoot","onFulfilled","visitors","visit2","_visitors_visit2_visitorIndex","lazyResult$1","MapGenerator2$1","stringify$1$1","warnOnce2$1","parse$1$1","Result$1$1","NoWorkResult$1$1","NoWorkResult","_map_generate","generatedCSS","generatedMap","noWorkResult$1","NoWorkResult2$1","LazyResult$1$1","Document$1$1","Root$2$1","Processor$1$1","Processor","plugins","normalized","processor$1","Declaration$1$1","PreviousMap2$1","Comment$1$1","AtRule$1$1","Input$1$1","Root$1$1","Rule$1$1","fromJSON$1$1","ownInputs","inputHydrated","_defaults_source","fromJSON_1$1","CssSyntaxError2$1","Declaration2$1","LazyResult2$1","Container2$1","Processor2$1","stringify$5$1","fromJSON$2","Document22","Warning2$1","Comment2$1","AtRule2$1","Result2$1","Input2$1","parse$5","list$3","Rule2$1","Root2$1","Node2$1","postcss$3","initializer","warningPrinted","creator","transformer","processOpts","pluginOpts","postcss_1$1","postcss$1$1","__defProp2","__defNormalProp2","__publicField2","getDefaultExportFromCjs$2","getAugmentedNamespace$2","picocolors_browser$2","x$2","create$2","picocolors_browserExports$2","__viteBrowserExternal$3","__viteBrowserExternal$1$2","require$$2$2","pico$2","terminalHighlight$1$2","CssSyntaxError$3$2","CssSyntaxError2","_pico$2_createColors","cssSyntaxError$2","symbols$2","DEFAULT_RAW$2","capitalize$2","Stringifier$2$2","Stringifier2","stringifier$2","Stringifier$1$2","stringify$4$2","stringify_1$2","isClean$2$2","my$2$2","CssSyntaxError$2$2","Stringifier22","stringify$3$2","cloneNode$2","Node$4$2","Node3","node$2","Node$3$2","Declaration$4$2","Declaration2","declaration$2","urlAlphabet$2","nanoid$1$2","nonSecure$2","SourceMapConsumer$2$2","SourceMapGenerator$2$2","existsSync$2","readFileSync$2","dirname$1$2","join$2","fromBase64$2","PreviousMap$2$2","PreviousMap2","previousMap$2","SourceMapConsumer$1$2","SourceMapGenerator$1$2","fileURLToPath$2","pathToFileURL$1$2","isAbsolute$2","resolve$1$2","nanoid$3","terminalHighlight$3","CssSyntaxError$1$2","PreviousMap$1$2","fromOffsetCache$2","sourceMapAvailable$1$2","pathAvailable$1$2","Input$4$2","Input2","input$2","SourceMapConsumer$4","SourceMapGenerator$4","dirname$3","relative$2","resolve$3","sep$2","pathToFileURL$3","Input$3$2","sourceMapAvailable$3","pathAvailable$3","MapGenerator$2$2","MapGenerator2","mapGenerator$2","Node$2$2","Comment$4$2","Comment2","comment$2","isClean$1$2","my$1$2","Declaration$3$2","Comment$3$2","Node$1$2","parse$4$2","Rule$4$2","AtRule$4$2","Root$6$2","cleanSource$2","markDirtyUp$2","Container$7$2","Container2","container$2","Container$6$2","LazyResult$4$2","Processor$3$2","Document$3$2","Document23","document$1$2","printed$2","warnOnce$2$2","Warning$2$2","Warning2","warning$2","Warning$1$2","Result$3$2","Result2","result$2","SINGLE_QUOTE$2","DOUBLE_QUOTE$2","BACKSLASH$2","SLASH$2","NEWLINE$2","SPACE$2","FEED$2","TAB$2","CR$2","OPEN_SQUARE$2","CLOSE_SQUARE$2","OPEN_PARENTHESES$2","CLOSE_PARENTHESES$2","OPEN_CURLY$2","CLOSE_CURLY$2","SEMICOLON$2","ASTERISK$2","COLON$2","AT$2","RE_AT_END$2","RE_WORD_END$2","RE_BAD_BRACKET$2","RE_HEX_ESCAPE$2","tokenize$2","Container$5$2","AtRule$3$2","AtRule2","_Container$5$2_prototype_append","_Container$5$2_prototype_prepend","atRule$2","Container$4$2","LazyResult$3$2","Processor$2$2","Root$5$2","Root2","root$2","list$2$2","list_1$2","Container$3$2","list$1$2","Rule$3$2","Rule2","rule$2","Declaration$2$2","tokenizer22","Comment$2$2","AtRule$2$2","Root$4$2","Rule$2$2","SAFE_COMMENT_NEIGHBOR$2","findLastWithPosition$2","Parser$1$2","Parser2","parser$2","Container$2$2","Parser22","Input$2$2","parse$3$2","parse_1$2","isClean$4","my$4","MapGenerator$1$2","stringify$2$2","Container$1$2","Document$2$2","warnOnce$1$2","Result$2$2","parse$2$2","Root$3$2","TYPE_TO_CLASS_NAME$2","PLUGIN_PROPS$2","NOT_VISITORS$2","CHILDREN$2","isPromise$2","getEvents$2","toStack$2","cleanMarks$2","postcss$2$2","LazyResult$2$2","LazyResult2","lazyResult$2","MapGenerator22","stringify$1$2","warnOnce22","parse$1$2","Result$1$2","NoWorkResult$1$2","NoWorkResult2","noWorkResult$2","NoWorkResult22","LazyResult$1$2","Document$1$2","Root$2$2","Processor$1$2","Processor2","processor$2","Declaration$1$2","PreviousMap22","Comment$1$2","AtRule$1$2","Input$1$2","Root$1$2","Rule$1$2","fromJSON$1$2","fromJSON_1$2","CssSyntaxError22","Declaration22","LazyResult22","Container22","Processor22","stringify$6","fromJSON$3","Document222","Warning22","Comment22","AtRule22","Result22","Input22","parse$6","list$4","Rule22","Root22","Node22","postcss$4","postcss_1$2","postcss$1$2","BaseRRNode","_args","_newChild","_refChild","_node","childIterator","testableAccessors$2","testableMethods$2","untaintedBasePrototype$2","isAngularZonePresent$2","getUntaintedPrototype$2","untaintedAccessorCache$2","getUntaintedAccessor$2","untaintedMethodCache$2","getUntaintedMethod$2","childNodes$2","parentNode$2","parentElement$2","textContent$2","contains$2","getRootNode$2","host$2","styleSheets$2","shadowRoot$2","querySelector$2","querySelectorAll$2","mutationObserverCtor$2","patch$2","index$2","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","receiver","throttle","wait","timeout","previous","now","remaining","context","hookSetter","isRevoked","nowTimestamp","getWindowScroll","_c","_d","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill$1","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","_this_styleIDMap_get","newId","getShadowHost","shadowHost","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","NodeType","isNodeInLinkedList","DoubleLinkedList","current1","moveKey","parentId","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","parentTag","currentN","iframe","childSn","removedNode","isParentRemoved","n21","isAncestorInSet","candidate","tailNode","parentId1","nextId1","unhandledNode","parentId2","payload","attribute","diffAsStr","unchangedAsStr","textarea","item","cn","attributeName","value1","old","pname","newValue","newPriority","pname1","nodeId","deepDelete","processRemoves","targetId","addsSet","queue","n22","removes","_isParentRemoved","_mirror2","set","_isAncestorInSet","errorHandler","registerErrorHandler","handler","unregisterErrorHandler","callbackWrapper","rrwebWrapped","rest","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","observer","removeMutationBufferForDoc","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","updatePosition","evt","clientX","clientY","handlers","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","eventName","h","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","param1","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","text2","v2","lastInputValue","currentWindow","propertyDescriptor","hookProperties","_handlers","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","rules21","index21","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","argumentsList","_getIdAndStyleId","styleBlock","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","host2","hostId","patchTarget","originalPropertyDescriptor","_a3","sheets","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","loop","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","selectionCb","collapsed","updateSelection","selection","ranges","count","startContainer","startOffset","endContainer","endOffset","blocked","initCustomElementObserver","customElementCb","constructor","mergeHooks","o2","hooks","mutationCb","canvasMutationCb","_hooks","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin3","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","ids","IframeManager","cleanup","storedDoc","observerCleanup","crossOriginMessageEvent","iframeSourceWindow","transformedEvent","iframeMirror","keys","ShadowDomManager","iframeElement","manager","option","sRoot","chars","lookup","i$1","encode","arraybuffer","bytes","base64","canvasVarMap","variableListFor$1","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","list2","serializeArg","name1","name2","name3","src","name4","src1","name5","name6","serializeArgs","webGLConstructorNames","supportedWebGLConstructorNames","initCanvas2DMutationObserver","recordArgs","hookHandler","props2D","getNormalizedContextName","contextType","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","patchGLPrototype","prototype","mutation","initCanvasWebGLMutationObserver","_handlers1","encodedJs","decodeBase64","blob","WorkerWrapper","objURL","worker","CanvasManager","newFrame","_options_sampling","fps","canvasContextReset","snapshotInProgressMap","_e2_data","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","timestamp","_this1","bitmap","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","_values","valuesWithType","StylesheetManager","linkEl","styles","r2","adoptedStyleSheetData","styleEl","_linkEl","ProcessedNodeManager","thisBuffer","buffers","toOrigin","buildAllowedOriginSet","origins","entry","wrappedEmit","takeFullSnapshot$1","canvasManager","recording","cleanFrame","mirror","record","emit","checkoutEveryNms","checkoutEveryNth","_options_blockClass","_options_blockSelector","_options_ignoreClass","_options_ignoreSelector","_options_maskTextClass","_options_maskTextSelector","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","_options_recordDOM","recordDOM","_options_recordCrossOriginIframes","recordCrossOriginIframes","allowedIframeOrigins","_options_recordAfter","recordAfter","_options_userTriggeredOnInput","_options_collectFonts","collectFonts","_options_ignoreCSSAttributes","errorHandler2","validatedOrigins","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","targetOrigin","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","shadowDomManager","observe","iframeHandler","existingCleanup","idx","init","msg","tag","t2","testableAccessors","testableMethods","untaintedBasePrototype","isAngularZonePresent","getUntaintedPrototype","untaintedAccessorCache","getUntaintedAccessor","untaintedMethodCache","getUntaintedMethod","childNodes","parentNode","parentElement","textContent","contains","getRootNode","host","styleSheets","shadowRoot","querySelector","querySelectorAll","mutationObserverCtor","patch$1","index","classMatchesRegex","getDefaultExportFromCjs","getAugmentedNamespace","a","picocolors_browser","x","create","picocolors_browserExports","__viteBrowserExternal","__viteBrowserExternal$1","require$$2","pico","terminalHighlight$1","CssSyntaxError$3","plugin2","_pico_createColors","cssSyntaxError","symbols","DEFAULT_RAW","capitalize","Stringifier$2","stringifier","Stringifier$1","stringify$4","stringify_1","isClean$2","my$2","CssSyntaxError$2","stringify$3","cloneNode","Node$4","Node1","node","Node$3","Declaration$4","declaration","urlAlphabet","nanoid$1","nonSecure","SourceMapConsumer$2","SourceMapGenerator$2","existsSync","readFileSync","dirname$1","join","fromBase64","PreviousMap$2","previousMap","SourceMapConsumer$1","SourceMapGenerator$1","fileURLToPath","pathToFileURL$1","isAbsolute","resolve$1","nanoid","terminalHighlight","CssSyntaxError$1","PreviousMap$1","fromOffsetCache","sourceMapAvailable$1","pathAvailable$1","Input$4","l","input","SourceMapConsumer","SourceMapGenerator","dirname","relative","sep","pathToFileURL","Input$3","sourceMapAvailable","pathAvailable","MapGenerator$2","mapGenerator","Node$2","Comment$4","comment","isClean$1","my$1","Declaration$3","Comment$3","Node$1","parse$4","Rule$4","AtRule$4","Root$6","cleanSource","markDirtyUp","Container$7","i1","container","Container$6","LazyResult$4","Processor$3","Document$3","Document","document$1","printed","warnOnce$2","Warning$2","warning","Warning$1","Result$3","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","tokenize","Container$5","AtRule$3","_Container$5_prototype_append","_Container$5_prototype_prepend","atRule","Container$4","LazyResult$3","Processor$2","Root$5","root","list$2","list_1","Container$3","list$1","Rule$3","rule","Declaration$2","tokenizer2","Comment$2","AtRule$2","Root$4","Rule$2","SAFE_COMMENT_NEIGHBOR","findLastWithPosition","Parser$1","parser","Container$2","Input$2","parse$3","parse_1","isClean","my","MapGenerator$1","stringify$2","Container$1","Document$2","warnOnce$1","Result$2","parse$2","Root$3","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","NOT_VISITORS","CHILDREN","isPromise","getEvents","toStack","cleanMarks","postcss$2","LazyResult$2","lazyResult","stringify$1","warnOnce2","parse$1","Result$1","NoWorkResult$1","noWorkResult","LazyResult$1","Document$1","Root$2","Processor$1","processor","Declaration$1","Comment$1","AtRule$1","Input$1","Root$1","Rule$1","fromJSON$1","fromJSON_1","stringify$5","fromJSON","parse","list","postcss","postcss_1","postcss$1","__defProp","__defNormalProp","__publicField","patch","StackFrame","lineNumber","columnNumber","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","ErrorStackParser","urlLike","regExp","filtered","sanitizedLine","location","locationParts","functionName","fileName","functionNameRegex","matches","lineRE","functionCall","pathToSelector","domSiblings","sibling","isObject","isObjTooDeep","limit","stringify","stringifyOptions","thisPos","shouldIgnore","toString","eventResult","eventValue","_obj","defaultLogOptions","initLogObserver","logOptions","loggerType","logger","logCount","inStack","cancelHandlers","trace","stackFrame","unhandledrejectionHandler","levelType","_logger","level","argsForPayload","PLUGIN_NAME","getRecordConsolePlugin","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","val","config","first","Item","schedule","isThenable","_then","oType","notify","notifyIsolated","chain","ret","defWrapper","MakeDefWrapper","iteratePromises","resolver","rejecter","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","msgs","PromisePolyfill","MAX_RECORDING_MS","MAX_VALUE_FOR_MIN_RECORDING_MS","ArrayProto","FuncProto","ObjProto","slice","hasOwnProperty","windowConsole","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","console","log_func_with_prefix","prefix","console_with_prefix","bound","iterable","results","found","needle","subclass","superclass","encoded","pad","mixed_val","escapable","c","holder","gap","mind","partial","at","ch","escapee","hex","uffff","white","word","object","b64","o1","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","stringl","c1","uuid","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","regexS","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","getElementsBySelector","foundCount","elements","currentContextIndex","currentContext","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","extra_props","batchedThrottle","waitMs","timeoutPromise","throttledItems","Promise","returnValue","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","tld","isOnline","onLine","NOOP_FUNC","urlMatchesRegexList","regexList","JSONStringify","JSONParse","canUseCompressionStream","version","IDBStorageWrapper","dbName","storeName","versionData","storeNamesInDb","createIfMissing","openRequest","ev","db","databases","dbOrError","mode","storeCb","doTransaction","transaction","objectStore","req","MIXPANEL_BROWSER_DB_NAME","RECORDING_EVENTS_STORE_NAME","RECORDING_REGISTRY_STORE_NAME","RECORDER_VERSION_DATA","SharedLock","lockedCB","pid","startTime","pollIntervalMS","timeoutMS","keyX","keyY","keyZ","delay","waitFor","predicate","getSetY","valY","criticalSection","removeLock","LocalStorageWrapper","storageOverride","RequestQueue","storageKey","queueEntry","flushInterval","queueEntries","enqueueItem","storedQueue","succeeded","batchSize","batch","idsInBatch","filterOutIDsAndInvalid","items","idSet","filteredItems","removeFromStorage","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","MAX_RETRY_INTERVAL_MS","RequestBatcher","flushMS","currentBatchSize","attemptSecondaryFlush","dataForRequest","transformedItems","addPayload","itemId","removeItemsFromQueue","batchSendCallback","res","retryMS","halvedBatchSize","requestOptions","isRecordingExpired","serializedRecording","RECORD_ENQUEUE_THROTTLE_MS","validateAllowedOrigins","valid","elementLooksSensitive","sensitiveNameRegex","COMMON_MASK_CLASSES_SELECTOR","RRWEB_PASSWORD_ATTRIBUTE","ALWAYS_MASKED_INPUT_TYPES","normalizeSelectors","getPrivacyConfig","mixpanelInstance","privacyConfig","maskInputSelector","unmaskInputSelector","unmaskTextSelector","maskAllText","legacyMaskTextClass","textMaskingSelectors","classSelector","elementMatchesSelector","shouldMaskInput","inputType","autocomplete","shouldMaskText","getTimeOrigin","defaultNetworkOptions","isNavigationTiming","isResourceTiming","findLast","replacementFactory","MAX_BODY_SIZE","truncateBody","initPerformanceObserver","initialPerformanceEntries","entries","performanceEntries","shouldRecordHeader","recordHeaders","headerName","shouldRecordBody","recordBodyUrls","tryReadXHRBody","tryReadFetchBody","txt","reason","getRequestPerformanceEntry","initiatorType","attempt","urlPerformanceEntries","performanceEntry","initXhrObserver","restorePatch","originalOpen","async","username","password","xhr","networkRequest","requestHeaders","originalSetRequestHeader","header","originalSend","responseHeaders","rawHeaders","headers","colonIndex","request","buildRecordedRequest","initFetchObserver","originalFetch","originalFetchPromise","requestBodyPromise","responseBodyResolve","responseBodyPromise","response","initNetworkObserver","networkOptions","requests","shouldIgnoreUrl","performanceObserver","xhrObserver","fetchObserver","NETWORK_PLUGIN_NAME","getRecordNetworkPlugin","CompressionStream","RECORDER_BATCHER_LIB_CONFIG","ACTIVE_SOURCES","isUserEvent","SessionRecording","usePersistence","userIdInfo","deviceId","userId","configVar","shouldStopBatcher","resetIdleTimeout","idleTimeoutMs","ignoreRequestUrls","maxTimeoutMs","skipFlush","flushPromise","tabId","currentReplayId","reqParams","reqBody","onSuccess","responseBody","apiHost","numEvents","replayId","batchStartTime","batchEndTime","hasFullSnapshot","replayLengthMs","eventsJson","sendUncompressed","jsonStream","gzipStream","compressedBlob","configValue","shouldMaskFn","shouldMask","textLength","RecordingRegistry","serializedRecordings","unloadPromises","sessionRecording","buildConsentGate","allowsFunc","getConfigFunc","gate","consentGateFor","capability","consentAllows","MixpanelRecorder","rrwebRecord","sharedLockStorage","onIdleTimeout","onMaxLengthReached","onBatchSent","sessionRecordingOptions","disableActiveRecording","stopRecordingPromise","startNewIfInactive","activeSerializedRecording"],"mappings":"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"} \ No newline at end of file diff --git a/dist/mixpanel-targeting.js b/dist/mixpanel-targeting.js index e2a0cb79..e6772cac 100644 --- a/dist/mixpanel-targeting.js +++ b/dist/mixpanel-targeting.js @@ -27,7 +27,7 @@ } var Config = { - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules diff --git a/dist/mixpanel-targeting.min.js b/dist/mixpanel-targeting.min.js index c51c4583..efa13f7c 100644 --- a/dist/mixpanel-targeting.min.js +++ b/dist/mixpanel-targeting.min.js @@ -1,2 +1,2 @@ -(function(){"use strict";var m;if(typeof window=="undefined"){var K={hostname:""};m={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:K,referrer:""},screen:{width:0,height:0},location:K,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else m=window;var Oe={LIB_VERSION:"2.84.0"},be="__mp_targeting",Q=m.setImmediate,S,$,R,X=Object.prototype.toString,Ee=typeof Q!="undefined"?function(r){return Q(r)}:setTimeout;try{Object.defineProperty({},"x",{}),S=function(r,i,n,u){return Object.defineProperty(r,i,{value:n,writable:!0,configurable:u!==!1})}}catch(e){S=function(i,n,u){return i[n]=u,i}}R=(function(){var r,i,n;function u(t,o){this.fn=t,this.self=o,this.next=void 0}return{add:function(o,s){n=new u(o,s),i?i.next=n:r=n,i=n,n=void 0},drain:function(){var o=r;for(r=i=$=void 0;o;)o.fn.call(o.self),o=o.next}}})();function I(e,r){R.add(e,r),$||($=Ee(R.drain))}function Z(e){var r,i=typeof e;return e!==null&&(i==="object"||i==="function")&&(r=e.then),typeof r=="function"?r:!1}function j(){for(var e=0;e0&&I(j,i))}catch(n){P.call(new ee(i),n)}}}function P(e){var r=this;r.triggered||(r.triggered=!0,r.def&&(r=r.def),r.msg=e,r.state=2,r.chain.length>0&&I(j,r))}function Y(e,r,i,n){for(var u=0;u0&&(r[n]=i)}),r},a.truncate=function(e,r){var i;return typeof e=="string"?i=e.slice(0,r):a.isArray(e)?(i=[],a.each(e,function(n){i.push(a.truncate(n,r))})):a.isObject(e)?(i={},a.each(e,function(n,u){i[u]=a.truncate(n,r)})):i=e,i},a.JSONEncode=(function(){return function(e){var r=e,i=function(u){var t=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,o={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return t.lastIndex=0,t.test(u)?'"'+u.replace(t,function(s){var f=o[s];return typeof f=="string"?f:"\\u"+("0000"+s.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+u+'"'},n=function(u,t){var o="",s=" ",f=0,l="",h="",g=0,c=o,d=[],p=t[u];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(u)),typeof p){case"string":return i(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(o+=s,d=[],N.apply(p)==="[object Array]"){for(g=p.length,f=0;f="0"&&r<="9";)p+=r,t();if(r===".")for(p+=".";t()&&r>="0"&&r<="9";)p+=r;if(r==="e"||r==="E")for(p+=r,t(),(r==="-"||r==="+")&&(p+=r,t());r>="0"&&r<="9";)p+=r,t();if(d=+p,!isFinite(d))u("Bad number");else return d},s=function(){var d,p,y="",v;if(r==='"')for(;t();){if(r==='"')return t(),y;if(r==="\\")if(t(),r==="u"){for(v=0,p=0;p<4&&(d=parseInt(t(),16),!!isFinite(d));p+=1)v=v*16+d;y+=String.fromCharCode(v)}else if(typeof i[r]=="string")y+=i[r];else break;else y+=r}u("Bad string")},f=function(){for(;r&&r<=" ";)t()},l=function(){switch(r){case"t":return t("t"),t("r"),t("u"),t("e"),!0;case"f":return t("f"),t("a"),t("l"),t("s"),t("e"),!1;case"n":return t("n"),t("u"),t("l"),t("l"),null}u('Unexpected "'+r+'"')},h,g=function(){var d=[];if(r==="["){if(t("["),f(),r==="]")return t("]"),d;for(;r;){if(d.push(h()),f(),r==="]")return t("]"),d;t(","),f()}}u("Bad array")},c=function(){var d,p={};if(r==="{"){if(t("{"),f(),r==="}")return t("}"),p;for(;r;){if(d=s(),f(),t(":"),Object.hasOwnProperty.call(p,d)&&u('Duplicate key "'+d+'"'),p[d]=h(),f(),r==="}")return t("}"),p;t(","),f()}}u("Bad object")};return h=function(){switch(f(),r){case"{":return c();case"[":return g();case'"':return s();case"-":return o();default:return r>="0"&&r<="9"?o():l()}},function(d){var p;return n=d,e=0,r=" ",p=h(),f(),r&&u("Syntax error"),p}})(),a.base64Encode=function(e){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i,n,u,t,o,s,f,l,h=0,g=0,c="",d=[];if(!e)return e;e=a.utf8Encode(e);do i=e.charCodeAt(h++),n=e.charCodeAt(h++),u=e.charCodeAt(h++),l=i<<16|n<<8|u,t=l>>18&63,o=l>>12&63,s=l>>6&63,f=l&63,d[g++]=r.charAt(t)+r.charAt(o)+r.charAt(s)+r.charAt(f);while(h127&&o<2048?s=String.fromCharCode(o>>6|192,o&63|128):s=String.fromCharCode(o>>12|224,o>>6&63|128,o&63|128),s!==null&&(n>i&&(r+=e.substring(i,n)),r+=s,i=n=t+1)}return n>i&&(r+=e.substring(i,e.length)),r},a.UUID=function(){try{return m.crypto.randomUUID()}catch(i){for(var e=new Array(36),r=0;r<36;r++)e[r]=Math.floor(Math.random()*16);return e[14]=4,e[19]=e[19]&=-5,e[19]=e[19]|=8,e[8]=e[13]=e[18]=e[23]="-",a.map(e,function(n){return n.toString(16)}).join("")}};var ae=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];a.isBlockedUA=function(e){var r;for(e=e.toLowerCase(),r=0;r=0}function n(u){if(!A.getElementsByTagName)return[];var t=u.split(" "),o,s,f,l,h,g,c,d,p,y,v=[A];for(g=0;g-1){s=o.split("#"),f=s[0];var V=s[1],H=A.getElementById(V);if(!H||f&&H.nodeName.toLowerCase()!=f)return[];v=[H];continue}if(o.indexOf(".")>-1){s=o.split("."),f=s[0];var tr=s[1];for(f||(f="*"),l=[],h=0,c=0;c-1};break;default:O=function(w){return w.getAttribute(_)}}for(v=[],y=0,c=0;c=3?r[2]:""},currentUrl:function(){return m.location.href},properties:function(e){return typeof e!="object"&&(e={}),a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D),$referrer:A.referrer,$referring_domain:a.info.referringDomain(A.referrer),$device:a.info.device(C)}),{$current_url:a.info.currentUrl(),$browser_version:a.info.browserVersion(C,B.vendor,D),$screen_height:ne.height,$screen_width:ne.width,mp_lib:"web",$lib_version:Oe.LIB_VERSION,$insert_id:le(),time:a.timestamp()/1e3},a.strip_empty_properties(e))},people_properties:function(){return a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D)}),{$browser_version:a.info.browserVersion(C,B.vendor,D)})},mpPageViewProperties:function(){return a.strip_empty_properties({current_page_title:A.title,current_domain:m.location.hostname,current_url_path:m.location.pathname,current_url_protocol:m.location.protocol,current_url_search:m.location.search})}};var le=function(e){var r=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return e?r.substring(0,e):r},$e=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Re=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,ce=function(e){var r=Re,i=e.split("."),n=i[i.length-1];(n.length>4||n==="com"||n==="org")&&(r=$e);var u=e.match(r);return u?u[0]:""},J=null,G=null;typeof JSON!="undefined"&&(J=JSON.stringify,G=JSON.parse),J=J||a.JSONEncode,G=G||a.JSONDecode,a.info=a.info,a.info.browser=a.info.browser,a.info.browserVersion=a.info.browserVersion,a.info.device=a.info.device,a.info.properties=a.info.properties,a.isBlockedUA=a.isBlockedUA,a.isEmptyObject=a.isEmptyObject,a.isObject=a.isObject,a.JSONDecode=a.JSONDecode,a.JSONEncode=a.JSONEncode,a.toArray=a.toArray,a.NPO=b;function je(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var k={exports:{}},Fe=k.exports,pe;function Le(){return pe||(pe=1,(function(e,r){(function(i,n){e.exports=n()})(Fe,function(){Array.isArray||(Array.isArray=function(t){return Object.prototype.toString.call(t)==="[object Array]"});function i(t){for(var o=[],s=0,f=t.length;s":function(t,o){return t>o},">=":function(t,o){return t>=o},"<":function(t,o,s){return s===void 0?t=t?[]:s}};return n.is_logic=function(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1},n.truthy=function(t){return Array.isArray(t)&&t.length===0?!1:!!t},n.get_operator=function(t){return Object.keys(t)[0]},n.get_values=function(t){return t[n.get_operator(t)]},n.apply=function(t,o){if(Array.isArray(t))return t.map(function(v){return n.apply(v,o)});if(!n.is_logic(t))return t;var s=n.get_operator(t),f=t[s],l,h,g,c,d;if(Array.isArray(f)||(f=[f]),s==="if"||s=="?:"){for(l=0;l0){var p=String(s).split("."),y=u;for(l=0;lhe||e.target.length>he)return!1;var r=Se(e.actual),i=Se(e.target);if(!ge.test(r)||!ge.test(i))return!1;var n=Qe(r,i);return Ae(n,e.symbol)}function ve(e){var r=e.indexOf("+");r!==-1&&(e=e.slice(0,r));var i=e.indexOf("-");return i===-1?{core:e.split("."),prerelease:[]}:{core:e.slice(0,i).split("."),prerelease:e.slice(i+1).split(".")}}function me(e){return/^[0-9]+$/.test(e)}function ye(e,r){return e.length!==r.length?e.lengthr?1:0}function Ke(e,r){var i=me(e),n=me(r);return i&&n?ye(e,r):i?-1:n?1:er?1:0}function Qe(e,r){var i=ve(e),n=ve(r),u,t;for(u=0;u":return e>0;case">=":return e>=0;default:return!1}}function Se(e){for(var r=e.trim().replace(/^[vV]/,""),i=r.length,n=["-","+"],u=0;u23)return!1;var u=new Date;return u.setUTCFullYear(e,r-1,i),u.getUTCFullYear()===e&&u.getUTCMonth()===r-1&&u.getUTCDate()===i}function qe(e){if(typeof e!="string")return null;var r=e.trim().toUpperCase(),i=We.exec(r);if(!i||!Ze(Number(i[1]),Number(i[2]),Number(i[3]),Number(i[4])))return null;var n=new Date(r),u=n.getTime();return isNaN(u)?null:Math.floor(u/1e3)}function Ye(e){return typeof e!="number"||!isFinite(e)||e>=Ge||e<=-9223372036854776e3?null:er(e/1e3)}function er(e){return e<0?Math.ceil(e):Math.floor(e)}Ve(de);var rr=function(e,r,i){if(e!==i.event_name)return{matches:!1};var n=i.property_filters,u=!0;if(n&&!a.isEmptyObject(n))try{u=de.apply(n,r||{})}catch(t){return{matches:!1,error:t.toString()}}return{matches:u}},_e={};_e.eventMatchesCriteria=rr,m[be]=Promise.resolve(_e)})(); +(function(){"use strict";var m;if(typeof window=="undefined"){var K={hostname:""};m={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:K,referrer:""},screen:{width:0,height:0},location:K,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else m=window;var Oe={LIB_VERSION:"2.85.0-rc1"},be="__mp_targeting",Q=m.setImmediate,S,$,R,X=Object.prototype.toString,Ee=typeof Q!="undefined"?function(r){return Q(r)}:setTimeout;try{Object.defineProperty({},"x",{}),S=function(r,i,n,u){return Object.defineProperty(r,i,{value:n,writable:!0,configurable:u!==!1})}}catch(e){S=function(i,n,u){return i[n]=u,i}}R=(function(){var r,i,n;function u(t,o){this.fn=t,this.self=o,this.next=void 0}return{add:function(o,s){n=new u(o,s),i?i.next=n:r=n,i=n,n=void 0},drain:function(){var o=r;for(r=i=$=void 0;o;)o.fn.call(o.self),o=o.next}}})();function I(e,r){R.add(e,r),$||($=Ee(R.drain))}function Z(e){var r,i=typeof e;return e!==null&&(i==="object"||i==="function")&&(r=e.then),typeof r=="function"?r:!1}function j(){for(var e=0;e0&&I(j,i))}catch(n){P.call(new ee(i),n)}}}function P(e){var r=this;r.triggered||(r.triggered=!0,r.def&&(r=r.def),r.msg=e,r.state=2,r.chain.length>0&&I(j,r))}function Y(e,r,i,n){for(var u=0;u0&&(r[n]=i)}),r},a.truncate=function(e,r){var i;return typeof e=="string"?i=e.slice(0,r):a.isArray(e)?(i=[],a.each(e,function(n){i.push(a.truncate(n,r))})):a.isObject(e)?(i={},a.each(e,function(n,u){i[u]=a.truncate(n,r)})):i=e,i},a.JSONEncode=(function(){return function(e){var r=e,i=function(u){var t=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,o={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return t.lastIndex=0,t.test(u)?'"'+u.replace(t,function(s){var f=o[s];return typeof f=="string"?f:"\\u"+("0000"+s.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+u+'"'},n=function(u,t){var o="",s=" ",f=0,l="",h="",g=0,c=o,d=[],p=t[u];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(u)),typeof p){case"string":return i(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(o+=s,d=[],N.apply(p)==="[object Array]"){for(g=p.length,f=0;f="0"&&r<="9";)p+=r,t();if(r===".")for(p+=".";t()&&r>="0"&&r<="9";)p+=r;if(r==="e"||r==="E")for(p+=r,t(),(r==="-"||r==="+")&&(p+=r,t());r>="0"&&r<="9";)p+=r,t();if(d=+p,!isFinite(d))u("Bad number");else return d},s=function(){var d,p,y="",v;if(r==='"')for(;t();){if(r==='"')return t(),y;if(r==="\\")if(t(),r==="u"){for(v=0,p=0;p<4&&(d=parseInt(t(),16),!!isFinite(d));p+=1)v=v*16+d;y+=String.fromCharCode(v)}else if(typeof i[r]=="string")y+=i[r];else break;else y+=r}u("Bad string")},f=function(){for(;r&&r<=" ";)t()},l=function(){switch(r){case"t":return t("t"),t("r"),t("u"),t("e"),!0;case"f":return t("f"),t("a"),t("l"),t("s"),t("e"),!1;case"n":return t("n"),t("u"),t("l"),t("l"),null}u('Unexpected "'+r+'"')},h,g=function(){var d=[];if(r==="["){if(t("["),f(),r==="]")return t("]"),d;for(;r;){if(d.push(h()),f(),r==="]")return t("]"),d;t(","),f()}}u("Bad array")},c=function(){var d,p={};if(r==="{"){if(t("{"),f(),r==="}")return t("}"),p;for(;r;){if(d=s(),f(),t(":"),Object.hasOwnProperty.call(p,d)&&u('Duplicate key "'+d+'"'),p[d]=h(),f(),r==="}")return t("}"),p;t(","),f()}}u("Bad object")};return h=function(){switch(f(),r){case"{":return c();case"[":return g();case'"':return s();case"-":return o();default:return r>="0"&&r<="9"?o():l()}},function(d){var p;return n=d,e=0,r=" ",p=h(),f(),r&&u("Syntax error"),p}})(),a.base64Encode=function(e){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i,n,u,t,o,s,f,l,h=0,g=0,c="",d=[];if(!e)return e;e=a.utf8Encode(e);do i=e.charCodeAt(h++),n=e.charCodeAt(h++),u=e.charCodeAt(h++),l=i<<16|n<<8|u,t=l>>18&63,o=l>>12&63,s=l>>6&63,f=l&63,d[g++]=r.charAt(t)+r.charAt(o)+r.charAt(s)+r.charAt(f);while(h127&&o<2048?s=String.fromCharCode(o>>6|192,o&63|128):s=String.fromCharCode(o>>12|224,o>>6&63|128,o&63|128),s!==null&&(n>i&&(r+=e.substring(i,n)),r+=s,i=n=t+1)}return n>i&&(r+=e.substring(i,e.length)),r},a.UUID=function(){try{return m.crypto.randomUUID()}catch(i){for(var e=new Array(36),r=0;r<36;r++)e[r]=Math.floor(Math.random()*16);return e[14]=4,e[19]=e[19]&=-5,e[19]=e[19]|=8,e[8]=e[13]=e[18]=e[23]="-",a.map(e,function(n){return n.toString(16)}).join("")}};var ae=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];a.isBlockedUA=function(e){var r;for(e=e.toLowerCase(),r=0;r=0}function n(u){if(!A.getElementsByTagName)return[];var t=u.split(" "),o,s,f,l,h,g,c,d,p,y,v=[A];for(g=0;g-1){s=o.split("#"),f=s[0];var V=s[1],H=A.getElementById(V);if(!H||f&&H.nodeName.toLowerCase()!=f)return[];v=[H];continue}if(o.indexOf(".")>-1){s=o.split("."),f=s[0];var tr=s[1];for(f||(f="*"),l=[],h=0,c=0;c-1};break;default:O=function(w){return w.getAttribute(_)}}for(v=[],y=0,c=0;c=3?r[2]:""},currentUrl:function(){return m.location.href},properties:function(e){return typeof e!="object"&&(e={}),a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D),$referrer:A.referrer,$referring_domain:a.info.referringDomain(A.referrer),$device:a.info.device(C)}),{$current_url:a.info.currentUrl(),$browser_version:a.info.browserVersion(C,B.vendor,D),$screen_height:ne.height,$screen_width:ne.width,mp_lib:"web",$lib_version:Oe.LIB_VERSION,$insert_id:le(),time:a.timestamp()/1e3},a.strip_empty_properties(e))},people_properties:function(){return a.extend(a.strip_empty_properties({$os:a.info.os(),$browser:a.info.browser(C,B.vendor,D)}),{$browser_version:a.info.browserVersion(C,B.vendor,D)})},mpPageViewProperties:function(){return a.strip_empty_properties({current_page_title:A.title,current_domain:m.location.hostname,current_url_path:m.location.pathname,current_url_protocol:m.location.protocol,current_url_search:m.location.search})}};var le=function(e){var r=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return e?r.substring(0,e):r},$e=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Re=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,ce=function(e){var r=Re,i=e.split("."),n=i[i.length-1];(n.length>4||n==="com"||n==="org")&&(r=$e);var u=e.match(r);return u?u[0]:""},J=null,G=null;typeof JSON!="undefined"&&(J=JSON.stringify,G=JSON.parse),J=J||a.JSONEncode,G=G||a.JSONDecode,a.info=a.info,a.info.browser=a.info.browser,a.info.browserVersion=a.info.browserVersion,a.info.device=a.info.device,a.info.properties=a.info.properties,a.isBlockedUA=a.isBlockedUA,a.isEmptyObject=a.isEmptyObject,a.isObject=a.isObject,a.JSONDecode=a.JSONDecode,a.JSONEncode=a.JSONEncode,a.toArray=a.toArray,a.NPO=b;function je(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var k={exports:{}},Fe=k.exports,pe;function Le(){return pe||(pe=1,(function(e,r){(function(i,n){e.exports=n()})(Fe,function(){Array.isArray||(Array.isArray=function(t){return Object.prototype.toString.call(t)==="[object Array]"});function i(t){for(var o=[],s=0,f=t.length;s":function(t,o){return t>o},">=":function(t,o){return t>=o},"<":function(t,o,s){return s===void 0?t=t?[]:s}};return n.is_logic=function(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1},n.truthy=function(t){return Array.isArray(t)&&t.length===0?!1:!!t},n.get_operator=function(t){return Object.keys(t)[0]},n.get_values=function(t){return t[n.get_operator(t)]},n.apply=function(t,o){if(Array.isArray(t))return t.map(function(v){return n.apply(v,o)});if(!n.is_logic(t))return t;var s=n.get_operator(t),f=t[s],l,h,g,c,d;if(Array.isArray(f)||(f=[f]),s==="if"||s=="?:"){for(l=0;l0){var p=String(s).split("."),y=u;for(l=0;lhe||e.target.length>he)return!1;var r=Se(e.actual),i=Se(e.target);if(!ge.test(r)||!ge.test(i))return!1;var n=Qe(r,i);return Ae(n,e.symbol)}function ve(e){var r=e.indexOf("+");r!==-1&&(e=e.slice(0,r));var i=e.indexOf("-");return i===-1?{core:e.split("."),prerelease:[]}:{core:e.slice(0,i).split("."),prerelease:e.slice(i+1).split(".")}}function me(e){return/^[0-9]+$/.test(e)}function ye(e,r){return e.length!==r.length?e.lengthr?1:0}function Ke(e,r){var i=me(e),n=me(r);return i&&n?ye(e,r):i?-1:n?1:er?1:0}function Qe(e,r){var i=ve(e),n=ve(r),u,t;for(u=0;u":return e>0;case">=":return e>=0;default:return!1}}function Se(e){for(var r=e.trim().replace(/^[vV]/,""),i=r.length,n=["-","+"],u=0;u23)return!1;var u=new Date;return u.setUTCFullYear(e,r-1,i),u.getUTCFullYear()===e&&u.getUTCMonth()===r-1&&u.getUTCDate()===i}function qe(e){if(typeof e!="string")return null;var r=e.trim().toUpperCase(),i=We.exec(r);if(!i||!Ze(Number(i[1]),Number(i[2]),Number(i[3]),Number(i[4])))return null;var n=new Date(r),u=n.getTime();return isNaN(u)?null:Math.floor(u/1e3)}function Ye(e){return typeof e!="number"||!isFinite(e)||e>=Ge||e<=-9223372036854776e3?null:er(e/1e3)}function er(e){return e<0?Math.ceil(e):Math.floor(e)}Ve(de);var rr=function(e,r,i){if(e!==i.event_name)return{matches:!1};var n=i.property_filters,u=!0;if(n&&!a.isEmptyObject(n))try{u=de.apply(n,r||{})}catch(t){return{matches:!1,error:t.toString()}}return{matches:u}},_e={};_e.eventMatchesCriteria=rr,m[be]=Promise.resolve(_e)})(); //# sourceMappingURL=mixpanel-targeting.min.js.map diff --git a/dist/mixpanel-targeting.min.js.map b/dist/mixpanel-targeting.min.js.map index ed5a9fbc..b3515f38 100644 --- a/dist/mixpanel-targeting.min.js.map +++ b/dist/mixpanel-targeting.min.js.map @@ -1 +1 @@ -{"version":3,"file":"mixpanel-targeting.min.js","sources":["../src/window.js","../src/config.js","../src/promise-polyfill.js","../src/utils.js","../node_modules/json-logic-js/logic.js","../src/targeting/custom-operators.js","../src/targeting/event-matcher.js","../src/targeting/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.84.0'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","/* globals define,module */\n/*\nUsing a Universal Module Loader that should be browser, require, and AMD friendly\nhttp://ricostacruz.com/cheatsheets/umdjs.html\n*/\n;(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.jsonLogic = factory();\n }\n}(this, function() {\n \"use strict\";\n /* globals console:false */\n\n if ( ! Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === \"[object Array]\";\n };\n }\n\n /**\n * Return an array that contains no duplicates (original not modified)\n * @param {array} array Original reference array\n * @return {array} New array with no duplicates\n */\n function arrayUnique(array) {\n var a = [];\n for (var i=0, l=array.length; i\": function(a, b) {\n return a > b;\n },\n \">=\": function(a, b) {\n return a >= b;\n },\n \"<\": function(a, b, c) {\n return (c === undefined) ? a < b : (a < b) && (b < c);\n },\n \"<=\": function(a, b, c) {\n return (c === undefined) ? a <= b : (a <= b) && (b <= c);\n },\n \"!!\": function(a) {\n return jsonLogic.truthy(a);\n },\n \"!\": function(a) {\n return !jsonLogic.truthy(a);\n },\n \"%\": function(a, b) {\n return a % b;\n },\n \"log\": function(a) {\n console.log(a); return a;\n },\n \"in\": function(a, b) {\n if (!b || typeof b.indexOf === \"undefined\") return false;\n return (b.indexOf(a) !== -1);\n },\n \"cat\": function() {\n return Array.prototype.join.call(arguments, \"\");\n },\n \"substr\": function(source, start, end) {\n if (end < 0) {\n // JavaScript doesn't support negative end, this emulates PHP behavior\n var temp = String(source).substr(start);\n return temp.substr(0, temp.length + end);\n }\n return String(source).substr(start, end);\n },\n \"+\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) + parseFloat(b, 10);\n }, 0);\n },\n \"*\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) * parseFloat(b, 10);\n });\n },\n \"-\": function(a, b) {\n if (b === undefined) {\n return -a;\n } else {\n return a - b;\n }\n },\n \"/\": function(a, b) {\n return a / b;\n },\n \"min\": function() {\n return Math.min.apply(this, arguments);\n },\n \"max\": function() {\n return Math.max.apply(this, arguments);\n },\n \"merge\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return a.concat(b);\n }, []);\n },\n \"var\": function(a, b) {\n var not_found = (b === undefined) ? null : b;\n var data = this;\n if (typeof a === \"undefined\" || a===\"\" || a===null) {\n return data;\n }\n var sub_props = String(a).split(\".\");\n for (var i = 0; i < sub_props.length; i++) {\n if (data === null || data === undefined) {\n return not_found;\n }\n // Descending into data\n data = data[sub_props[i]];\n if (data === undefined) {\n return not_found;\n }\n }\n return data;\n },\n \"missing\": function() {\n /*\n Missing can receive many keys as many arguments, like {\"missing:[1,2]}\n Missing can also receive *one* argument that is an array of keys,\n which typically happens if it's actually acting on the output of another command\n (like 'if' or 'merge')\n */\n\n var missing = [];\n var keys = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = jsonLogic.apply({\"var\": key}, this);\n if (value === null || value === \"\") {\n missing.push(key);\n }\n }\n\n return missing;\n },\n \"missing_some\": function(need_count, options) {\n // missing_some takes two arguments, how many (minimum) items must be present, and an array of keys (just like 'missing') to check for presence.\n var are_missing = jsonLogic.apply({\"missing\": options}, this);\n\n if (options.length - are_missing.length >= need_count) {\n return [];\n } else {\n return are_missing;\n }\n },\n };\n\n jsonLogic.is_logic = function(logic) {\n return (\n typeof logic === \"object\" && // An object\n logic !== null && // but not null\n ! Array.isArray(logic) && // and not an array\n Object.keys(logic).length === 1 // with exactly one key\n );\n };\n\n /*\n This helper will defer to the JsonLogic spec as a tie-breaker when different language interpreters define different behavior for the truthiness of primitives. E.g., PHP considers empty arrays to be falsy, but Javascript considers them to be truthy. JsonLogic, as an ecosystem, needs one consistent answer.\n\n Spec and rationale here: http://jsonlogic.com/truthy\n */\n jsonLogic.truthy = function(value) {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n return !! value;\n };\n\n\n jsonLogic.get_operator = function(logic) {\n return Object.keys(logic)[0];\n };\n\n jsonLogic.get_values = function(logic) {\n return logic[jsonLogic.get_operator(logic)];\n };\n\n jsonLogic.apply = function(logic, data) {\n // Does this array contain logic? Only one way to find out.\n if (Array.isArray(logic)) {\n return logic.map(function(l) {\n return jsonLogic.apply(l, data);\n });\n }\n // You've recursed to a primitive, stop!\n if ( ! jsonLogic.is_logic(logic) ) {\n return logic;\n }\n\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n var i;\n var current;\n var scopedLogic;\n var scopedData;\n var initial;\n\n // easy syntax for unary operators, like {\"var\" : \"x\"} instead of strict {\"var\" : [\"x\"]}\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n // 'if', 'and', and 'or' violate the normal rule of depth-first calculating consequents, let each manage recursion as needed.\n if (op === \"if\" || op == \"?:\") {\n /* 'if' should be called with a odd number of parameters, 3 or greater\n This works on the pattern:\n if( 0 ){ 1 }else{ 2 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else{ 4 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else if( 4 ){ 5 }else{ 6 };\n\n The implementation is:\n For pairs of values (0,1 then 2,3 then 4,5 etc)\n If the first evaluates truthy, evaluate and return the second\n If the first evaluates falsy, jump to the next pair (e.g, 0,1 to 2,3)\n given one parameter, evaluate and return it. (it's an Else and all the If/ElseIf were false)\n given 0 parameters, return NULL (not great practice, but there was no Else)\n */\n for (i = 0; i < values.length - 1; i += 2) {\n if ( jsonLogic.truthy( jsonLogic.apply(values[i], data) ) ) {\n return jsonLogic.apply(values[i+1], data);\n }\n }\n if (values.length === i+1) {\n return jsonLogic.apply(values[i], data);\n }\n return null;\n } else if (op === \"and\") { // Return first falsy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( ! jsonLogic.truthy(current)) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"or\") {// Return first truthy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( jsonLogic.truthy(current) ) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"filter\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n // Return only the elements from the array in the first argument,\n // that return truthy when passed to the logic in the second argument.\n // For parity with JavaScript, reindex the returned array\n return scopedData.filter(function(datum) {\n return jsonLogic.truthy( jsonLogic.apply(scopedLogic, datum));\n });\n } else if (op === \"map\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n\n return scopedData.map(function(datum) {\n return jsonLogic.apply(scopedLogic, datum);\n });\n } else if (op === \"reduce\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n initial = typeof values[2] !== \"undefined\" ? jsonLogic.apply(values[2], data) : null;\n\n if ( ! Array.isArray(scopedData)) {\n return initial;\n }\n\n return scopedData.reduce(\n function(accumulator, current) {\n return jsonLogic.apply(\n scopedLogic,\n {current: current, accumulator: accumulator}\n );\n },\n initial\n );\n } else if (op === \"all\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n // All of an empty set is false. Note, some and none have correct fallback after the for loop\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( ! jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First falsy, short circuit\n }\n }\n return true; // All were truthy\n } else if (op === \"none\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return true;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First truthy, short circuit\n }\n }\n return true; // None were truthy\n } else if (op === \"some\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return true; // First truthy, short circuit\n }\n }\n return false; // None were truthy\n }\n\n // Everyone else gets immediate depth-first recursion\n values = values.map(function(val) {\n return jsonLogic.apply(val, data);\n });\n\n\n // The operation is called with \"data\" bound to its \"this\" and \"values\" passed as arguments.\n // Structured commands like % or > can name formal arguments while flexible commands (like missing or merge) can operate on the pseudo-array arguments\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n if (operations.hasOwnProperty(op) && typeof operations[op] === \"function\") {\n return operations[op].apply(data, values);\n } else if (op.indexOf(\".\") > 0) { // Contains a dot, and not in the 0th position\n var sub_ops = String(op).split(\".\");\n var operation = operations;\n for (i = 0; i < sub_ops.length; i++) {\n if (!operation.hasOwnProperty(sub_ops[i])) {\n throw new Error(\"Unrecognized operation \" + op +\n \" (failed at \" + sub_ops.slice(0, i+1).join(\".\") + \")\");\n }\n // Descending into operations\n operation = operation[sub_ops[i]];\n }\n\n return operation.apply(data, values);\n }\n\n throw new Error(\"Unrecognized operation \" + op );\n };\n\n jsonLogic.uses_data = function(logic) {\n var collection = [];\n\n if (jsonLogic.is_logic(logic)) {\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n if (op === \"var\") {\n // This doesn't cover the case where the arg to var is itself a rule.\n collection.push(values[0]);\n } else {\n // Recursion!\n values.forEach(function(val) {\n collection.push.apply(collection, jsonLogic.uses_data(val) );\n });\n }\n }\n\n return arrayUnique(collection);\n };\n\n jsonLogic.add_operation = function(name, code) {\n operations[name] = code;\n };\n\n jsonLogic.rm_operation = function(name) {\n delete operations[name];\n };\n\n jsonLogic.rule_like = function(rule, pattern) {\n // console.log(\"Is \". JSON.stringify(rule) . \" like \" . JSON.stringify(pattern) . \"?\");\n if (pattern === rule) {\n return true;\n } // TODO : Deep object equivalency?\n if (pattern === \"@\") {\n return true;\n } // Wildcard!\n if (pattern === \"number\") {\n return (typeof rule === \"number\");\n }\n if (pattern === \"string\") {\n return (typeof rule === \"string\");\n }\n if (pattern === \"array\") {\n // !logic test might be superfluous in JavaScript\n return Array.isArray(rule) && ! jsonLogic.is_logic(rule);\n }\n\n if (jsonLogic.is_logic(pattern)) {\n if (jsonLogic.is_logic(rule)) {\n var pattern_op = jsonLogic.get_operator(pattern);\n var rule_op = jsonLogic.get_operator(rule);\n\n if (pattern_op === \"@\" || pattern_op === rule_op) {\n // echo \"\\nOperators match, go deeper\\n\";\n return jsonLogic.rule_like(\n jsonLogic.get_values(rule, false),\n jsonLogic.get_values(pattern, false)\n );\n }\n }\n return false; // pattern is logic, rule isn't, can't be eq\n }\n\n if (Array.isArray(pattern)) {\n if (Array.isArray(rule)) {\n if (pattern.length !== rule.length) {\n return false;\n }\n /*\n Note, array order MATTERS, because we're using this array test logic to consider arguments, where order can matter. (e.g., + is commutative, but '-' or 'if' or 'var' are NOT)\n */\n for (var i = 0; i < pattern.length; i += 1) {\n // If any fail, we fail\n if ( ! jsonLogic.rule_like(rule[i], pattern[i])) {\n return false;\n }\n }\n return true; // If they *all* passed, we pass\n } else {\n return false; // Pattern is array, rule isn't\n }\n }\n\n // Not logic, not array, not a === match for rule.\n return false;\n };\n\n return jsonLogic;\n}));\n","// Strict RFC3339 guard for datetime strings. The date and hour fields are captured so the calendar\n// can be validated separately; the regex only constrains their shape.\nvar RFC3339_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})[Tt](\\d{2}):\\d{2}:\\d{2}(\\.\\d+)?([Zz]|[+-]\\d{2}:\\d{2})$/;\n\n// SemVer 2.0.0 requires major.minor.patch; partial versions are zero-padded to this.\nvar SEMVER_PARTS = 3;\n\n// Longest operand the semver regex is allowed to see. A real version never approaches this; the\n// bound matches MAX_LENGTH in node-semver, and keeps an arbitrarily long property value off the\n// regex regardless of how the engine schedules backtracking.\nvar MAX_SEMVER_LENGTH = 256;\n\n// Epoch milliseconds are compared as int64 elsewhere, so anything at or beyond this is out of range.\nvar MAX_EPOCH_MS = 9223372036854775808;\n\n// Using the official semantic versioning 2.0.0 regular expression to handle cross-platform validation\n// differences on other SDK's. For example, some platforms allow leading zeros even though it is not valid\n// as part of the Semver 2.0.0 spec. See https://semver.org/\nvar SEMVER_REGEX = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n// Registers custom operators into the JSONLogic engine.\n// 1. Semantic Versioning 2.0.0 comparison\n// 2. RFC3339 datetime comparison\nfunction registerCustomOperators(jsonLogic) {\n jsonLogic.add_operation('semver_compare', semverCompare);\n jsonLogic.add_operation('datetime_compare', datetimeCompare);\n}\n\n// Implements a custom operation for semantic versioning comparison that conforms to the semver 2.0.0 standard.\n// Prior to comparison, any leading version prefix is stripped.\nfunction semverCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n if (typeof ops.actual !== 'string' || typeof ops.target !== 'string') {\n return false;\n }\n if (ops.actual.length > MAX_SEMVER_LENGTH || ops.target.length > MAX_SEMVER_LENGTH) {\n return false;\n }\n var actual = normalizeSemver(ops.actual);\n var target = normalizeSemver(ops.target);\n if (!SEMVER_REGEX.test(actual) || !SEMVER_REGEX.test(target)) {\n return false;\n }\n var cmp = compareSemver(actual, target);\n return comparatorMatches(cmp, ops.symbol);\n}\n\n// Strip optional build metadata and separate the core version from pre-release identifiers\nfunction splitSemver(version) {\n var plus = version.indexOf('+');\n if (plus !== -1) {\n version = version.slice(0, plus);\n }\n var dash = version.indexOf('-');\n if (dash === -1) {\n return {core: version.split('.'), prerelease: []};\n }\n return {core: version.slice(0, dash).split('.'), prerelease: version.slice(dash + 1).split('.')};\n}\n\nfunction isNumericIdentifier(identifier) {\n return /^[0-9]+$/.test(identifier);\n}\n\n// Numeric identifiers carry no leading zeros, so the longer run of digits is the larger number.\n// Comparing them as digits rather than as numbers keeps versions past Number.MAX_SAFE_INTEGER ordered\n// correctly.\nfunction compareNumeric(a, b) {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// SemVer 2.0.0 section 11.4: digits compare numerically, a numeric identifier ranks below an\n// alphanumeric one, and anything else compares by ASCII order.\nfunction comparePrereleaseIdentifier(a, b) {\n var aNumeric = isNumericIdentifier(a);\n var bNumeric = isNumericIdentifier(b);\n if (aNumeric && bNumeric) {\n return compareNumeric(a, b);\n }\n if (aNumeric) {\n return -1;\n }\n if (bNumeric) {\n return 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// Ordering per SemVer 2.0.0 section 11. Both operands have already been normalized and matched against\n// the official regex, so the core holds exactly three numeric identifiers and every prerelease field is\n// well-formed; the split needs no error path.\nfunction compareSemver(actualVersion, targetVersion) {\n var actual = splitSemver(actualVersion);\n var target = splitSemver(targetVersion);\n var i, result;\n\n for (i = 0; i < actual.core.length; i++) {\n result = compareNumeric(actual.core[i], target.core[i]);\n if (result !== 0) {\n return result;\n }\n }\n\n // A prerelease ranks below the release it belongs to (section 11.3).\n if (!actual.prerelease.length && !target.prerelease.length) {\n return 0;\n }\n if (!actual.prerelease.length) {\n return 1;\n }\n if (!target.prerelease.length) {\n return -1;\n }\n\n var shared = Math.min(actual.prerelease.length, target.prerelease.length);\n for (i = 0; i < shared; i++) {\n result = comparePrereleaseIdentifier(actual.prerelease[i], target.prerelease[i]);\n if (result !== 0) {\n return result;\n }\n }\n // Every field so far is equal, so the longer list wins (section 11.4.4).\n if (actual.prerelease.length !== target.prerelease.length) {\n return actual.prerelease.length < target.prerelease.length ? -1 : 1;\n }\n return 0;\n}\n\n// Implements a custom operation for datetime comparison.\n// The target value stored on the feature flag is the millisecond epoch, whereas the actual value provided at evaluation time must be RFC-3339 formatted.\nfunction datetimeCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n var actualSec = convertRfc3339ToUnixSeconds(ops.actual);\n var targetSec = convertUnixMillisecondsToSeconds(ops.target);\n if (actualSec === null || targetSec === null) {\n return false;\n }\n var cmp = actualSec - targetSec;\n return comparatorMatches(cmp, ops.symbol);\n}\n\nfunction operands(args) {\n if (args.length !== 3) {\n return null;\n }\n return { actual: args[0], symbol: args[1], target: args[2] };\n}\n\nfunction comparatorMatches(cmp, symbol) {\n switch (symbol) {\n case '===':\n return cmp === 0;\n case '!==':\n return cmp !== 0;\n case '<':\n return cmp < 0;\n case '<=':\n return cmp <= 0;\n case '>':\n return cmp > 0;\n case '>=':\n return cmp >= 0;\n default:\n return false;\n }\n}\n\nfunction normalizeSemver(version) {\n var stripped = version.trim().replace(/^[vV]/, '');\n\n var suffixStart = stripped.length;\n var separators = ['-', '+'];\n for (var i = 0; i < separators.length; i++) {\n var index = stripped.indexOf(separators[i]);\n if (index !== -1 && index < suffixStart) {\n suffixStart = index;\n }\n }\n\n var core = stripped.slice(0, suffixStart);\n var suffix = stripped.slice(suffixStart);\n\n var parts = core.split('.');\n while (parts.length < SEMVER_PARTS) {\n parts.push('0');\n }\n return parts.join('.') + suffix;\n}\n\n// The regex constrains each field to two digits, which still admits a date that cannot exist, such as\n// 2026-02-30 or 29 February in a common year. Writing the fields into a Date and reading them back\n// settles it: out-of-range fields are normalized into a real instant, so a date that does not exist\n// comes back carrying different fields than it went in with. The three-argument setUTCFullYear sets\n// all three at once, which judges 29 February against the year given rather than a placeholder, and\n// leaves years 0 through 99 alone where Date.UTC would map them into the 1900s. The hour is checked\n// separately because it is not part of the round trip; RFC 3339 section 5.6 allows hours 00 through 23.\nfunction isRealCalendarDate(year, month, day, hour) {\n if (hour > 23) {\n return false;\n }\n var dt = new Date();\n dt.setUTCFullYear(year, month - 1, day);\n return dt.getUTCFullYear() === year && dt.getUTCMonth() === month - 1 && dt.getUTCDate() === day;\n}\n\nfunction convertRfc3339ToUnixSeconds(v) {\n if (typeof v !== 'string') {\n return null;\n }\n var normalized = v.trim().toUpperCase();\n var fields = RFC3339_REGEX.exec(normalized);\n if (!fields) {\n return null;\n }\n if (!isRealCalendarDate(Number(fields[1]), Number(fields[2]), Number(fields[3]), Number(fields[4]))) {\n return null;\n }\n var parsed = new Date(normalized);\n var ms = parsed.getTime();\n if (isNaN(ms)) {\n return null;\n }\n return Math.floor(ms / 1000);\n}\n\nfunction convertUnixMillisecondsToSeconds(v) {\n if (typeof v !== 'number' || !isFinite(v)) {\n return null;\n }\n // A value int64 cannot represent is not a real timestamp; treating one as a bound would let a\n // nonsense target define a rollout window.\n if (v >= MAX_EPOCH_MS || v <= -MAX_EPOCH_MS) {\n return null;\n }\n return truncate(v / 1000);\n}\n\nfunction truncate(n) {\n return n < 0 ? Math.ceil(n) : Math.floor(n);\n}\n\nexport {\n registerCustomOperators,\n semverCompare,\n datetimeCompare\n};\n","import { _ } from '../utils';\nimport jsonLogic from 'json-logic-js';\nimport { registerCustomOperators } from './custom-operators';\n\n// Register typed runtime-targeting operators (semver_compare, datetime_compare) into the JsonLogic engine.\n// Registration happens lazily, when the async targeting bundle loads.\nregisterCustomOperators(jsonLogic);\n\n/**\n * Check if an event matches the given criteria\n * @param {string} eventName - The name of the event being checked\n * @param {Object} properties - Event properties to evaluate against property filters\n * @param {Object} criteria - Criteria to match against, with:\n * - event_name: string - Required event name (case-sensitive match)\n * - property_filters: Object - Optional JsonLogic filters for properties\n * @returns {Object} Result object with:\n * - matches: boolean - Whether the event matches the criteria\n * - error: string|undefined - Error message if evaluation failed\n */\nvar eventMatchesCriteria = function(eventName, properties, criteria) {\n // Check exact event name match (case-sensitive)\n if (eventName !== criteria.event_name) {\n return { matches: false };\n }\n\n // Evaluate property filters using JsonLogic\n var propertyFilters = criteria.property_filters;\n var filtersMatch = true; // default to true if no filters\n\n if (propertyFilters && !_.isEmptyObject(propertyFilters)) {\n try {\n // Use properties as-is for case-sensitive matching\n filtersMatch = jsonLogic.apply(propertyFilters, properties || {});\n } catch (error) {\n return {\n matches: false,\n error: error.toString()\n };\n }\n }\n\n return { matches: filtersMatch };\n};\n\nexport {\n eventMatchesCriteria\n};\n","import { window } from '../window';\nimport { TARGETING_GLOBAL_NAME } from '../config';\nimport { eventMatchesCriteria } from './event-matcher';\n\n// Create targeting library object\nvar targetingLibrary = {};\ntargetingLibrary['eventMatchesCriteria'] = eventMatchesCriteria;\n\n// Set global Promise (use bracket notation to prevent minification)\n// This is the ONE AND ONLY global - matches recorder pattern\nwindow[TARGETING_GLOBAL_NAME] = Promise.resolve(targetingLibrary);\n"],"names":["win","loc","Config","TARGETING_GLOBAL_NAME","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","timer","fn","obj","name","val","config","err","first","last","item","Item","self","f","schedule","isThenable","o","_then","oType","notify","i","notifyIsolated","cb","chain","ret","resolve","msg","defWrapper","MakeDefWrapper","reject","iteratePromises","Constructor","arr","resolver","rejecter","idx","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","len","msgs","count","ArrayProto","FuncProto","ObjProto","slice","toString","hasOwnProperty","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","_","func","context","args","bound","ctor","result","iterator","l","key","source","prop","iterable","callback","results","value","target","found","str","needle","subclass","superclass","encoded","v","k","d","pad","n","p","length","mixed_val","quote","string","escapable","meta","a","c","holder","gap","indent","mind","partial","at","ch","escapee","text","error","m","e","next","number","hex","uffff","white","word","array","object","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","start","end","stringl","c1","uuid","x","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","url","param","regexS","regex","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","element","type","handler","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","event","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","selector","className","getElementsBySelector","tokens","token","tagName","foundCount","j","elements","currentContextIndex","currentContext","id","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","params","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","matches","split","extra_props","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","parts","tld","JSONStringify","JSONParse","root","factory","module","this","arg","arrayUnique","jsonLogic","operations","b","temp","not_found","sub_props","missing","keys","need_count","options","are_missing","logic","op","values","current","scopedLogic","scopedData","initial","datum","accumulator","sub_ops","operation","collection","code","rule","pattern","pattern_op","rule_op","RFC3339_REGEX","SEMVER_PARTS","MAX_SEMVER_LENGTH","MAX_EPOCH_MS","SEMVER_REGEX","registerCustomOperators","semverCompare","datetimeCompare","ops","operands","actual","normalizeSemver","cmp","compareSemver","comparatorMatches","splitSemver","version","plus","dash","isNumericIdentifier","identifier","compareNumeric","comparePrereleaseIdentifier","aNumeric","bNumeric","actualVersion","targetVersion","shared","actualSec","convertRfc3339ToUnixSeconds","targetSec","convertUnixMillisecondsToSeconds","symbol","stripped","suffixStart","separators","index","core","suffix","isRealCalendarDate","year","month","day","hour","dt","normalized","fields","parsed","ms","truncate","eventMatchesCriteria","eventName","properties","criteria","propertyFilters","filtersMatch","targetingLibrary"],"mappings":"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","x_google_ignoreList":[4]} \ No newline at end of file +{"version":3,"file":"mixpanel-targeting.min.js","sources":["../src/window.js","../src/config.js","../src/promise-polyfill.js","../src/utils.js","../node_modules/json-logic-js/logic.js","../src/targeting/custom-operators.js","../src/targeting/event-matcher.js","../src/targeting/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.85.0-rc1'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n // Escape the RegExp metacharacters the param name may contain before\n // interpolating it into `regexS`. Backslash is escaped in the same pass as\n // the brackets (a single character class), so a param name is never able to\n // introduce an unintended escape sequence (CodeQL js/incomplete-sanitization).\n param = param.replace(/[[\\]\\\\]/g, '\\\\$&');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n return _localStorageSupported = _testStorageSupported(storage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n\n return _sessionStorageSupported = _testStorageSupported(storage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari and other browsers may error out accessing localStorage/sessionStorage\n// when cookies are disabled, so wrap access in a try-catch.\nvar getLocalStorage = function() {\n try {\n return window.localStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\nvar getSessionStorage = function() {\n try {\n return window.sessionStorage; // eslint-disable-line no-restricted-properties\n } catch (_err) {\n return null;\n }\n};\n\n_.localStorage = _storageWrapper(getLocalStorage(), 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(getSessionStorage(), 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /Android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n getLocalStorage,\n windowOpera,\n};\n","/* globals define,module */\n/*\nUsing a Universal Module Loader that should be browser, require, and AMD friendly\nhttp://ricostacruz.com/cheatsheets/umdjs.html\n*/\n;(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.jsonLogic = factory();\n }\n}(this, function() {\n \"use strict\";\n /* globals console:false */\n\n if ( ! Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === \"[object Array]\";\n };\n }\n\n /**\n * Return an array that contains no duplicates (original not modified)\n * @param {array} array Original reference array\n * @return {array} New array with no duplicates\n */\n function arrayUnique(array) {\n var a = [];\n for (var i=0, l=array.length; i\": function(a, b) {\n return a > b;\n },\n \">=\": function(a, b) {\n return a >= b;\n },\n \"<\": function(a, b, c) {\n return (c === undefined) ? a < b : (a < b) && (b < c);\n },\n \"<=\": function(a, b, c) {\n return (c === undefined) ? a <= b : (a <= b) && (b <= c);\n },\n \"!!\": function(a) {\n return jsonLogic.truthy(a);\n },\n \"!\": function(a) {\n return !jsonLogic.truthy(a);\n },\n \"%\": function(a, b) {\n return a % b;\n },\n \"log\": function(a) {\n console.log(a); return a;\n },\n \"in\": function(a, b) {\n if (!b || typeof b.indexOf === \"undefined\") return false;\n return (b.indexOf(a) !== -1);\n },\n \"cat\": function() {\n return Array.prototype.join.call(arguments, \"\");\n },\n \"substr\": function(source, start, end) {\n if (end < 0) {\n // JavaScript doesn't support negative end, this emulates PHP behavior\n var temp = String(source).substr(start);\n return temp.substr(0, temp.length + end);\n }\n return String(source).substr(start, end);\n },\n \"+\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) + parseFloat(b, 10);\n }, 0);\n },\n \"*\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) * parseFloat(b, 10);\n });\n },\n \"-\": function(a, b) {\n if (b === undefined) {\n return -a;\n } else {\n return a - b;\n }\n },\n \"/\": function(a, b) {\n return a / b;\n },\n \"min\": function() {\n return Math.min.apply(this, arguments);\n },\n \"max\": function() {\n return Math.max.apply(this, arguments);\n },\n \"merge\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return a.concat(b);\n }, []);\n },\n \"var\": function(a, b) {\n var not_found = (b === undefined) ? null : b;\n var data = this;\n if (typeof a === \"undefined\" || a===\"\" || a===null) {\n return data;\n }\n var sub_props = String(a).split(\".\");\n for (var i = 0; i < sub_props.length; i++) {\n if (data === null || data === undefined) {\n return not_found;\n }\n // Descending into data\n data = data[sub_props[i]];\n if (data === undefined) {\n return not_found;\n }\n }\n return data;\n },\n \"missing\": function() {\n /*\n Missing can receive many keys as many arguments, like {\"missing:[1,2]}\n Missing can also receive *one* argument that is an array of keys,\n which typically happens if it's actually acting on the output of another command\n (like 'if' or 'merge')\n */\n\n var missing = [];\n var keys = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = jsonLogic.apply({\"var\": key}, this);\n if (value === null || value === \"\") {\n missing.push(key);\n }\n }\n\n return missing;\n },\n \"missing_some\": function(need_count, options) {\n // missing_some takes two arguments, how many (minimum) items must be present, and an array of keys (just like 'missing') to check for presence.\n var are_missing = jsonLogic.apply({\"missing\": options}, this);\n\n if (options.length - are_missing.length >= need_count) {\n return [];\n } else {\n return are_missing;\n }\n },\n };\n\n jsonLogic.is_logic = function(logic) {\n return (\n typeof logic === \"object\" && // An object\n logic !== null && // but not null\n ! Array.isArray(logic) && // and not an array\n Object.keys(logic).length === 1 // with exactly one key\n );\n };\n\n /*\n This helper will defer to the JsonLogic spec as a tie-breaker when different language interpreters define different behavior for the truthiness of primitives. E.g., PHP considers empty arrays to be falsy, but Javascript considers them to be truthy. JsonLogic, as an ecosystem, needs one consistent answer.\n\n Spec and rationale here: http://jsonlogic.com/truthy\n */\n jsonLogic.truthy = function(value) {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n return !! value;\n };\n\n\n jsonLogic.get_operator = function(logic) {\n return Object.keys(logic)[0];\n };\n\n jsonLogic.get_values = function(logic) {\n return logic[jsonLogic.get_operator(logic)];\n };\n\n jsonLogic.apply = function(logic, data) {\n // Does this array contain logic? Only one way to find out.\n if (Array.isArray(logic)) {\n return logic.map(function(l) {\n return jsonLogic.apply(l, data);\n });\n }\n // You've recursed to a primitive, stop!\n if ( ! jsonLogic.is_logic(logic) ) {\n return logic;\n }\n\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n var i;\n var current;\n var scopedLogic;\n var scopedData;\n var initial;\n\n // easy syntax for unary operators, like {\"var\" : \"x\"} instead of strict {\"var\" : [\"x\"]}\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n // 'if', 'and', and 'or' violate the normal rule of depth-first calculating consequents, let each manage recursion as needed.\n if (op === \"if\" || op == \"?:\") {\n /* 'if' should be called with a odd number of parameters, 3 or greater\n This works on the pattern:\n if( 0 ){ 1 }else{ 2 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else{ 4 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else if( 4 ){ 5 }else{ 6 };\n\n The implementation is:\n For pairs of values (0,1 then 2,3 then 4,5 etc)\n If the first evaluates truthy, evaluate and return the second\n If the first evaluates falsy, jump to the next pair (e.g, 0,1 to 2,3)\n given one parameter, evaluate and return it. (it's an Else and all the If/ElseIf were false)\n given 0 parameters, return NULL (not great practice, but there was no Else)\n */\n for (i = 0; i < values.length - 1; i += 2) {\n if ( jsonLogic.truthy( jsonLogic.apply(values[i], data) ) ) {\n return jsonLogic.apply(values[i+1], data);\n }\n }\n if (values.length === i+1) {\n return jsonLogic.apply(values[i], data);\n }\n return null;\n } else if (op === \"and\") { // Return first falsy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( ! jsonLogic.truthy(current)) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"or\") {// Return first truthy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( jsonLogic.truthy(current) ) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"filter\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n // Return only the elements from the array in the first argument,\n // that return truthy when passed to the logic in the second argument.\n // For parity with JavaScript, reindex the returned array\n return scopedData.filter(function(datum) {\n return jsonLogic.truthy( jsonLogic.apply(scopedLogic, datum));\n });\n } else if (op === \"map\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n\n return scopedData.map(function(datum) {\n return jsonLogic.apply(scopedLogic, datum);\n });\n } else if (op === \"reduce\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n initial = typeof values[2] !== \"undefined\" ? jsonLogic.apply(values[2], data) : null;\n\n if ( ! Array.isArray(scopedData)) {\n return initial;\n }\n\n return scopedData.reduce(\n function(accumulator, current) {\n return jsonLogic.apply(\n scopedLogic,\n {current: current, accumulator: accumulator}\n );\n },\n initial\n );\n } else if (op === \"all\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n // All of an empty set is false. Note, some and none have correct fallback after the for loop\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( ! jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First falsy, short circuit\n }\n }\n return true; // All were truthy\n } else if (op === \"none\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return true;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First truthy, short circuit\n }\n }\n return true; // None were truthy\n } else if (op === \"some\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return true; // First truthy, short circuit\n }\n }\n return false; // None were truthy\n }\n\n // Everyone else gets immediate depth-first recursion\n values = values.map(function(val) {\n return jsonLogic.apply(val, data);\n });\n\n\n // The operation is called with \"data\" bound to its \"this\" and \"values\" passed as arguments.\n // Structured commands like % or > can name formal arguments while flexible commands (like missing or merge) can operate on the pseudo-array arguments\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n if (operations.hasOwnProperty(op) && typeof operations[op] === \"function\") {\n return operations[op].apply(data, values);\n } else if (op.indexOf(\".\") > 0) { // Contains a dot, and not in the 0th position\n var sub_ops = String(op).split(\".\");\n var operation = operations;\n for (i = 0; i < sub_ops.length; i++) {\n if (!operation.hasOwnProperty(sub_ops[i])) {\n throw new Error(\"Unrecognized operation \" + op +\n \" (failed at \" + sub_ops.slice(0, i+1).join(\".\") + \")\");\n }\n // Descending into operations\n operation = operation[sub_ops[i]];\n }\n\n return operation.apply(data, values);\n }\n\n throw new Error(\"Unrecognized operation \" + op );\n };\n\n jsonLogic.uses_data = function(logic) {\n var collection = [];\n\n if (jsonLogic.is_logic(logic)) {\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n if (op === \"var\") {\n // This doesn't cover the case where the arg to var is itself a rule.\n collection.push(values[0]);\n } else {\n // Recursion!\n values.forEach(function(val) {\n collection.push.apply(collection, jsonLogic.uses_data(val) );\n });\n }\n }\n\n return arrayUnique(collection);\n };\n\n jsonLogic.add_operation = function(name, code) {\n operations[name] = code;\n };\n\n jsonLogic.rm_operation = function(name) {\n delete operations[name];\n };\n\n jsonLogic.rule_like = function(rule, pattern) {\n // console.log(\"Is \". JSON.stringify(rule) . \" like \" . JSON.stringify(pattern) . \"?\");\n if (pattern === rule) {\n return true;\n } // TODO : Deep object equivalency?\n if (pattern === \"@\") {\n return true;\n } // Wildcard!\n if (pattern === \"number\") {\n return (typeof rule === \"number\");\n }\n if (pattern === \"string\") {\n return (typeof rule === \"string\");\n }\n if (pattern === \"array\") {\n // !logic test might be superfluous in JavaScript\n return Array.isArray(rule) && ! jsonLogic.is_logic(rule);\n }\n\n if (jsonLogic.is_logic(pattern)) {\n if (jsonLogic.is_logic(rule)) {\n var pattern_op = jsonLogic.get_operator(pattern);\n var rule_op = jsonLogic.get_operator(rule);\n\n if (pattern_op === \"@\" || pattern_op === rule_op) {\n // echo \"\\nOperators match, go deeper\\n\";\n return jsonLogic.rule_like(\n jsonLogic.get_values(rule, false),\n jsonLogic.get_values(pattern, false)\n );\n }\n }\n return false; // pattern is logic, rule isn't, can't be eq\n }\n\n if (Array.isArray(pattern)) {\n if (Array.isArray(rule)) {\n if (pattern.length !== rule.length) {\n return false;\n }\n /*\n Note, array order MATTERS, because we're using this array test logic to consider arguments, where order can matter. (e.g., + is commutative, but '-' or 'if' or 'var' are NOT)\n */\n for (var i = 0; i < pattern.length; i += 1) {\n // If any fail, we fail\n if ( ! jsonLogic.rule_like(rule[i], pattern[i])) {\n return false;\n }\n }\n return true; // If they *all* passed, we pass\n } else {\n return false; // Pattern is array, rule isn't\n }\n }\n\n // Not logic, not array, not a === match for rule.\n return false;\n };\n\n return jsonLogic;\n}));\n","// Strict RFC3339 guard for datetime strings. The date and hour fields are captured so the calendar\n// can be validated separately; the regex only constrains their shape.\nvar RFC3339_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})[Tt](\\d{2}):\\d{2}:\\d{2}(\\.\\d+)?([Zz]|[+-]\\d{2}:\\d{2})$/;\n\n// SemVer 2.0.0 requires major.minor.patch; partial versions are zero-padded to this.\nvar SEMVER_PARTS = 3;\n\n// Longest operand the semver regex is allowed to see. A real version never approaches this; the\n// bound matches MAX_LENGTH in node-semver, and keeps an arbitrarily long property value off the\n// regex regardless of how the engine schedules backtracking.\nvar MAX_SEMVER_LENGTH = 256;\n\n// Epoch milliseconds are compared as int64 elsewhere, so anything at or beyond this is out of range.\nvar MAX_EPOCH_MS = 9223372036854775808;\n\n// Using the official semantic versioning 2.0.0 regular expression to handle cross-platform validation\n// differences on other SDK's. For example, some platforms allow leading zeros even though it is not valid\n// as part of the Semver 2.0.0 spec. See https://semver.org/\nvar SEMVER_REGEX = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n// Registers custom operators into the JSONLogic engine.\n// 1. Semantic Versioning 2.0.0 comparison\n// 2. RFC3339 datetime comparison\nfunction registerCustomOperators(jsonLogic) {\n jsonLogic.add_operation('semver_compare', semverCompare);\n jsonLogic.add_operation('datetime_compare', datetimeCompare);\n}\n\n// Implements a custom operation for semantic versioning comparison that conforms to the semver 2.0.0 standard.\n// Prior to comparison, any leading version prefix is stripped.\nfunction semverCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n if (typeof ops.actual !== 'string' || typeof ops.target !== 'string') {\n return false;\n }\n if (ops.actual.length > MAX_SEMVER_LENGTH || ops.target.length > MAX_SEMVER_LENGTH) {\n return false;\n }\n var actual = normalizeSemver(ops.actual);\n var target = normalizeSemver(ops.target);\n if (!SEMVER_REGEX.test(actual) || !SEMVER_REGEX.test(target)) {\n return false;\n }\n var cmp = compareSemver(actual, target);\n return comparatorMatches(cmp, ops.symbol);\n}\n\n// Strip optional build metadata and separate the core version from pre-release identifiers\nfunction splitSemver(version) {\n var plus = version.indexOf('+');\n if (plus !== -1) {\n version = version.slice(0, plus);\n }\n var dash = version.indexOf('-');\n if (dash === -1) {\n return {core: version.split('.'), prerelease: []};\n }\n return {core: version.slice(0, dash).split('.'), prerelease: version.slice(dash + 1).split('.')};\n}\n\nfunction isNumericIdentifier(identifier) {\n return /^[0-9]+$/.test(identifier);\n}\n\n// Numeric identifiers carry no leading zeros, so the longer run of digits is the larger number.\n// Comparing them as digits rather than as numbers keeps versions past Number.MAX_SAFE_INTEGER ordered\n// correctly.\nfunction compareNumeric(a, b) {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// SemVer 2.0.0 section 11.4: digits compare numerically, a numeric identifier ranks below an\n// alphanumeric one, and anything else compares by ASCII order.\nfunction comparePrereleaseIdentifier(a, b) {\n var aNumeric = isNumericIdentifier(a);\n var bNumeric = isNumericIdentifier(b);\n if (aNumeric && bNumeric) {\n return compareNumeric(a, b);\n }\n if (aNumeric) {\n return -1;\n }\n if (bNumeric) {\n return 1;\n }\n return a < b ? -1 : (a > b ? 1 : 0);\n}\n\n// Ordering per SemVer 2.0.0 section 11. Both operands have already been normalized and matched against\n// the official regex, so the core holds exactly three numeric identifiers and every prerelease field is\n// well-formed; the split needs no error path.\nfunction compareSemver(actualVersion, targetVersion) {\n var actual = splitSemver(actualVersion);\n var target = splitSemver(targetVersion);\n var i, result;\n\n for (i = 0; i < actual.core.length; i++) {\n result = compareNumeric(actual.core[i], target.core[i]);\n if (result !== 0) {\n return result;\n }\n }\n\n // A prerelease ranks below the release it belongs to (section 11.3).\n if (!actual.prerelease.length && !target.prerelease.length) {\n return 0;\n }\n if (!actual.prerelease.length) {\n return 1;\n }\n if (!target.prerelease.length) {\n return -1;\n }\n\n var shared = Math.min(actual.prerelease.length, target.prerelease.length);\n for (i = 0; i < shared; i++) {\n result = comparePrereleaseIdentifier(actual.prerelease[i], target.prerelease[i]);\n if (result !== 0) {\n return result;\n }\n }\n // Every field so far is equal, so the longer list wins (section 11.4.4).\n if (actual.prerelease.length !== target.prerelease.length) {\n return actual.prerelease.length < target.prerelease.length ? -1 : 1;\n }\n return 0;\n}\n\n// Implements a custom operation for datetime comparison.\n// The target value stored on the feature flag is the millisecond epoch, whereas the actual value provided at evaluation time must be RFC-3339 formatted.\nfunction datetimeCompare() {\n var ops = operands(arguments);\n if (!ops) {\n return false;\n }\n var actualSec = convertRfc3339ToUnixSeconds(ops.actual);\n var targetSec = convertUnixMillisecondsToSeconds(ops.target);\n if (actualSec === null || targetSec === null) {\n return false;\n }\n var cmp = actualSec - targetSec;\n return comparatorMatches(cmp, ops.symbol);\n}\n\nfunction operands(args) {\n if (args.length !== 3) {\n return null;\n }\n return { actual: args[0], symbol: args[1], target: args[2] };\n}\n\nfunction comparatorMatches(cmp, symbol) {\n switch (symbol) {\n case '===':\n return cmp === 0;\n case '!==':\n return cmp !== 0;\n case '<':\n return cmp < 0;\n case '<=':\n return cmp <= 0;\n case '>':\n return cmp > 0;\n case '>=':\n return cmp >= 0;\n default:\n return false;\n }\n}\n\nfunction normalizeSemver(version) {\n var stripped = version.trim().replace(/^[vV]/, '');\n\n var suffixStart = stripped.length;\n var separators = ['-', '+'];\n for (var i = 0; i < separators.length; i++) {\n var index = stripped.indexOf(separators[i]);\n if (index !== -1 && index < suffixStart) {\n suffixStart = index;\n }\n }\n\n var core = stripped.slice(0, suffixStart);\n var suffix = stripped.slice(suffixStart);\n\n var parts = core.split('.');\n while (parts.length < SEMVER_PARTS) {\n parts.push('0');\n }\n return parts.join('.') + suffix;\n}\n\n// The regex constrains each field to two digits, which still admits a date that cannot exist, such as\n// 2026-02-30 or 29 February in a common year. Writing the fields into a Date and reading them back\n// settles it: out-of-range fields are normalized into a real instant, so a date that does not exist\n// comes back carrying different fields than it went in with. The three-argument setUTCFullYear sets\n// all three at once, which judges 29 February against the year given rather than a placeholder, and\n// leaves years 0 through 99 alone where Date.UTC would map them into the 1900s. The hour is checked\n// separately because it is not part of the round trip; RFC 3339 section 5.6 allows hours 00 through 23.\nfunction isRealCalendarDate(year, month, day, hour) {\n if (hour > 23) {\n return false;\n }\n var dt = new Date();\n dt.setUTCFullYear(year, month - 1, day);\n return dt.getUTCFullYear() === year && dt.getUTCMonth() === month - 1 && dt.getUTCDate() === day;\n}\n\nfunction convertRfc3339ToUnixSeconds(v) {\n if (typeof v !== 'string') {\n return null;\n }\n var normalized = v.trim().toUpperCase();\n var fields = RFC3339_REGEX.exec(normalized);\n if (!fields) {\n return null;\n }\n if (!isRealCalendarDate(Number(fields[1]), Number(fields[2]), Number(fields[3]), Number(fields[4]))) {\n return null;\n }\n var parsed = new Date(normalized);\n var ms = parsed.getTime();\n if (isNaN(ms)) {\n return null;\n }\n return Math.floor(ms / 1000);\n}\n\nfunction convertUnixMillisecondsToSeconds(v) {\n if (typeof v !== 'number' || !isFinite(v)) {\n return null;\n }\n // A value int64 cannot represent is not a real timestamp; treating one as a bound would let a\n // nonsense target define a rollout window.\n if (v >= MAX_EPOCH_MS || v <= -MAX_EPOCH_MS) {\n return null;\n }\n return truncate(v / 1000);\n}\n\nfunction truncate(n) {\n return n < 0 ? Math.ceil(n) : Math.floor(n);\n}\n\nexport {\n registerCustomOperators,\n semverCompare,\n datetimeCompare\n};\n","import { _ } from '../utils';\nimport jsonLogic from 'json-logic-js';\nimport { registerCustomOperators } from './custom-operators';\n\n// Register typed runtime-targeting operators (semver_compare, datetime_compare) into the JsonLogic engine.\n// Registration happens lazily, when the async targeting bundle loads.\nregisterCustomOperators(jsonLogic);\n\n/**\n * Check if an event matches the given criteria\n * @param {string} eventName - The name of the event being checked\n * @param {Object} properties - Event properties to evaluate against property filters\n * @param {Object} criteria - Criteria to match against, with:\n * - event_name: string - Required event name (case-sensitive match)\n * - property_filters: Object - Optional JsonLogic filters for properties\n * @returns {Object} Result object with:\n * - matches: boolean - Whether the event matches the criteria\n * - error: string|undefined - Error message if evaluation failed\n */\nvar eventMatchesCriteria = function(eventName, properties, criteria) {\n // Check exact event name match (case-sensitive)\n if (eventName !== criteria.event_name) {\n return { matches: false };\n }\n\n // Evaluate property filters using JsonLogic\n var propertyFilters = criteria.property_filters;\n var filtersMatch = true; // default to true if no filters\n\n if (propertyFilters && !_.isEmptyObject(propertyFilters)) {\n try {\n // Use properties as-is for case-sensitive matching\n filtersMatch = jsonLogic.apply(propertyFilters, properties || {});\n } catch (error) {\n return {\n matches: false,\n error: error.toString()\n };\n }\n }\n\n return { matches: filtersMatch };\n};\n\nexport {\n eventMatchesCriteria\n};\n","import { window } from '../window';\nimport { TARGETING_GLOBAL_NAME } from '../config';\nimport { eventMatchesCriteria } from './event-matcher';\n\n// Create targeting library object\nvar targetingLibrary = {};\ntargetingLibrary['eventMatchesCriteria'] = eventMatchesCriteria;\n\n// Set global Promise (use bracket notation to prevent minification)\n// This is the ONE AND ONLY global - matches recorder pattern\nwindow[TARGETING_GLOBAL_NAME] = Promise.resolve(targetingLibrary);\n"],"names":["win","loc","Config","TARGETING_GLOBAL_NAME","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","timer","fn","obj","name","val","config","err","first","last","item","Item","self","f","schedule","isThenable","o","_then","oType","notify","i","notifyIsolated","cb","chain","ret","resolve","msg","defWrapper","MakeDefWrapper","reject","iteratePromises","Constructor","arr","resolver","rejecter","idx","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","len","msgs","count","ArrayProto","FuncProto","ObjProto","slice","toString","hasOwnProperty","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","_","func","context","args","bound","ctor","result","iterator","l","key","source","prop","iterable","callback","results","value","target","found","str","needle","subclass","superclass","encoded","v","k","d","pad","n","p","length","mixed_val","quote","string","escapable","meta","a","c","holder","gap","indent","mind","partial","at","ch","escapee","text","error","m","e","next","number","hex","uffff","white","word","array","object","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","start","end","stringl","c1","uuid","x","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","url","param","regexS","regex","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","getLocalStorage","_err","getSessionStorage","register_event","element","type","handler","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","event","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","selector","className","getElementsBySelector","tokens","token","tagName","foundCount","j","elements","currentContextIndex","currentContext","id","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","params","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","matches","split","extra_props","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","parts","tld","JSONStringify","JSONParse","root","factory","module","this","arg","arrayUnique","jsonLogic","operations","b","temp","not_found","sub_props","missing","keys","need_count","options","are_missing","logic","op","values","current","scopedLogic","scopedData","initial","datum","accumulator","sub_ops","operation","collection","code","rule","pattern","pattern_op","rule_op","RFC3339_REGEX","SEMVER_PARTS","MAX_SEMVER_LENGTH","MAX_EPOCH_MS","SEMVER_REGEX","registerCustomOperators","semverCompare","datetimeCompare","ops","operands","actual","normalizeSemver","cmp","compareSemver","comparatorMatches","splitSemver","version","plus","dash","isNumericIdentifier","identifier","compareNumeric","comparePrereleaseIdentifier","aNumeric","bNumeric","actualVersion","targetVersion","shared","actualSec","convertRfc3339ToUnixSeconds","targetSec","convertUnixMillisecondsToSeconds","symbol","stripped","suffixStart","separators","index","core","suffix","isRealCalendarDate","year","month","day","hour","dt","normalized","fields","parsed","ms","truncate","eventMatchesCriteria","eventName","properties","criteria","propertyFilters","filtersMatch","targetingLibrary"],"mappings":"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","x_google_ignoreList":[4]} \ No newline at end of file diff --git a/dist/mixpanel-with-async-modules.cjs.d.ts b/dist/mixpanel-with-async-modules.cjs.d.ts index 6c9c4660..a0156e5f 100644 --- a/dist/mixpanel-with-async-modules.cjs.d.ts +++ b/dist/mixpanel-with-async-modules.cjs.d.ts @@ -10,6 +10,15 @@ export type Query = string | Element | Element[]; export type RemoteSettingType = "disabled" | "fallback" | "strict"; +/** + * What the SDK does before the visitor decides. "no_consent_required" tracks until + * opt_out_tracking(). "require_consent" stores and sends nothing until opt_in_tracking(); with it, + * opt_out_tracking_persistence_type and opt_out_persistence_by_default are ignored, and + * opt_out_tracking_cookie_prefix still names the stored flag. Unset means "no_consent_required"; + * opt_out_tracking_by_default applies only when consent_mode is unset. + */ +export type ConsentMode = "no_consent_required" | "require_consent" | null; + export interface EventTriggerProps { percentage: number; @@ -267,6 +276,7 @@ export interface Config { opt_out_persistence_by_default: boolean; opt_out_tracking_persistence_type: Persistence; opt_out_tracking_cookie_prefix: string; + consent_mode: ConsentMode; inapp_protocol: string; inapp_link_new_window: boolean; ignore_dnt: boolean; diff --git a/dist/mixpanel-with-async-modules.cjs.js b/dist/mixpanel-with-async-modules.cjs.js index 2183cfdc..3fdafcb6 100644 --- a/dist/mixpanel-with-async-modules.cjs.js +++ b/dist/mixpanel-with-async-modules.cjs.js @@ -2,7 +2,7 @@ var Config = { DEBUG: false, - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules @@ -10,8 +10,8 @@ var TARGETING_GLOBAL_NAME = '__mp_targeting'; var RECORDER_GLOBAL_NAME = '__mp_recorder'; // Constants that are injected at build-time for the names of async modules. -var RECORDER_FILENAME = 'mixpanel-recorder-Cbb3yyAg.js'; -var TARGETING_FILENAME = 'mixpanel-targeting-DVY6oAEA.js'; +var RECORDER_FILENAME = 'mixpanel-recorder-BSb8F2GO.js'; +var TARGETING_FILENAME = 'mixpanel-targeting-SfM6RnV-.js'; // since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file var win; @@ -3946,11 +3946,13 @@ var getTargetingPromise = function(loadExtraBundle, targetingSrc) { /** * @type {import('./wrapper').StorageWrapper} */ -var IDBStorageWrapper = function (dbName, storeName, versionData) { +var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -3961,25 +3963,47 @@ IDBStorageWrapper.prototype._openDb = function () { var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -4228,16 +4252,23 @@ FeatureFlagPersistence.prototype.save = function(context, flagsMap, pendingFirst }); }; +/** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger$5.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger$5.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger$5.log('No persisted variants cleared from IndexedDB:', error); }); }; @@ -4300,11 +4331,15 @@ var FeatureFlagManager = function(initOptions) { this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger$4.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -4320,7 +4355,7 @@ FeatureFlagManager.prototype.init = function() { this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -4388,7 +4423,7 @@ FeatureFlagManager.prototype.getConfig = function(key) { }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -4419,6 +4454,14 @@ FeatureFlagManager.prototype.areFlagsReady = function() { return !!this.flags; }; +/** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ +FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); +}; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -4714,6 +4757,9 @@ FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) { }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); @@ -5036,6 +5082,8 @@ var RecorderManager = function(initOptions) { this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -5047,8 +5095,8 @@ var RecorderManager = function(initOptions) { }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console.log('Load recorder check skipped without persistence'); return PromisePolyfill.resolve(false); } @@ -5075,6 +5123,10 @@ RecorderManager.prototype.shouldLoadRecorder = function() { }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console.log('Session recording skipped without consent'); + return PromisePolyfill.resolve(); + } if (!win['MutationObserver']) { console.critical('Browser does not support MutationObserver; skipping session recording'); return PromisePolyfill.resolve(); @@ -5083,6 +5135,11 @@ RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, var loadRecorder = _.bind(function(startNewIfInactive) { return new PromisePolyfill(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new win[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); @@ -5714,6 +5771,7 @@ var RequestQueue = function (storageKey, options) { }); } this.reportError = options.errorReporter || _.bind(logger$1.error, logger$1); + this.consentGate = options.consentGate; this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios @@ -5765,7 +5823,7 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { 'payload': item }; - if (!this.usePersistence) { + if (!this._persists()) { this.memQueue.push(queueEntry); return PromisePolyfill.resolve(true); } else { @@ -5773,7 +5831,20 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { } }; +/** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ +RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); +}; + RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -5873,7 +5944,7 @@ RequestQueue.prototype.removeItemsByID = function (ids) { }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -5961,7 +6032,7 @@ var updatePayloads = function (existingItems, itemsToUpdate) { */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -6016,11 +6087,14 @@ RequestQueue.prototype.readFromStorage = function () { RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); }, this)) - .then(function () { - return true; - }) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -6065,7 +6139,8 @@ var RequestBatcher = function(storageKey, options) { sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -6380,721 +6455,448 @@ RequestBatcher.prototype.reportError = function(msg, err) { } }; -/** - * GDPR utils - * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. - * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. - */ +/* eslint camelcase: "off" */ -/** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ +/** @const */ var SET_ACTION = '$set'; +/** @const */ var SET_ONCE_ACTION = '$set_once'; +/** @const */ var UNSET_ACTION = '$unset'; +/** @const */ var ADD_ACTION = '$add'; +/** @const */ var APPEND_ACTION = '$append'; +/** @const */ var UNION_ACTION = '$union'; +/** @const */ var REMOVE_ACTION = '$remove'; +/** @const */ var DELETE_ACTION = '$delete'; -/** Public **/ +// Common internal methods for mixpanel.people and mixpanel.group APIs. +// These methods shouldn't involve network I/O. +var apiActions = { + set_action: function(prop, to) { + var data = {}; + var $set = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set[k] = v; + } + }, this); + } else { + $set[prop] = to; + } -var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; + data[SET_ACTION] = $set; + return data; + }, -/** - * Opt the user in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function optIn(token, options) { - _optInOut(true, token, options); -} + unset_action: function(prop) { + var data = {}; + var $unset = []; + if (!_.isArray(prop)) { + prop = [prop]; + } -/** - * Opt the user out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not - */ -function optOut(token, options) { - _optInOut(false, token, options); -} + _.each(prop, function(k) { + if (!this._is_reserved_property(k)) { + $unset.push(k); + } + }, this); -/** - * Check whether the user has opted in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {boolean} whether the user has opted in to the given opt type - */ -function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; -} + data[UNSET_ACTION] = $unset; + return data; + }, -/** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ -function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + set_once_action: function(prop, to) { + var data = {}; + var $set_once = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set_once[k] = v; + } + }, this); + } else { + $set_once[prop] = to; + } + data[SET_ONCE_ACTION] = $set_once; + return data; + }, + + union_action: function(list_name, values) { + var data = {}; + var $union = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $union[k] = _.isArray(v) ? v : [v]; + } + }, this); + } else { + $union[list_name] = _.isArray(values) ? values : [values]; + } + data[UNION_ACTION] = $union; + return data; + }, + + append_action: function(list_name, value) { + var data = {}; + var $append = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $append[k] = v; + } + }, this); + } else { + $append[list_name] = value; + } + data[APPEND_ACTION] = $append; + return data; + }, + + remove_action: function(list_name, value) { + var data = {}; + var $remove = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $remove[k] = v; + } + }, this); + } else { + $remove[list_name] = value; + } + data[REMOVE_ACTION] = $remove; + return data; + }, + + delete_action: function() { + var data = {}; + data[DELETE_ACTION] = ''; + return data; } - return optedOut; -} +}; -/** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); -} +/* eslint camelcase: "off" */ /** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * Mixpanel Group Object + * @class */ -function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} +function MixpanelGroup() {} + +_.extend(MixpanelGroup.prototype, apiActions); /** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate */ -function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} +MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { + this._mixpanel = mixpanel_instance; + this._group_key = group_key; + this._group_id = group_id; + this.consentGate = consentGate; +}; /** - * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function clearOptInOut(token, options) { - options = options || {}; - _getStorage(options).remove( - _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain - ); -} - -/** Private **/ - -/** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage - */ -function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; -} - -/** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type + * Set properties on a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, dates, or lists + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; -} +MixpanelGroup.prototype.set = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + return this._send_request(data, callback); +}; /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type + * Set properties on a group, only if they do not yet exist. + * This will not overwrite previous group property values, unlike + * group.set(). + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set_once({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, lists or dates + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); -} +MixpanelGroup.prototype.set_once = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); + return this._send_request(data, callback); +}; /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read + * Unset properties on a group permanently. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').unset('Founded'); + * ``` + * + * @param {String} prop The name of the property. + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; +MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; -} + var data = this.unset_action(prop); + return this._send_request(data, callback); +}; /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true + * Merge a given list with a list-valued group property, excluding duplicate values. + * + * @example + * ```js + * // merge a value to a list, creating it if needed + * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Array} values Values to merge with the given property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; +MixpanelGroup.prototype.union = function(list_name, values, callback) { + if (_.isObject(list_name)) { + callback = values; } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; - - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); } - }); - - return hasDntOn; -} + return; + } + var data = this.union_action(list_name, values); + return this._send_request(data, callback); +}; /** - * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type - * @param {boolean} optValue - whether to opt the user in or out for the given opt type - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + * Permanently delete a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').delete(); + * ``` + * + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _optInOut(optValue, token, options) { - if (!_.isString(token) || !token.length) { - console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); +MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } return; } - - options = options || {}; - - _getStorage(options).set( - _getStorageKey(token, options), - optValue ? 1 : 0, - _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, - !!options.crossSubdomainCookie, - !!options.secureCookie, - !!options.crossSiteCookie, - options.cookieDomain - ); - - if (options.track && optValue) { // only track event if opting in (optValue=true) - options.track(options.trackEventName || '$opt_in', options.trackProperties, { - 'send_immediately': true - }); - } -} + // bracket notation above prevents a minification error related to reserved words + var data = this.delete_action(); + return this._send_request(data, callback); +}; /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out + * Remove a property from a group. The value will be ignored if doesn't exist. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Object} value Value to remove from the given group property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; - - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console.error('Unexpected error when checking tracking opt-out status: ' + err); - } - - if (!optedOut) { - return method.apply(this, arguments); - } - - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { +MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { callback(0); } - return; - }; -} + } + var data = this.remove_action(list_name, value); + return this._send_request(data, callback); +}; -/* eslint camelcase: "off" */ +MixpanelGroup.prototype._send_request = function(data, callback) { + data['$group_key'] = this._group_key; + data['$group_id'] = this._group_id; + data['$token'] = this._get_config('token'); + var date_encoded_data = _.encodeDates(data); + return this._mixpanel._track_or_batch({ + type: 'groups', + data: date_encoded_data, + endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], + batcher: this._mixpanel.request_batchers.groups + }, callback); +}; -/** @const */ var SET_ACTION = '$set'; -/** @const */ var SET_ONCE_ACTION = '$set_once'; -/** @const */ var UNSET_ACTION = '$unset'; -/** @const */ var ADD_ACTION = '$add'; -/** @const */ var APPEND_ACTION = '$append'; -/** @const */ var UNION_ACTION = '$union'; -/** @const */ var REMOVE_ACTION = '$remove'; -/** @const */ var DELETE_ACTION = '$delete'; - -// Common internal methods for mixpanel.people and mixpanel.group APIs. -// These methods shouldn't involve network I/O. -var apiActions = { - set_action: function(prop, to) { - var data = {}; - var $set = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set[k] = v; - } - }, this); - } else { - $set[prop] = to; - } - - data[SET_ACTION] = $set; - return data; - }, - - unset_action: function(prop) { - var data = {}; - var $unset = []; - if (!_.isArray(prop)) { - prop = [prop]; - } - - _.each(prop, function(k) { - if (!this._is_reserved_property(k)) { - $unset.push(k); - } - }, this); - - data[UNSET_ACTION] = $unset; - return data; - }, - - set_once_action: function(prop, to) { - var data = {}; - var $set_once = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set_once[k] = v; - } - }, this); - } else { - $set_once[prop] = to; - } - data[SET_ONCE_ACTION] = $set_once; - return data; - }, - - union_action: function(list_name, values) { - var data = {}; - var $union = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $union[k] = _.isArray(v) ? v : [v]; - } - }, this); - } else { - $union[list_name] = _.isArray(values) ? values : [values]; - } - data[UNION_ACTION] = $union; - return data; - }, - - append_action: function(list_name, value) { - var data = {}; - var $append = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $append[k] = v; - } - }, this); - } else { - $append[list_name] = value; - } - data[APPEND_ACTION] = $append; - return data; - }, +MixpanelGroup.prototype._is_reserved_property = function(prop) { + return prop === '$group_key' || prop === '$group_id'; +}; - remove_action: function(list_name, value) { - var data = {}; - var $remove = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $remove[k] = v; - } - }, this); - } else { - $remove[list_name] = value; - } - data[REMOVE_ACTION] = $remove; - return data; - }, +MixpanelGroup.prototype._get_config = function(conf) { + return this._mixpanel.get_config(conf); +}; - delete_action: function() { - var data = {}; - data[DELETE_ACTION] = ''; - return data; - } +MixpanelGroup.prototype.toString = function() { + return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; }; +// MixpanelGroup Exports +// (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would +// make TypeScript type them as `any`, which breaks the generated API docs) +var MixpanelGroupProto = MixpanelGroup.prototype; +MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; +MixpanelGroupProto['set'] = MixpanelGroupProto.set; +MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; +MixpanelGroupProto['union'] = MixpanelGroupProto.union; +MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; +MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; + /* eslint camelcase: "off" */ /** - * Mixpanel Group Object + * Mixpanel People Object * @class */ -function MixpanelGroup() {} +function MixpanelPeople() {} -_.extend(MixpanelGroup.prototype, apiActions); +_.extend(MixpanelPeople.prototype, apiActions); -MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { +/** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ +MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; - this._group_key = group_key; - this._group_id = group_id; + this.consentGate = consentGate; }; -MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** - * Set properties on a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, dates, or lists - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, to, callback) { - var data = this.set_action(prop, to); +* Set properties on a user record. +* +* @example +* ```js +* mixpanel.people.set('gender', 'm'); +* +* // or set multiple properties at once +* mixpanel.people.set({ +* 'Company': 'Acme', +* 'Plan': 'Premium', +* 'Upgrade date': new Date() +* }); +* // properties can be strings, integers, dates, or lists +* ``` +* +* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. +* @param {*} [to] A value to set on the given property name +* @param {Function} [callback] If provided, the callback will be called after tracking the event. +*/ +MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + // make sure that the referrer info has been updated and saved + if (this._get_config('save_referrer')) { + this._mixpanel['persistence'].update_referrer_info(document.referrer); + } + + // update $set object with default people properties + data[SET_ACTION] = _.extend( + {}, + _.info.people_properties(), + data[SET_ACTION] + ); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** - * Set properties on a group, only if they do not yet exist. - * This will not overwrite previous group property values, unlike - * group.set(). - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set_once({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, lists or dates - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); +* Set properties on a user record, only if they do not yet exist. +* This will not overwrite previous people property values, unlike +* people.set(). +* +* @example +* ```js +* mixpanel.people.set_once('First Login Date', new Date()); +* +* // or set multiple properties at once +* mixpanel.people.set_once({ +* 'First Login Date': new Date(), +* 'Starting Plan': 'Premium' +* }); +* +* // properties can be strings, integers or dates +* ``` +* +* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. +* @param {*} [to] A value to set on the given property name +* @param {Function} [callback] If provided, the callback will be called after tracking the event. +*/ +MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( -/** - * Unset properties on a group permanently. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').unset('Founded'); - * ``` - * - * @param {String} prop The name of the property. - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, callback) { - var data = this.unset_action(prop); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( -/** - * Merge a given list with a list-valued group property, excluding duplicate values. - * - * @example - * ```js - * // merge a value to a list, creating it if needed - * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Array} values Values to merge with the given property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(list_name, values, callback) { - if (_.isObject(list_name)) { - callback = values; - } - var data = this.union_action(list_name, values); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( -/** - * Permanently delete a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').delete(); - * ``` - * - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(callback) { - // bracket notation above prevents a minification error related to reserved words - var data = this.delete_action(); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( -/** - * Remove a property from a group. The value will be ignored if doesn't exist. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Object} value Value to remove from the given group property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(list_name, value, callback) { - var data = this.remove_action(list_name, value); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype._send_request = function(data, callback) { - data['$group_key'] = this._group_key; - data['$group_id'] = this._group_id; - data['$token'] = this._get_config('token'); - - var date_encoded_data = _.encodeDates(data); - return this._mixpanel._track_or_batch({ - type: 'groups', - data: date_encoded_data, - endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], - batcher: this._mixpanel.request_batchers.groups - }, callback); -}; - -MixpanelGroup.prototype._is_reserved_property = function(prop) { - return prop === '$group_key' || prop === '$group_id'; -}; - -MixpanelGroup.prototype._get_config = function(conf) { - return this._mixpanel.get_config(conf); -}; - -MixpanelGroup.prototype.toString = function() { - return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; -}; - -// MixpanelGroup Exports -// (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would -// make TypeScript type them as `any`, which breaks the generated API docs) -var MixpanelGroupProto = MixpanelGroup.prototype; -MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; -MixpanelGroupProto['set'] = MixpanelGroupProto.set; -MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; -MixpanelGroupProto['union'] = MixpanelGroupProto.union; -MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; -MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; - -/* eslint camelcase: "off" */ - -/** - * Mixpanel People Object - * @class - */ -function MixpanelPeople() {} - -_.extend(MixpanelPeople.prototype, apiActions); - -MixpanelPeople.prototype._init = function(mixpanel_instance) { - this._mixpanel = mixpanel_instance; -}; - -MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( -/** -* Set properties on a user record. -* -* @example -* ```js -* mixpanel.people.set('gender', 'm'); -* -* // or set multiple properties at once -* mixpanel.people.set({ -* 'Company': 'Acme', -* 'Plan': 'Premium', -* 'Upgrade date': new Date() -* }); -* // properties can be strings, integers, dates, or lists -* ``` -* -* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. -* @param {*} [to] A value to set on the given property name -* @param {Function} [callback] If provided, the callback will be called after tracking the event. -*/ -function(prop, to, callback) { - var data = this.set_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - // make sure that the referrer info has been updated and saved - if (this._get_config('save_referrer')) { - this._mixpanel['persistence'].update_referrer_info(document.referrer); - } - - // update $set object with default people properties - data[SET_ACTION] = _.extend( - {}, - _.info.people_properties(), - data[SET_ACTION] - ); - return this._send_request(data, callback); -}); - -MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( -/** -* Set properties on a user record, only if they do not yet exist. -* This will not overwrite previous people property values, unlike -* people.set(). -* -* @example -* ```js -* mixpanel.people.set_once('First Login Date', new Date()); -* -* // or set multiple properties at once -* mixpanel.people.set_once({ -* 'First Login Date': new Date(), -* 'Starting Plan': 'Premium' -* }); -* -* // properties can be strings, integers or dates -* ``` -* -* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. -* @param {*} [to] A value to set on the given property name -* @param {Function} [callback] If provided, the callback will be called after tracking the event. -*/ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - return this._send_request(data, callback); -}); - -MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -7109,12 +6911,17 @@ MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, callback) { +MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -7141,7 +6948,16 @@ MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, by, callback) { +MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -7155,7 +6971,6 @@ function(prop, by, callback) { } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -7167,9 +6982,8 @@ function(prop, by, callback) { data[ADD_ACTION] = $add; return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -7190,15 +7004,20 @@ MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -7211,15 +7030,20 @@ MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -7247,15 +7071,20 @@ MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, values, callback) { +MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -7277,9 +7106,15 @@ MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ -function(amount, properties, callback) { // eslint-disable-line no-unused-vars +MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); -}); +}; /** * Permanently clear all revenue report transactions from the @@ -7493,428 +7328,1390 @@ MixpanelPeople.prototype['toString'] = MixpanelPeople.prototype.toString; /* eslint camelcase: "off" */ -/* - * Constants +/* + * Constants + */ +/** @const */ var SET_QUEUE_KEY = '__mps'; +/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; +/** @const */ var UNSET_QUEUE_KEY = '__mpus'; +/** @const */ var ADD_QUEUE_KEY = '__mpa'; +/** @const */ var APPEND_QUEUE_KEY = '__mpap'; +/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; +/** @const */ var UNION_QUEUE_KEY = '__mpu'; +// This key is deprecated, but we want to check for it to see whether aliasing is allowed. +/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; +/** @const */ var ALIAS_ID_KEY = '__alias'; +/** @const */ var EVENT_TIMERS_KEY = '__timers'; +/** @const */ var RESERVED_PROPERTIES = [ + SET_QUEUE_KEY, + SET_ONCE_QUEUE_KEY, + UNSET_QUEUE_KEY, + ADD_QUEUE_KEY, + APPEND_QUEUE_KEY, + REMOVE_QUEUE_KEY, + UNION_QUEUE_KEY, + PEOPLE_DISTINCT_ID_KEY, + ALIAS_ID_KEY, + EVENT_TIMERS_KEY +]; + +// the store while persistence is off: nothing is read or written +/** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} +}; + +/** + * Mixpanel Persistence Object + * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() + */ +var MixpanelPersistence = function(config, options) { + this['props'] = {}; + this.campaign_params_saved = false; + + if (config['persistence_name']) { + this.name = 'mp_' + config['persistence_name']; + } else { + this.name = 'mp_' + config['token'] + '_mixpanel'; + } + + var storage_type = config['persistence']; + if (storage_type !== 'cookie' && storage_type !== 'localStorage') { + console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); + config['persistence'] = 'cookie'; + } + this.storage_type = config['persistence']; + + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } +}; + +MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; + } else { + this.backend = _.cookie; + } + this.storage = this.backend; +}; + +MixpanelPersistence.prototype.properties = function() { + var p = {}; + + this.load(); + + // Filter out reserved properties + _.each(this['props'], function(v, k) { + if (!_.include(RESERVED_PROPERTIES, k)) { + p[k] = v; + } + }); + return p; +}; + +MixpanelPersistence.prototype.load = function() { + var entry = this.storage.parse(this.name); + + if (entry) { + this['props'] = _.extend({}, entry); + } +}; + +MixpanelPersistence.prototype.upgrade = function() { + var old_cookie, + old_localstorage; + + // if transferring from cookie to localStorage or vice-versa, copy existing + // super properties over to new storage mode + if (this.backend === _.localStorage) { + old_cookie = _.cookie.parse(this.name); + + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + + if (old_cookie) { + this.register_once(old_cookie); + } + } else if (this.backend === _.cookie) { + old_localstorage = _.localStorage.parse(this.name); + + _.localStorage.remove(this.name); + + if (old_localstorage) { + this.register_once(old_localstorage); + } + } +}; + +MixpanelPersistence.prototype.save = function() { + this.storage.set( + this.name, + JSONStringify(this['props']), + this.expire_days, + this.cross_subdomain, + this.secure, + this.cross_site, + this.cookie_domain + ); +}; + +MixpanelPersistence.prototype.load_prop = function(key) { + this.load(); + return this['props'][key]; +}; + +MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } + // remove both domain and subdomain cookies + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); +}; + +// removes the storage entry and deletes all loaded data +// forced name for tests +MixpanelPersistence.prototype.clear = function() { + this.remove(); + this['props'] = {}; +}; + +/** +* @param {Object} props +* @param {*=} default_value +* @param {number=} days +*/ +MixpanelPersistence.prototype.register_once = function(props, default_value, days) { + if (_.isObject(props)) { + if (typeof(default_value) === 'undefined') { default_value = 'None'; } + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + + _.each(props, function(val, prop) { + if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { + this['props'][prop] = val; + } + }, this); + + this.save(); + + return true; + } + return false; +}; + +/** +* @param {Object} props +* @param {number=} days +*/ +MixpanelPersistence.prototype.register = function(props, days) { + if (_.isObject(props)) { + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + _.extend(this['props'], props); + this.save(); + + return true; + } + return false; +}; + +MixpanelPersistence.prototype.unregister = function(prop) { + this.load(); + if (prop in this['props']) { + delete this['props'][prop]; + this.save(); + } +}; + +MixpanelPersistence.prototype.update_search_keyword = function(referrer) { + this.register(_.info.searchInfo(referrer)); +}; + +// EXPORTED METHOD, we test this directly. +MixpanelPersistence.prototype.update_referrer_info = function(referrer) { + // If referrer doesn't exist, we want to note the fact that it was type-in traffic. + this.register_once({ + '$initial_referrer': referrer || '$direct', + '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' + }, ''); +}; + +MixpanelPersistence.prototype.get_referrer_info = function() { + return _.strip_empty_properties({ + '$initial_referrer': this['props']['$initial_referrer'], + '$initial_referring_domain': this['props']['$initial_referring_domain'] + }); +}; + +MixpanelPersistence.prototype.update_config = function(config) { + this.default_expiry = this.expire_days = config['cookie_expiration']; + this.set_disabled(config['disable_persistence']); + this.set_cookie_domain(config['cookie_domain']); + this.set_cross_site(config['cross_site_cookie']); + this.set_cross_subdomain(config['cross_subdomain_cookie']); + this.set_secure(config['secure_cookie']); +}; + +/** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ +MixpanelPersistence.prototype.set_disabled = function(disabled) { + this.disabled = disabled; + this._update_storage(); +}; + +/** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ +MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); +}; + +/** + * Read and write storage again, saving the props in memory to it. + */ +MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); +}; + +/** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ +MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); +}; + +MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; + this.remove(); + } else { + this.storage = this.backend; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { + if (cookie_domain !== this.cookie_domain) { + this.remove(); + this.cookie_domain = cookie_domain; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_site = function(cross_site) { + if (cross_site !== this.cross_site) { + this.cross_site = cross_site; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { + if (cross_subdomain !== this.cross_subdomain) { + this.cross_subdomain = cross_subdomain; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.get_cross_subdomain = function() { + return this.cross_subdomain; +}; + +MixpanelPersistence.prototype.set_secure = function(secure) { + if (secure !== this.secure) { + this.secure = secure ? true : false; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { + var q_key = this._get_queue_key(queue), + q_data = data[queue], + set_q = this._get_or_create_queue(SET_ACTION), + set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), + unset_q = this._get_or_create_queue(UNSET_ACTION), + add_q = this._get_or_create_queue(ADD_ACTION), + union_q = this._get_or_create_queue(UNION_ACTION), + remove_q = this._get_or_create_queue(REMOVE_ACTION, []), + append_q = this._get_or_create_queue(APPEND_ACTION, []); + + if (q_key === SET_QUEUE_KEY) { + // Update the set queue - we can override any existing values + _.extend(set_q, q_data); + // if there was a pending increment, override it + // with the set. + this._pop_from_people_queue(ADD_ACTION, q_data); + // if there was a pending union, override it + // with the set. + this._pop_from_people_queue(UNION_ACTION, q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === SET_ONCE_QUEUE_KEY) { + // only queue the data if there is not already a set_once call for it. + _.each(q_data, function(v, k) { + if (!(k in set_once_q)) { + set_once_q[k] = v; + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNSET_QUEUE_KEY) { + _.each(q_data, function(prop) { + + // undo previously-queued actions on this key + _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { + if (prop in enqueued_obj) { + delete enqueued_obj[prop]; + } + }); + _.each(append_q, function(append_obj) { + if (prop in append_obj) { + delete append_obj[prop]; + } + }); + + unset_q[prop] = true; + + }); + } else if (q_key === ADD_QUEUE_KEY) { + _.each(q_data, function(v, k) { + // If it exists in the set queue, increment + // the value + if (k in set_q) { + set_q[k] += v; + } else { + // If it doesn't exist, update the add + // queue + if (!(k in add_q)) { + add_q[k] = 0; + } + add_q[k] += v; + } + }, this); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNION_QUEUE_KEY) { + _.each(q_data, function(v, k) { + if (_.isArray(v)) { + if (!(k in union_q)) { + union_q[k] = []; + } + // Prevent duplicate values + _.each(v, function(item) { + if (!_.include(union_q[k], item)) { + union_q[k].push(item); + } + }); + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === REMOVE_QUEUE_KEY) { + remove_q.push(q_data); + this._pop_from_people_queue(APPEND_ACTION, q_data); + } else if (q_key === APPEND_QUEUE_KEY) { + append_q.push(q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } + + console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); + console.log(data); + + this.save(); +}; + +MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { + var q = this['props'][this._get_queue_key(queue)]; + if (!_.isUndefined(q)) { + _.each(data, function(v, k) { + if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { + // list actions: only remove if both k+v match + // e.g. remove should not override append in a case like + // append({foo: 'bar'}); remove({foo: 'qux'}) + _.each(q, function(queued_action) { + if (queued_action[k] === v) { + delete queued_action[k]; + } + }); + } else { + delete q[k]; + } + }, this); + } +}; + +MixpanelPersistence.prototype.load_queue = function(queue) { + return this.load_prop(this._get_queue_key(queue)); +}; + +MixpanelPersistence.prototype._get_queue_key = function(queue) { + if (queue === SET_ACTION) { + return SET_QUEUE_KEY; + } else if (queue === SET_ONCE_ACTION) { + return SET_ONCE_QUEUE_KEY; + } else if (queue === UNSET_ACTION) { + return UNSET_QUEUE_KEY; + } else if (queue === ADD_ACTION) { + return ADD_QUEUE_KEY; + } else if (queue === APPEND_ACTION) { + return APPEND_QUEUE_KEY; + } else if (queue === REMOVE_ACTION) { + return REMOVE_QUEUE_KEY; + } else if (queue === UNION_ACTION) { + return UNION_QUEUE_KEY; + } else { + console.error('Invalid queue:', queue); + } +}; + +MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { + var key = this._get_queue_key(queue); + default_val = _.isUndefined(default_val) ? {} : default_val; + return this['props'][key] || (this['props'][key] = default_val); +}; + +MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + timers[event_name] = timestamp; + this['props'][EVENT_TIMERS_KEY] = timers; + this.save(); +}; + +MixpanelPersistence.prototype.remove_event_timer = function(event_name) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + var timestamp = timers[event_name]; + if (!_.isUndefined(timestamp)) { + delete this['props'][EVENT_TIMERS_KEY][event_name]; + this.save(); + } + return timestamp; +}; + +/** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + + +/** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; +/** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + +/** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + +/** @const */ var DECISION_NONE = 'none'; +/** @const */ var DECISION_OPTED_IN = 'opted_in'; +/** @const */ var DECISION_OPTED_OUT = 'opted_out'; +// Do Not Track counts as an objection +/** @const */ var DECISION_OBJECTED = 'objected'; + +/** @const */ var STATE_FULL = 'full'; +/** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; +/** @const */ var STATE_BLOCKED = 'blocked'; + +/** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} +}; + +/** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ +/** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} +}; + +/** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ +function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; +} + +/** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ +function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; +} + +/** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + +/** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ +function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; +} + +/** + * GDPR utils + * + * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection + * and privacy for all individuals within the European Union. It addresses the export of personal + * data outside the EU. The GDPR aims primarily to give control back to citizens and residents + * over their personal data and to simplify the regulatory environment for international business + * by unifying the regulation within the EU. + * + * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. + * These functions are used internally by the SDK and are not intended to be publicly exposed. + */ + + +/** + * A function used to track a Mixpanel event (e.g. MixpanelLib.track) + * @callback trackFunction + * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. + * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. + * @param {Function} [callback] If provided, the callback function will be called after tracking the event. + */ + +/** Public **/ + +var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; + +/** + * Opt the user in to data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function optIn(token, options) { + _optInOut(true, token, options); +} + +/** + * Opt the user out of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not + */ +function optOut(token, options) { + _optInOut(false, token, options); +} + +/** + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ +function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; +} + +/** + * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function clearOptInOut(token, options) { + options = options || {}; + _getStorage(options).remove( + _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain + ); +} + +/** Private **/ + +/** + * Get storage util + * @param {Object} [options] + * @param {string} [options.persistenceType] + * @returns {object} either _.cookie or _.localstorage + */ +function _getStorage(options) { + options = options || {}; + return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; +} + +/** + * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the name of the cookie for the given opt type + */ +function _getStorageKey(token, options) { + options = options || {}; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; +} + +/** + * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the value of the cookie for the given opt type + */ +function readOptInOutFlag(token, options) { + return _getStorage(options).get(_getStorageKey(token, options)); +} + +/** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ +function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); +} + +/** + * Check whether the user has set the DNT/doNotTrack setting to true in their browser + * @param {Object} [options] + * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests + * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false + * @returns {boolean} whether the DNT setting is true + */ +function hasDoNotTrackFlagOn(options) { + if (options && options.ignoreDnt) { + return false; + } + var win$1 = (options && options.window) || win; + var nav = win$1['navigator'] || {}; + var hasDntOn = false; + + _.each([ + nav['doNotTrack'], // standard + nav['msDoNotTrack'], + win$1['doNotTrack'] + ], function(dntValue) { + if (_.includes([true, 1, '1', 'yes'], dntValue)) { + hasDntOn = true; + } + }); + + return hasDntOn; +} + +/** + * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type + * @param {boolean} optValue - whether to opt the user in or out for the given opt type + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function _optInOut(optValue, token, options) { + if (!_.isString(token) || !token.length) { + console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + return; + } + + options = options || {}; + + _getStorage(options).set( + _getStorageKey(token, options), + optValue ? 1 : 0, + _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, + !!options.crossSubdomainCookie, + !!options.secureCookie, + !!options.crossSiteCookie, + options.cookieDomain + ); + + if (options.track && optValue) { // only track event if opting in (optValue=true) + options.track(options.trackEventName || '$opt_in', options.trackProperties, { + 'send_immediately': true + }); + } +} + +/** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. */ -/** @const */ var SET_QUEUE_KEY = '__mps'; -/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; -/** @const */ var UNSET_QUEUE_KEY = '__mpus'; -/** @const */ var ADD_QUEUE_KEY = '__mpa'; -/** @const */ var APPEND_QUEUE_KEY = '__mpap'; -/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; -/** @const */ var UNION_QUEUE_KEY = '__mpu'; -// This key is deprecated, but we want to check for it to see whether aliasing is allowed. -/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; -/** @const */ var ALIAS_ID_KEY = '__alias'; -/** @const */ var EVENT_TIMERS_KEY = '__timers'; -/** @const */ var RESERVED_PROPERTIES = [ - SET_QUEUE_KEY, - SET_ONCE_QUEUE_KEY, - UNSET_QUEUE_KEY, - ADD_QUEUE_KEY, - APPEND_QUEUE_KEY, - REMOVE_QUEUE_KEY, - UNION_QUEUE_KEY, - PEOPLE_DISTINCT_ID_KEY, - ALIAS_ID_KEY, - EVENT_TIMERS_KEY -]; + /** - * Mixpanel Persistence Object * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges */ -var MixpanelPersistence = function(config) { - this['props'] = {}; - this.campaign_params_saved = false; - - if (config['persistence_name']) { - this.name = 'mp_' + config['persistence_name']; - } else { - this.name = 'mp_' + config['token'] + '_mixpanel'; - } +var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; +}; - var storage_type = config['persistence']; - if (storage_type !== 'cookie' && storage_type !== 'localStorage') { - console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; +/** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ +OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; - } else { - this.storage = _.cookie; + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); }; -MixpanelPersistence.prototype.properties = function() { - var p = {}; - - this.load(); - - // Filter out reserved properties - _.each(this['props'], function(v, k) { - if (!_.include(RESERVED_PROPERTIES, k)) { - p[k] = v; - } - }); - return p; +// opt_out_tracking_by_default applies only without consent_mode, which replaces it +OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); }; -MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } +/** + * @returns {string} + */ +OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; +}; - var entry = this.storage.parse(this.name); +/** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; +}; - if (entry) { - this['props'] = _.extend({}, entry); - } +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -MixpanelPersistence.prototype.upgrade = function() { - var old_cookie, - old_localstorage; +/** + * @param {Object} [options] opt_in_tracking() options + */ +OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); +}; - // if transferring from cookie to localStorage or vice-versa, copy existing - // super properties over to new storage mode - if (this.storage === _.localStorage) { - old_cookie = _.cookie.parse(this.name); +/** + * @param {Object} [options] opt_out_tracking() options + */ +OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); - _.cookie.remove(this.name); - _.cookie.remove(this.name, true); + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } - if (old_cookie) { - this.register_once(old_cookie); - } - } else if (this.storage === _.cookie) { - old_localstorage = _.localStorage.parse(this.name); + this._writeFlag(optOut, options); + this._updatePersistence(options); +}; - _.localStorage.remove(this.name); +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); +}; - if (old_localstorage) { - this.register_once(old_localstorage); - } +/** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ +OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); } }; -MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - - this.storage.set( - this.name, - JSONStringify(this['props']), - this.expire_days, - this.cross_subdomain, - this.secure, - this.cross_site, - this.cookie_domain - ); -}; +/** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ +OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); -MixpanelPersistence.prototype.load_prop = function(key) { - this.load(); - return this['props'][key]; -}; + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } -MixpanelPersistence.prototype.remove = function() { - // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); }; -// removes the storage entry and deletes all loaded data -// forced name for tests -MixpanelPersistence.prototype.clear = function() { - this.remove(); - this['props'] = {}; +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ +OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); }; /** -* @param {Object} props -* @param {*=} default_value -* @param {number=} days -*/ -MixpanelPersistence.prototype.register_once = function(props, default_value, days) { - if (_.isObject(props)) { - if (typeof(default_value) === 'undefined') { default_value = 'None'; } - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ +OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); - this.load(); + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } - _.each(props, function(val, prop) { - if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { - this['props'][prop] = val; - } - }, this); + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); +}; - this.save(); +/** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ - return true; - } - return false; -}; /** -* @param {Object} props -* @param {number=} days -*/ -MixpanelPersistence.prototype.register = function(props, days) { - if (_.isObject(props)) { - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ +var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; +}; - this.load(); - _.extend(this['props'], props); - this.save(); +// delete what an earlier page stored without consent +ConsentDecisions.prototype.init = function() { + this._reconcile(); +}; - return true; +/** + * @returns {string} + */ +ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; } - return false; + return this.appliedState; }; -MixpanelPersistence.prototype.unregister = function(prop) { - this.load(); - if (prop in this['props']) { - delete this['props'][prop]; - this.save(); - } +/** + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; }; -MixpanelPersistence.prototype.update_search_keyword = function(referrer) { - this.register(_.info.searchInfo(referrer)); +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -// EXPORTED METHOD, we test this directly. -MixpanelPersistence.prototype.update_referrer_info = function(referrer) { - // If referrer doesn't exist, we want to note the fact that it was type-in traffic. - this.register_once({ - '$initial_referrer': referrer || '$direct', - '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' - }, ''); +/** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ +ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); }; -MixpanelPersistence.prototype.get_referrer_info = function() { - return _.strip_empty_properties({ - '$initial_referrer': this['props']['$initial_referrer'], - '$initial_referring_domain': this['props']['$initial_referring_domain'] - }); +ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); }; -MixpanelPersistence.prototype.update_config = function(config) { - this.default_expiry = this.expire_days = config['cookie_expiration']; - this.set_disabled(config['disable_persistence']); - this.set_cookie_domain(config['cookie_domain']); - this.set_cross_site(config['cross_site_cookie']); - this.set_cross_subdomain(config['cross_subdomain_cookie']); - this.set_secure(config['secure_cookie']); +ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); }; -MixpanelPersistence.prototype.set_disabled = function(disabled) { - this.disabled = disabled; - if (this.disabled) { - this.remove(); - } else { - this.save(); +/** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ +ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } +}; + +ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; }; -MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { - if (cookie_domain !== this.cookie_domain) { - this.remove(); - this.cookie_domain = cookie_domain; - this.save(); +/** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ +ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); } }; -MixpanelPersistence.prototype.set_cross_site = function(cross_site) { - if (cross_site !== this.cross_site) { - this.cross_site = cross_site; - this.remove(); - this.save(); +/** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ +ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; } + this._writeDecisionKey(this._decisionKey(), flag); }; -MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { - if (cross_subdomain !== this.cross_subdomain) { - this.cross_subdomain = cross_subdomain; - this.remove(); - this.save(); +/** + * @param {string} key + * @param {string|null} value null to remove it + */ +ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); } }; -MixpanelPersistence.prototype.get_cross_subdomain = function() { - return this.cross_subdomain; +// the store the persistence uses, chosen without the localStorage support probe, which writes a key +ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); }; -MixpanelPersistence.prototype.set_secure = function(secure) { - if (secure !== this.secure) { - this.secure = secure ? true : false; - this.remove(); - this.save(); - } +ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; }; -MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { - var q_key = this._get_queue_key(queue), - q_data = data[queue], - set_q = this._get_or_create_queue(SET_ACTION), - set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), - unset_q = this._get_or_create_queue(UNSET_ACTION), - add_q = this._get_or_create_queue(ADD_ACTION), - union_q = this._get_or_create_queue(UNION_ACTION), - remove_q = this._get_or_create_queue(REMOVE_ACTION, []), - append_q = this._get_or_create_queue(APPEND_ACTION, []); +ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); +}; - if (q_key === SET_QUEUE_KEY) { - // Update the set queue - we can override any existing values - _.extend(set_q, q_data); - // if there was a pending increment, override it - // with the set. - this._pop_from_people_queue(ADD_ACTION, q_data); - // if there was a pending union, override it - // with the set. - this._pop_from_people_queue(UNION_ACTION, q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === SET_ONCE_QUEUE_KEY) { - // only queue the data if there is not already a set_once call for it. - _.each(q_data, function(v, k) { - if (!(k in set_once_q)) { - set_once_q[k] = v; - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNSET_QUEUE_KEY) { - _.each(q_data, function(prop) { +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ +ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); +}; - // undo previously-queued actions on this key - _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { - if (prop in enqueued_obj) { - delete enqueued_obj[prop]; - } - }); - _.each(append_q, function(append_obj) { - if (prop in append_obj) { - delete append_obj[prop]; - } - }); +/** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ +ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); +}; - unset_q[prop] = true; +/** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + +/** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ +function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; }); - } else if (q_key === ADD_QUEUE_KEY) { - _.each(q_data, function(v, k) { - // If it exists in the set queue, increment - // the value - if (k in set_q) { - set_q[k] += v; - } else { - // If it doesn't exist, update the add - // queue - if (!(k in add_q)) { - add_q[k] = 0; - } - add_q[k] += v; - } - }, this); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNION_QUEUE_KEY) { - _.each(q_data, function(v, k) { - if (_.isArray(v)) { - if (!(k in union_q)) { - union_q[k] = []; - } - // Prevent duplicate values - _.each(v, function(item) { - if (!_.include(union_q[k], item)) { - union_q[k].push(item); - } - }); - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === REMOVE_QUEUE_KEY) { - remove_q.push(q_data); - this._pop_from_people_queue(APPEND_ACTION, q_data); - } else if (q_key === APPEND_QUEUE_KEY) { - append_q.push(q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); + if (same) { + answers[capability] = answer; + } + }); + return answers; +} + +/** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ +var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; +}; + +/** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ +ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; } + return CONSENT_STATES[this.state()][capability]; +}; - console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); - console.log(data); +/** + * @returns {string} + */ +ConsentManager.prototype.state = function() { + return this.decisions.state(); +}; - this.save(); +/** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ +ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; }; -MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { - var q = this['props'][this._get_queue_key(queue)]; - if (!_.isUndefined(q)) { - _.each(data, function(v, k) { - if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { - // list actions: only remove if both k+v match - // e.g. remove should not override append in a case like - // append({foo: 'bar'}); remove({foo: 'qux'}) - _.each(q, function(queued_action) { - if (queued_action[k] === v) { - delete queued_action[k]; - } - }); - } else { - delete q[k]; - } - }, this); - } +/** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ +ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; }; -MixpanelPersistence.prototype.load_queue = function(queue) { - return this.load_prop(this._get_queue_key(queue)); +/** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ +ConsentManager.prototype.init = function() { + this.decisions.init(); }; -MixpanelPersistence.prototype._get_queue_key = function(queue) { - if (queue === SET_ACTION) { - return SET_QUEUE_KEY; - } else if (queue === SET_ONCE_ACTION) { - return SET_ONCE_QUEUE_KEY; - } else if (queue === UNSET_ACTION) { - return UNSET_QUEUE_KEY; - } else if (queue === ADD_ACTION) { - return ADD_QUEUE_KEY; - } else if (queue === APPEND_ACTION) { - return APPEND_QUEUE_KEY; - } else if (queue === REMOVE_ACTION) { - return REMOVE_QUEUE_KEY; - } else if (queue === UNION_ACTION) { - return UNION_QUEUE_KEY; - } else { - console.error('Invalid queue:', queue); - } +/** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); }; -MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { - var key = this._get_queue_key(queue); - default_val = _.isUndefined(default_val) ? {} : default_val; - return this['props'][key] || (this['props'][key] = default_val); +/** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); }; -MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - timers[event_name] = timestamp; - this['props'][EVENT_TIMERS_KEY] = timers; - this.save(); +/** + * @param {Object} [options] opt_in_tracking() options + */ +ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); }; -MixpanelPersistence.prototype.remove_event_timer = function(event_name) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - var timestamp = timers[event_name]; - if (!_.isUndefined(timestamp)) { - delete this['props'][EVENT_TIMERS_KEY][event_name]; - this.save(); - } - return timestamp; +/** + * @param {Object} [options] opt_out_tracking() options + */ +ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); +}; + +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); }; /* eslint camelcase: "off" */ @@ -8035,6 +8832,7 @@ var DEFAULT_CONFIG = { 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -8101,26 +8899,9 @@ var create_mplib = function(token, config, name) { instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -8215,6 +8996,19 @@ MixpanelLib.prototype._init = function(token, config, name) { 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -8222,6 +9016,7 @@ MixpanelLib.prototype._init = function(token, config, name) { getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -8239,64 +9034,16 @@ MixpanelLib.prototype._init = function(token, config, name) { }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && win.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - win.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - win.addEventListener('visibilitychange', function() { - if (document$1['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - var uuid = _.UUID(); - if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -8306,12 +9053,52 @@ MixpanelLib.prototype._init = function(token, config, name) { setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); +}; + +MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } +}; + +// the services that store or send on their own; at init, and again on an opt-in under 'require_consent' +MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -8323,21 +9110,174 @@ MixpanelLib.prototype._init = function(token, config, name) { } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } +}; - this.autocapture = new Autocapture(this); - this.autocapture.init(); +/** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ +MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); +}; + +/** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ +MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); +}; + +/** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ +MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); +}; + +MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); +}; + +MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + consentGate: this._consent, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + + if (sendBeacon && win.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + win.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + win.addEventListener('visibilitychange', function() { + if (document$1['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } + } + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { + this.start_batch_senders(); + } +}; + +MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); }; /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ +MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); +}; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -8368,9 +9308,12 @@ MixpanelLib.prototype.get_tab_id = function () { return this.tab_id || null; }; -MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { +MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); -}); +}; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -8460,7 +9403,7 @@ MixpanelLib.prototype._dom_loaded = function() { this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -8522,6 +9465,15 @@ MixpanelLib.prototype._prepare_callback = function(callback, data) { MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -8679,6 +9631,10 @@ MixpanelLib.prototype._send_request = function(url, data, options, callback) { }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -8816,48 +9772,6 @@ MixpanelLib.prototype.get_batcher_configs = function() { return this._batcher_configs; }; -MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } -}; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -8995,7 +9909,6 @@ MixpanelLib.prototype._track_or_batch = function(options, callback) { return request_enqueued_or_initiated && truncated_data; }; -MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -9020,7 +9933,17 @@ MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(event_name, properties, options, callback) { +MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -9032,10 +9955,6 @@ function(event_name, properties, options, callback) { } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -9126,9 +10045,8 @@ function(event_name, properties, options, callback) { } return ret; -}); +}; -MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -9144,7 +10062,13 @@ MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ -function(group_key, group_ids, callback) { +MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -9152,9 +10076,8 @@ function(group_key, group_ids, callback) { prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); -}); +}; -MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -9167,7 +10090,13 @@ MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -9181,9 +10110,8 @@ function(group_key, group_id, callback) { } } return this['people'].union(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -9196,7 +10124,13 @@ MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -9210,9 +10144,8 @@ function(group_key, group_id, callback) { } } return this['people'].remove(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -9226,7 +10159,7 @@ MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(event_name, properties, groups, callback) { +MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -9234,7 +10167,7 @@ function(event_name, properties, groups, callback) { } }); return this.track(event_name, tracking_props, callback); -}); +}; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -9261,13 +10194,12 @@ MixpanelLib.prototype.get_group = function (group_key, group_id) { var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; -MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -9313,7 +10245,7 @@ MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(properties, options) { +MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -9337,7 +10269,7 @@ function(properties, options) { } return this.track(event_name, event_properties); -}); +}; /** * Track clicks on a set of document elements. Selector must be a @@ -9600,6 +10532,10 @@ MixpanelLib.prototype._register_single = function(prop, value) { * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -9612,6 +10548,12 @@ MixpanelLib.prototype.identify = function( // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -9676,11 +10618,11 @@ MixpanelLib.prototype.reset = function() { this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -9742,6 +10684,11 @@ MixpanelLib.prototype.get_distinct_id = function() { * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -9871,6 +10818,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -9922,6 +10874,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -10050,105 +11007,42 @@ MixpanelLib.prototype._event_is_disabled = function(event_name) { _.include(this.__disabled_events, event_name); }; -// perform some housekeeping around GDPR opt-in/out state -MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } +/** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ +MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ -MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; +MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; -// call a base gdpr function after constructing the appropriate token and options args -MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; +// delete the identified user's profile and charges, which the opt-out about to happen would block +MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); }; /** @@ -10170,6 +11064,10 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -10184,12 +11082,7 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -10207,6 +11100,10 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -10219,19 +11116,7 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -10243,13 +11128,15 @@ MixpanelLib.prototype.opt_out_tracking = function(options) { * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -10261,13 +11148,16 @@ MixpanelLib.prototype.has_opted_in_tracking = function(options) { * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -10286,6 +11176,11 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -10297,12 +11192,7 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -10366,6 +11256,7 @@ MixpanelLibProto['toString'] = MixpanelLibProto.toStri MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; +MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/dist/mixpanel-with-async-recorder.cjs.d.ts b/dist/mixpanel-with-async-recorder.cjs.d.ts index 6c9c4660..a0156e5f 100644 --- a/dist/mixpanel-with-async-recorder.cjs.d.ts +++ b/dist/mixpanel-with-async-recorder.cjs.d.ts @@ -10,6 +10,15 @@ export type Query = string | Element | Element[]; export type RemoteSettingType = "disabled" | "fallback" | "strict"; +/** + * What the SDK does before the visitor decides. "no_consent_required" tracks until + * opt_out_tracking(). "require_consent" stores and sends nothing until opt_in_tracking(); with it, + * opt_out_tracking_persistence_type and opt_out_persistence_by_default are ignored, and + * opt_out_tracking_cookie_prefix still names the stored flag. Unset means "no_consent_required"; + * opt_out_tracking_by_default applies only when consent_mode is unset. + */ +export type ConsentMode = "no_consent_required" | "require_consent" | null; + export interface EventTriggerProps { percentage: number; @@ -267,6 +276,7 @@ export interface Config { opt_out_persistence_by_default: boolean; opt_out_tracking_persistence_type: Persistence; opt_out_tracking_cookie_prefix: string; + consent_mode: ConsentMode; inapp_protocol: string; inapp_link_new_window: boolean; ignore_dnt: boolean; diff --git a/dist/mixpanel-with-async-recorder.cjs.js b/dist/mixpanel-with-async-recorder.cjs.js index 2183cfdc..3fdafcb6 100644 --- a/dist/mixpanel-with-async-recorder.cjs.js +++ b/dist/mixpanel-with-async-recorder.cjs.js @@ -2,7 +2,7 @@ var Config = { DEBUG: false, - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules @@ -10,8 +10,8 @@ var TARGETING_GLOBAL_NAME = '__mp_targeting'; var RECORDER_GLOBAL_NAME = '__mp_recorder'; // Constants that are injected at build-time for the names of async modules. -var RECORDER_FILENAME = 'mixpanel-recorder-Cbb3yyAg.js'; -var TARGETING_FILENAME = 'mixpanel-targeting-DVY6oAEA.js'; +var RECORDER_FILENAME = 'mixpanel-recorder-BSb8F2GO.js'; +var TARGETING_FILENAME = 'mixpanel-targeting-SfM6RnV-.js'; // since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file var win; @@ -3946,11 +3946,13 @@ var getTargetingPromise = function(loadExtraBundle, targetingSrc) { /** * @type {import('./wrapper').StorageWrapper} */ -var IDBStorageWrapper = function (dbName, storeName, versionData) { +var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -3961,25 +3963,47 @@ IDBStorageWrapper.prototype._openDb = function () { var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -4228,16 +4252,23 @@ FeatureFlagPersistence.prototype.save = function(context, flagsMap, pendingFirst }); }; +/** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger$5.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger$5.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger$5.log('No persisted variants cleared from IndexedDB:', error); }); }; @@ -4300,11 +4331,15 @@ var FeatureFlagManager = function(initOptions) { this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger$4.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -4320,7 +4355,7 @@ FeatureFlagManager.prototype.init = function() { this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -4388,7 +4423,7 @@ FeatureFlagManager.prototype.getConfig = function(key) { }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -4419,6 +4454,14 @@ FeatureFlagManager.prototype.areFlagsReady = function() { return !!this.flags; }; +/** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ +FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); +}; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -4714,6 +4757,9 @@ FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) { }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); @@ -5036,6 +5082,8 @@ var RecorderManager = function(initOptions) { this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -5047,8 +5095,8 @@ var RecorderManager = function(initOptions) { }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console.log('Load recorder check skipped without persistence'); return PromisePolyfill.resolve(false); } @@ -5075,6 +5123,10 @@ RecorderManager.prototype.shouldLoadRecorder = function() { }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console.log('Session recording skipped without consent'); + return PromisePolyfill.resolve(); + } if (!win['MutationObserver']) { console.critical('Browser does not support MutationObserver; skipping session recording'); return PromisePolyfill.resolve(); @@ -5083,6 +5135,11 @@ RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, var loadRecorder = _.bind(function(startNewIfInactive) { return new PromisePolyfill(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new win[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); @@ -5714,6 +5771,7 @@ var RequestQueue = function (storageKey, options) { }); } this.reportError = options.errorReporter || _.bind(logger$1.error, logger$1); + this.consentGate = options.consentGate; this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios @@ -5765,7 +5823,7 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { 'payload': item }; - if (!this.usePersistence) { + if (!this._persists()) { this.memQueue.push(queueEntry); return PromisePolyfill.resolve(true); } else { @@ -5773,7 +5831,20 @@ RequestQueue.prototype.enqueue = function (item, flushInterval) { } }; +/** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ +RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); +}; + RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -5873,7 +5944,7 @@ RequestQueue.prototype.removeItemsByID = function (ids) { }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -5961,7 +6032,7 @@ var updatePayloads = function (existingItems, itemsToUpdate) { */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -6016,11 +6087,14 @@ RequestQueue.prototype.readFromStorage = function () { RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); }, this)) - .then(function () { - return true; - }) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -6065,7 +6139,8 @@ var RequestBatcher = function(storageKey, options) { sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -6380,721 +6455,448 @@ RequestBatcher.prototype.reportError = function(msg, err) { } }; -/** - * GDPR utils - * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. - * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. - */ +/* eslint camelcase: "off" */ -/** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ +/** @const */ var SET_ACTION = '$set'; +/** @const */ var SET_ONCE_ACTION = '$set_once'; +/** @const */ var UNSET_ACTION = '$unset'; +/** @const */ var ADD_ACTION = '$add'; +/** @const */ var APPEND_ACTION = '$append'; +/** @const */ var UNION_ACTION = '$union'; +/** @const */ var REMOVE_ACTION = '$remove'; +/** @const */ var DELETE_ACTION = '$delete'; -/** Public **/ +// Common internal methods for mixpanel.people and mixpanel.group APIs. +// These methods shouldn't involve network I/O. +var apiActions = { + set_action: function(prop, to) { + var data = {}; + var $set = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set[k] = v; + } + }, this); + } else { + $set[prop] = to; + } -var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; + data[SET_ACTION] = $set; + return data; + }, -/** - * Opt the user in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function optIn(token, options) { - _optInOut(true, token, options); -} + unset_action: function(prop) { + var data = {}; + var $unset = []; + if (!_.isArray(prop)) { + prop = [prop]; + } -/** - * Opt the user out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not - */ -function optOut(token, options) { - _optInOut(false, token, options); -} + _.each(prop, function(k) { + if (!this._is_reserved_property(k)) { + $unset.push(k); + } + }, this); -/** - * Check whether the user has opted in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {boolean} whether the user has opted in to the given opt type - */ -function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; -} + data[UNSET_ACTION] = $unset; + return data; + }, -/** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ -function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + set_once_action: function(prop, to) { + var data = {}; + var $set_once = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set_once[k] = v; + } + }, this); + } else { + $set_once[prop] = to; + } + data[SET_ONCE_ACTION] = $set_once; + return data; + }, + + union_action: function(list_name, values) { + var data = {}; + var $union = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $union[k] = _.isArray(v) ? v : [v]; + } + }, this); + } else { + $union[list_name] = _.isArray(values) ? values : [values]; + } + data[UNION_ACTION] = $union; + return data; + }, + + append_action: function(list_name, value) { + var data = {}; + var $append = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $append[k] = v; + } + }, this); + } else { + $append[list_name] = value; + } + data[APPEND_ACTION] = $append; + return data; + }, + + remove_action: function(list_name, value) { + var data = {}; + var $remove = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $remove[k] = v; + } + }, this); + } else { + $remove[list_name] = value; + } + data[REMOVE_ACTION] = $remove; + return data; + }, + + delete_action: function() { + var data = {}; + data[DELETE_ACTION] = ''; + return data; } - return optedOut; -} +}; -/** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); -} +/* eslint camelcase: "off" */ /** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * Mixpanel Group Object + * @class */ -function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} +function MixpanelGroup() {} + +_.extend(MixpanelGroup.prototype, apiActions); /** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate */ -function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} +MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { + this._mixpanel = mixpanel_instance; + this._group_key = group_key; + this._group_id = group_id; + this.consentGate = consentGate; +}; /** - * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function clearOptInOut(token, options) { - options = options || {}; - _getStorage(options).remove( - _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain - ); -} - -/** Private **/ - -/** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage - */ -function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; -} - -/** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type + * Set properties on a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, dates, or lists + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; -} +MixpanelGroup.prototype.set = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + return this._send_request(data, callback); +}; /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type + * Set properties on a group, only if they do not yet exist. + * This will not overwrite previous group property values, unlike + * group.set(). + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set_once({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, lists or dates + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); -} +MixpanelGroup.prototype.set_once = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); + return this._send_request(data, callback); +}; /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read + * Unset properties on a group permanently. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').unset('Founded'); + * ``` + * + * @param {String} prop The name of the property. + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; +MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; -} + var data = this.unset_action(prop); + return this._send_request(data, callback); +}; /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true + * Merge a given list with a list-valued group property, excluding duplicate values. + * + * @example + * ```js + * // merge a value to a list, creating it if needed + * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Array} values Values to merge with the given property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; +MixpanelGroup.prototype.union = function(list_name, values, callback) { + if (_.isObject(list_name)) { + callback = values; } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; - - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); } - }); - - return hasDntOn; -} + return; + } + var data = this.union_action(list_name, values); + return this._send_request(data, callback); +}; /** - * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type - * @param {boolean} optValue - whether to opt the user in or out for the given opt type - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + * Permanently delete a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').delete(); + * ``` + * + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _optInOut(optValue, token, options) { - if (!_.isString(token) || !token.length) { - console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); +MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } return; } - - options = options || {}; - - _getStorage(options).set( - _getStorageKey(token, options), - optValue ? 1 : 0, - _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, - !!options.crossSubdomainCookie, - !!options.secureCookie, - !!options.crossSiteCookie, - options.cookieDomain - ); - - if (options.track && optValue) { // only track event if opting in (optValue=true) - options.track(options.trackEventName || '$opt_in', options.trackProperties, { - 'send_immediately': true - }); - } -} + // bracket notation above prevents a minification error related to reserved words + var data = this.delete_action(); + return this._send_request(data, callback); +}; /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out + * Remove a property from a group. The value will be ignored if doesn't exist. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Object} value Value to remove from the given group property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; - - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console.error('Unexpected error when checking tracking opt-out status: ' + err); - } - - if (!optedOut) { - return method.apply(this, arguments); - } - - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { +MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { callback(0); } - return; - }; -} + } + var data = this.remove_action(list_name, value); + return this._send_request(data, callback); +}; -/* eslint camelcase: "off" */ +MixpanelGroup.prototype._send_request = function(data, callback) { + data['$group_key'] = this._group_key; + data['$group_id'] = this._group_id; + data['$token'] = this._get_config('token'); + var date_encoded_data = _.encodeDates(data); + return this._mixpanel._track_or_batch({ + type: 'groups', + data: date_encoded_data, + endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], + batcher: this._mixpanel.request_batchers.groups + }, callback); +}; -/** @const */ var SET_ACTION = '$set'; -/** @const */ var SET_ONCE_ACTION = '$set_once'; -/** @const */ var UNSET_ACTION = '$unset'; -/** @const */ var ADD_ACTION = '$add'; -/** @const */ var APPEND_ACTION = '$append'; -/** @const */ var UNION_ACTION = '$union'; -/** @const */ var REMOVE_ACTION = '$remove'; -/** @const */ var DELETE_ACTION = '$delete'; - -// Common internal methods for mixpanel.people and mixpanel.group APIs. -// These methods shouldn't involve network I/O. -var apiActions = { - set_action: function(prop, to) { - var data = {}; - var $set = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set[k] = v; - } - }, this); - } else { - $set[prop] = to; - } - - data[SET_ACTION] = $set; - return data; - }, - - unset_action: function(prop) { - var data = {}; - var $unset = []; - if (!_.isArray(prop)) { - prop = [prop]; - } - - _.each(prop, function(k) { - if (!this._is_reserved_property(k)) { - $unset.push(k); - } - }, this); - - data[UNSET_ACTION] = $unset; - return data; - }, - - set_once_action: function(prop, to) { - var data = {}; - var $set_once = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set_once[k] = v; - } - }, this); - } else { - $set_once[prop] = to; - } - data[SET_ONCE_ACTION] = $set_once; - return data; - }, - - union_action: function(list_name, values) { - var data = {}; - var $union = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $union[k] = _.isArray(v) ? v : [v]; - } - }, this); - } else { - $union[list_name] = _.isArray(values) ? values : [values]; - } - data[UNION_ACTION] = $union; - return data; - }, - - append_action: function(list_name, value) { - var data = {}; - var $append = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $append[k] = v; - } - }, this); - } else { - $append[list_name] = value; - } - data[APPEND_ACTION] = $append; - return data; - }, +MixpanelGroup.prototype._is_reserved_property = function(prop) { + return prop === '$group_key' || prop === '$group_id'; +}; - remove_action: function(list_name, value) { - var data = {}; - var $remove = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $remove[k] = v; - } - }, this); - } else { - $remove[list_name] = value; - } - data[REMOVE_ACTION] = $remove; - return data; - }, +MixpanelGroup.prototype._get_config = function(conf) { + return this._mixpanel.get_config(conf); +}; - delete_action: function() { - var data = {}; - data[DELETE_ACTION] = ''; - return data; - } +MixpanelGroup.prototype.toString = function() { + return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; }; +// MixpanelGroup Exports +// (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would +// make TypeScript type them as `any`, which breaks the generated API docs) +var MixpanelGroupProto = MixpanelGroup.prototype; +MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; +MixpanelGroupProto['set'] = MixpanelGroupProto.set; +MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; +MixpanelGroupProto['union'] = MixpanelGroupProto.union; +MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; +MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; + /* eslint camelcase: "off" */ /** - * Mixpanel Group Object + * Mixpanel People Object * @class */ -function MixpanelGroup() {} +function MixpanelPeople() {} -_.extend(MixpanelGroup.prototype, apiActions); +_.extend(MixpanelPeople.prototype, apiActions); -MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { +/** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ +MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; - this._group_key = group_key; - this._group_id = group_id; + this.consentGate = consentGate; }; -MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** - * Set properties on a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, dates, or lists - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, to, callback) { - var data = this.set_action(prop, to); +* Set properties on a user record. +* +* @example +* ```js +* mixpanel.people.set('gender', 'm'); +* +* // or set multiple properties at once +* mixpanel.people.set({ +* 'Company': 'Acme', +* 'Plan': 'Premium', +* 'Upgrade date': new Date() +* }); +* // properties can be strings, integers, dates, or lists +* ``` +* +* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. +* @param {*} [to] A value to set on the given property name +* @param {Function} [callback] If provided, the callback will be called after tracking the event. +*/ +MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + // make sure that the referrer info has been updated and saved + if (this._get_config('save_referrer')) { + this._mixpanel['persistence'].update_referrer_info(document.referrer); + } + + // update $set object with default people properties + data[SET_ACTION] = _.extend( + {}, + _.info.people_properties(), + data[SET_ACTION] + ); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** - * Set properties on a group, only if they do not yet exist. - * This will not overwrite previous group property values, unlike - * group.set(). - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set_once({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, lists or dates - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); +* Set properties on a user record, only if they do not yet exist. +* This will not overwrite previous people property values, unlike +* people.set(). +* +* @example +* ```js +* mixpanel.people.set_once('First Login Date', new Date()); +* +* // or set multiple properties at once +* mixpanel.people.set_once({ +* 'First Login Date': new Date(), +* 'Starting Plan': 'Premium' +* }); +* +* // properties can be strings, integers or dates +* ``` +* +* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. +* @param {*} [to] A value to set on the given property name +* @param {Function} [callback] If provided, the callback will be called after tracking the event. +*/ +MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( -/** - * Unset properties on a group permanently. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').unset('Founded'); - * ``` - * - * @param {String} prop The name of the property. - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(prop, callback) { - var data = this.unset_action(prop); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( -/** - * Merge a given list with a list-valued group property, excluding duplicate values. - * - * @example - * ```js - * // merge a value to a list, creating it if needed - * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Array} values Values to merge with the given property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(list_name, values, callback) { - if (_.isObject(list_name)) { - callback = values; - } - var data = this.union_action(list_name, values); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( -/** - * Permanently delete a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').delete(); - * ``` - * - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(callback) { - // bracket notation above prevents a minification error related to reserved words - var data = this.delete_action(); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( -/** - * Remove a property from a group. The value will be ignored if doesn't exist. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Object} value Value to remove from the given group property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ -function(list_name, value, callback) { - var data = this.remove_action(list_name, value); - return this._send_request(data, callback); -}); - -MixpanelGroup.prototype._send_request = function(data, callback) { - data['$group_key'] = this._group_key; - data['$group_id'] = this._group_id; - data['$token'] = this._get_config('token'); - - var date_encoded_data = _.encodeDates(data); - return this._mixpanel._track_or_batch({ - type: 'groups', - data: date_encoded_data, - endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], - batcher: this._mixpanel.request_batchers.groups - }, callback); -}; - -MixpanelGroup.prototype._is_reserved_property = function(prop) { - return prop === '$group_key' || prop === '$group_id'; -}; - -MixpanelGroup.prototype._get_config = function(conf) { - return this._mixpanel.get_config(conf); -}; - -MixpanelGroup.prototype.toString = function() { - return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; -}; - -// MixpanelGroup Exports -// (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would -// make TypeScript type them as `any`, which breaks the generated API docs) -var MixpanelGroupProto = MixpanelGroup.prototype; -MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; -MixpanelGroupProto['set'] = MixpanelGroupProto.set; -MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; -MixpanelGroupProto['union'] = MixpanelGroupProto.union; -MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; -MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; - -/* eslint camelcase: "off" */ - -/** - * Mixpanel People Object - * @class - */ -function MixpanelPeople() {} - -_.extend(MixpanelPeople.prototype, apiActions); - -MixpanelPeople.prototype._init = function(mixpanel_instance) { - this._mixpanel = mixpanel_instance; -}; - -MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( -/** -* Set properties on a user record. -* -* @example -* ```js -* mixpanel.people.set('gender', 'm'); -* -* // or set multiple properties at once -* mixpanel.people.set({ -* 'Company': 'Acme', -* 'Plan': 'Premium', -* 'Upgrade date': new Date() -* }); -* // properties can be strings, integers, dates, or lists -* ``` -* -* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. -* @param {*} [to] A value to set on the given property name -* @param {Function} [callback] If provided, the callback will be called after tracking the event. -*/ -function(prop, to, callback) { - var data = this.set_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - // make sure that the referrer info has been updated and saved - if (this._get_config('save_referrer')) { - this._mixpanel['persistence'].update_referrer_info(document.referrer); - } - - // update $set object with default people properties - data[SET_ACTION] = _.extend( - {}, - _.info.people_properties(), - data[SET_ACTION] - ); - return this._send_request(data, callback); -}); - -MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( -/** -* Set properties on a user record, only if they do not yet exist. -* This will not overwrite previous people property values, unlike -* people.set(). -* -* @example -* ```js -* mixpanel.people.set_once('First Login Date', new Date()); -* -* // or set multiple properties at once -* mixpanel.people.set_once({ -* 'First Login Date': new Date(), -* 'Starting Plan': 'Premium' -* }); -* -* // properties can be strings, integers or dates -* ``` -* -* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. -* @param {*} [to] A value to set on the given property name -* @param {Function} [callback] If provided, the callback will be called after tracking the event. -*/ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - return this._send_request(data, callback); -}); - -MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -7109,12 +6911,17 @@ MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, callback) { +MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -7141,7 +6948,16 @@ MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, by, callback) { +MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -7155,7 +6971,6 @@ function(prop, by, callback) { } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -7167,9 +6982,8 @@ function(prop, by, callback) { data[ADD_ACTION] = $add; return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -7190,15 +7004,20 @@ MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -7211,15 +7030,20 @@ MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -7247,15 +7071,20 @@ MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, values, callback) { +MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -7277,9 +7106,15 @@ MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ -function(amount, properties, callback) { // eslint-disable-line no-unused-vars +MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); -}); +}; /** * Permanently clear all revenue report transactions from the @@ -7493,428 +7328,1390 @@ MixpanelPeople.prototype['toString'] = MixpanelPeople.prototype.toString; /* eslint camelcase: "off" */ -/* - * Constants +/* + * Constants + */ +/** @const */ var SET_QUEUE_KEY = '__mps'; +/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; +/** @const */ var UNSET_QUEUE_KEY = '__mpus'; +/** @const */ var ADD_QUEUE_KEY = '__mpa'; +/** @const */ var APPEND_QUEUE_KEY = '__mpap'; +/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; +/** @const */ var UNION_QUEUE_KEY = '__mpu'; +// This key is deprecated, but we want to check for it to see whether aliasing is allowed. +/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; +/** @const */ var ALIAS_ID_KEY = '__alias'; +/** @const */ var EVENT_TIMERS_KEY = '__timers'; +/** @const */ var RESERVED_PROPERTIES = [ + SET_QUEUE_KEY, + SET_ONCE_QUEUE_KEY, + UNSET_QUEUE_KEY, + ADD_QUEUE_KEY, + APPEND_QUEUE_KEY, + REMOVE_QUEUE_KEY, + UNION_QUEUE_KEY, + PEOPLE_DISTINCT_ID_KEY, + ALIAS_ID_KEY, + EVENT_TIMERS_KEY +]; + +// the store while persistence is off: nothing is read or written +/** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} +}; + +/** + * Mixpanel Persistence Object + * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() + */ +var MixpanelPersistence = function(config, options) { + this['props'] = {}; + this.campaign_params_saved = false; + + if (config['persistence_name']) { + this.name = 'mp_' + config['persistence_name']; + } else { + this.name = 'mp_' + config['token'] + '_mixpanel'; + } + + var storage_type = config['persistence']; + if (storage_type !== 'cookie' && storage_type !== 'localStorage') { + console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); + config['persistence'] = 'cookie'; + } + this.storage_type = config['persistence']; + + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } +}; + +MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; + } else { + this.backend = _.cookie; + } + this.storage = this.backend; +}; + +MixpanelPersistence.prototype.properties = function() { + var p = {}; + + this.load(); + + // Filter out reserved properties + _.each(this['props'], function(v, k) { + if (!_.include(RESERVED_PROPERTIES, k)) { + p[k] = v; + } + }); + return p; +}; + +MixpanelPersistence.prototype.load = function() { + var entry = this.storage.parse(this.name); + + if (entry) { + this['props'] = _.extend({}, entry); + } +}; + +MixpanelPersistence.prototype.upgrade = function() { + var old_cookie, + old_localstorage; + + // if transferring from cookie to localStorage or vice-versa, copy existing + // super properties over to new storage mode + if (this.backend === _.localStorage) { + old_cookie = _.cookie.parse(this.name); + + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + + if (old_cookie) { + this.register_once(old_cookie); + } + } else if (this.backend === _.cookie) { + old_localstorage = _.localStorage.parse(this.name); + + _.localStorage.remove(this.name); + + if (old_localstorage) { + this.register_once(old_localstorage); + } + } +}; + +MixpanelPersistence.prototype.save = function() { + this.storage.set( + this.name, + JSONStringify(this['props']), + this.expire_days, + this.cross_subdomain, + this.secure, + this.cross_site, + this.cookie_domain + ); +}; + +MixpanelPersistence.prototype.load_prop = function(key) { + this.load(); + return this['props'][key]; +}; + +MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } + // remove both domain and subdomain cookies + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); +}; + +// removes the storage entry and deletes all loaded data +// forced name for tests +MixpanelPersistence.prototype.clear = function() { + this.remove(); + this['props'] = {}; +}; + +/** +* @param {Object} props +* @param {*=} default_value +* @param {number=} days +*/ +MixpanelPersistence.prototype.register_once = function(props, default_value, days) { + if (_.isObject(props)) { + if (typeof(default_value) === 'undefined') { default_value = 'None'; } + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + + _.each(props, function(val, prop) { + if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { + this['props'][prop] = val; + } + }, this); + + this.save(); + + return true; + } + return false; +}; + +/** +* @param {Object} props +* @param {number=} days +*/ +MixpanelPersistence.prototype.register = function(props, days) { + if (_.isObject(props)) { + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + _.extend(this['props'], props); + this.save(); + + return true; + } + return false; +}; + +MixpanelPersistence.prototype.unregister = function(prop) { + this.load(); + if (prop in this['props']) { + delete this['props'][prop]; + this.save(); + } +}; + +MixpanelPersistence.prototype.update_search_keyword = function(referrer) { + this.register(_.info.searchInfo(referrer)); +}; + +// EXPORTED METHOD, we test this directly. +MixpanelPersistence.prototype.update_referrer_info = function(referrer) { + // If referrer doesn't exist, we want to note the fact that it was type-in traffic. + this.register_once({ + '$initial_referrer': referrer || '$direct', + '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' + }, ''); +}; + +MixpanelPersistence.prototype.get_referrer_info = function() { + return _.strip_empty_properties({ + '$initial_referrer': this['props']['$initial_referrer'], + '$initial_referring_domain': this['props']['$initial_referring_domain'] + }); +}; + +MixpanelPersistence.prototype.update_config = function(config) { + this.default_expiry = this.expire_days = config['cookie_expiration']; + this.set_disabled(config['disable_persistence']); + this.set_cookie_domain(config['cookie_domain']); + this.set_cross_site(config['cross_site_cookie']); + this.set_cross_subdomain(config['cross_subdomain_cookie']); + this.set_secure(config['secure_cookie']); +}; + +/** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ +MixpanelPersistence.prototype.set_disabled = function(disabled) { + this.disabled = disabled; + this._update_storage(); +}; + +/** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ +MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); +}; + +/** + * Read and write storage again, saving the props in memory to it. + */ +MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); +}; + +/** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ +MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); +}; + +MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; + this.remove(); + } else { + this.storage = this.backend; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { + if (cookie_domain !== this.cookie_domain) { + this.remove(); + this.cookie_domain = cookie_domain; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_site = function(cross_site) { + if (cross_site !== this.cross_site) { + this.cross_site = cross_site; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { + if (cross_subdomain !== this.cross_subdomain) { + this.cross_subdomain = cross_subdomain; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.get_cross_subdomain = function() { + return this.cross_subdomain; +}; + +MixpanelPersistence.prototype.set_secure = function(secure) { + if (secure !== this.secure) { + this.secure = secure ? true : false; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { + var q_key = this._get_queue_key(queue), + q_data = data[queue], + set_q = this._get_or_create_queue(SET_ACTION), + set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), + unset_q = this._get_or_create_queue(UNSET_ACTION), + add_q = this._get_or_create_queue(ADD_ACTION), + union_q = this._get_or_create_queue(UNION_ACTION), + remove_q = this._get_or_create_queue(REMOVE_ACTION, []), + append_q = this._get_or_create_queue(APPEND_ACTION, []); + + if (q_key === SET_QUEUE_KEY) { + // Update the set queue - we can override any existing values + _.extend(set_q, q_data); + // if there was a pending increment, override it + // with the set. + this._pop_from_people_queue(ADD_ACTION, q_data); + // if there was a pending union, override it + // with the set. + this._pop_from_people_queue(UNION_ACTION, q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === SET_ONCE_QUEUE_KEY) { + // only queue the data if there is not already a set_once call for it. + _.each(q_data, function(v, k) { + if (!(k in set_once_q)) { + set_once_q[k] = v; + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNSET_QUEUE_KEY) { + _.each(q_data, function(prop) { + + // undo previously-queued actions on this key + _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { + if (prop in enqueued_obj) { + delete enqueued_obj[prop]; + } + }); + _.each(append_q, function(append_obj) { + if (prop in append_obj) { + delete append_obj[prop]; + } + }); + + unset_q[prop] = true; + + }); + } else if (q_key === ADD_QUEUE_KEY) { + _.each(q_data, function(v, k) { + // If it exists in the set queue, increment + // the value + if (k in set_q) { + set_q[k] += v; + } else { + // If it doesn't exist, update the add + // queue + if (!(k in add_q)) { + add_q[k] = 0; + } + add_q[k] += v; + } + }, this); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNION_QUEUE_KEY) { + _.each(q_data, function(v, k) { + if (_.isArray(v)) { + if (!(k in union_q)) { + union_q[k] = []; + } + // Prevent duplicate values + _.each(v, function(item) { + if (!_.include(union_q[k], item)) { + union_q[k].push(item); + } + }); + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === REMOVE_QUEUE_KEY) { + remove_q.push(q_data); + this._pop_from_people_queue(APPEND_ACTION, q_data); + } else if (q_key === APPEND_QUEUE_KEY) { + append_q.push(q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } + + console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); + console.log(data); + + this.save(); +}; + +MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { + var q = this['props'][this._get_queue_key(queue)]; + if (!_.isUndefined(q)) { + _.each(data, function(v, k) { + if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { + // list actions: only remove if both k+v match + // e.g. remove should not override append in a case like + // append({foo: 'bar'}); remove({foo: 'qux'}) + _.each(q, function(queued_action) { + if (queued_action[k] === v) { + delete queued_action[k]; + } + }); + } else { + delete q[k]; + } + }, this); + } +}; + +MixpanelPersistence.prototype.load_queue = function(queue) { + return this.load_prop(this._get_queue_key(queue)); +}; + +MixpanelPersistence.prototype._get_queue_key = function(queue) { + if (queue === SET_ACTION) { + return SET_QUEUE_KEY; + } else if (queue === SET_ONCE_ACTION) { + return SET_ONCE_QUEUE_KEY; + } else if (queue === UNSET_ACTION) { + return UNSET_QUEUE_KEY; + } else if (queue === ADD_ACTION) { + return ADD_QUEUE_KEY; + } else if (queue === APPEND_ACTION) { + return APPEND_QUEUE_KEY; + } else if (queue === REMOVE_ACTION) { + return REMOVE_QUEUE_KEY; + } else if (queue === UNION_ACTION) { + return UNION_QUEUE_KEY; + } else { + console.error('Invalid queue:', queue); + } +}; + +MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { + var key = this._get_queue_key(queue); + default_val = _.isUndefined(default_val) ? {} : default_val; + return this['props'][key] || (this['props'][key] = default_val); +}; + +MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + timers[event_name] = timestamp; + this['props'][EVENT_TIMERS_KEY] = timers; + this.save(); +}; + +MixpanelPersistence.prototype.remove_event_timer = function(event_name) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + var timestamp = timers[event_name]; + if (!_.isUndefined(timestamp)) { + delete this['props'][EVENT_TIMERS_KEY][event_name]; + this.save(); + } + return timestamp; +}; + +/** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + + +/** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; +/** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + +/** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + +/** @const */ var DECISION_NONE = 'none'; +/** @const */ var DECISION_OPTED_IN = 'opted_in'; +/** @const */ var DECISION_OPTED_OUT = 'opted_out'; +// Do Not Track counts as an objection +/** @const */ var DECISION_OBJECTED = 'objected'; + +/** @const */ var STATE_FULL = 'full'; +/** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; +/** @const */ var STATE_BLOCKED = 'blocked'; + +/** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} +}; + +/** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ +/** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} +}; + +/** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ +function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; +} + +/** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ +function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; +} + +/** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + +/** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ +function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; +} + +/** + * GDPR utils + * + * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection + * and privacy for all individuals within the European Union. It addresses the export of personal + * data outside the EU. The GDPR aims primarily to give control back to citizens and residents + * over their personal data and to simplify the regulatory environment for international business + * by unifying the regulation within the EU. + * + * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. + * These functions are used internally by the SDK and are not intended to be publicly exposed. + */ + + +/** + * A function used to track a Mixpanel event (e.g. MixpanelLib.track) + * @callback trackFunction + * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. + * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. + * @param {Function} [callback] If provided, the callback function will be called after tracking the event. + */ + +/** Public **/ + +var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; + +/** + * Opt the user in to data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function optIn(token, options) { + _optInOut(true, token, options); +} + +/** + * Opt the user out of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not + */ +function optOut(token, options) { + _optInOut(false, token, options); +} + +/** + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ +function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; +} + +/** + * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function clearOptInOut(token, options) { + options = options || {}; + _getStorage(options).remove( + _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain + ); +} + +/** Private **/ + +/** + * Get storage util + * @param {Object} [options] + * @param {string} [options.persistenceType] + * @returns {object} either _.cookie or _.localstorage + */ +function _getStorage(options) { + options = options || {}; + return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; +} + +/** + * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the name of the cookie for the given opt type + */ +function _getStorageKey(token, options) { + options = options || {}; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; +} + +/** + * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the value of the cookie for the given opt type + */ +function readOptInOutFlag(token, options) { + return _getStorage(options).get(_getStorageKey(token, options)); +} + +/** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ +function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); +} + +/** + * Check whether the user has set the DNT/doNotTrack setting to true in their browser + * @param {Object} [options] + * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests + * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false + * @returns {boolean} whether the DNT setting is true + */ +function hasDoNotTrackFlagOn(options) { + if (options && options.ignoreDnt) { + return false; + } + var win$1 = (options && options.window) || win; + var nav = win$1['navigator'] || {}; + var hasDntOn = false; + + _.each([ + nav['doNotTrack'], // standard + nav['msDoNotTrack'], + win$1['doNotTrack'] + ], function(dntValue) { + if (_.includes([true, 1, '1', 'yes'], dntValue)) { + hasDntOn = true; + } + }); + + return hasDntOn; +} + +/** + * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type + * @param {boolean} optValue - whether to opt the user in or out for the given opt type + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function _optInOut(optValue, token, options) { + if (!_.isString(token) || !token.length) { + console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + return; + } + + options = options || {}; + + _getStorage(options).set( + _getStorageKey(token, options), + optValue ? 1 : 0, + _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, + !!options.crossSubdomainCookie, + !!options.secureCookie, + !!options.crossSiteCookie, + options.cookieDomain + ); + + if (options.track && optValue) { // only track event if opting in (optValue=true) + options.track(options.trackEventName || '$opt_in', options.trackProperties, { + 'send_immediately': true + }); + } +} + +/** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. */ -/** @const */ var SET_QUEUE_KEY = '__mps'; -/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; -/** @const */ var UNSET_QUEUE_KEY = '__mpus'; -/** @const */ var ADD_QUEUE_KEY = '__mpa'; -/** @const */ var APPEND_QUEUE_KEY = '__mpap'; -/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; -/** @const */ var UNION_QUEUE_KEY = '__mpu'; -// This key is deprecated, but we want to check for it to see whether aliasing is allowed. -/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; -/** @const */ var ALIAS_ID_KEY = '__alias'; -/** @const */ var EVENT_TIMERS_KEY = '__timers'; -/** @const */ var RESERVED_PROPERTIES = [ - SET_QUEUE_KEY, - SET_ONCE_QUEUE_KEY, - UNSET_QUEUE_KEY, - ADD_QUEUE_KEY, - APPEND_QUEUE_KEY, - REMOVE_QUEUE_KEY, - UNION_QUEUE_KEY, - PEOPLE_DISTINCT_ID_KEY, - ALIAS_ID_KEY, - EVENT_TIMERS_KEY -]; + /** - * Mixpanel Persistence Object * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges */ -var MixpanelPersistence = function(config) { - this['props'] = {}; - this.campaign_params_saved = false; - - if (config['persistence_name']) { - this.name = 'mp_' + config['persistence_name']; - } else { - this.name = 'mp_' + config['token'] + '_mixpanel'; - } +var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; +}; - var storage_type = config['persistence']; - if (storage_type !== 'cookie' && storage_type !== 'localStorage') { - console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; +/** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ +OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; - } else { - this.storage = _.cookie; + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); }; -MixpanelPersistence.prototype.properties = function() { - var p = {}; - - this.load(); - - // Filter out reserved properties - _.each(this['props'], function(v, k) { - if (!_.include(RESERVED_PROPERTIES, k)) { - p[k] = v; - } - }); - return p; +// opt_out_tracking_by_default applies only without consent_mode, which replaces it +OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); }; -MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } +/** + * @returns {string} + */ +OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; +}; - var entry = this.storage.parse(this.name); +/** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; +}; - if (entry) { - this['props'] = _.extend({}, entry); - } +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -MixpanelPersistence.prototype.upgrade = function() { - var old_cookie, - old_localstorage; +/** + * @param {Object} [options] opt_in_tracking() options + */ +OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); +}; - // if transferring from cookie to localStorage or vice-versa, copy existing - // super properties over to new storage mode - if (this.storage === _.localStorage) { - old_cookie = _.cookie.parse(this.name); +/** + * @param {Object} [options] opt_out_tracking() options + */ +OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); - _.cookie.remove(this.name); - _.cookie.remove(this.name, true); + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } - if (old_cookie) { - this.register_once(old_cookie); - } - } else if (this.storage === _.cookie) { - old_localstorage = _.localStorage.parse(this.name); + this._writeFlag(optOut, options); + this._updatePersistence(options); +}; - _.localStorage.remove(this.name); +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); +}; - if (old_localstorage) { - this.register_once(old_localstorage); - } +/** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ +OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); } }; -MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - - this.storage.set( - this.name, - JSONStringify(this['props']), - this.expire_days, - this.cross_subdomain, - this.secure, - this.cross_site, - this.cookie_domain - ); -}; +/** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ +OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); -MixpanelPersistence.prototype.load_prop = function(key) { - this.load(); - return this['props'][key]; -}; + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } -MixpanelPersistence.prototype.remove = function() { - // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); }; -// removes the storage entry and deletes all loaded data -// forced name for tests -MixpanelPersistence.prototype.clear = function() { - this.remove(); - this['props'] = {}; +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ +OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); }; /** -* @param {Object} props -* @param {*=} default_value -* @param {number=} days -*/ -MixpanelPersistence.prototype.register_once = function(props, default_value, days) { - if (_.isObject(props)) { - if (typeof(default_value) === 'undefined') { default_value = 'None'; } - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ +OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); - this.load(); + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } - _.each(props, function(val, prop) { - if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { - this['props'][prop] = val; - } - }, this); + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); +}; - this.save(); +/** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ - return true; - } - return false; -}; /** -* @param {Object} props -* @param {number=} days -*/ -MixpanelPersistence.prototype.register = function(props, days) { - if (_.isObject(props)) { - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ +var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; +}; - this.load(); - _.extend(this['props'], props); - this.save(); +// delete what an earlier page stored without consent +ConsentDecisions.prototype.init = function() { + this._reconcile(); +}; - return true; +/** + * @returns {string} + */ +ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; } - return false; + return this.appliedState; }; -MixpanelPersistence.prototype.unregister = function(prop) { - this.load(); - if (prop in this['props']) { - delete this['props'][prop]; - this.save(); - } +/** + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; }; -MixpanelPersistence.prototype.update_search_keyword = function(referrer) { - this.register(_.info.searchInfo(referrer)); +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -// EXPORTED METHOD, we test this directly. -MixpanelPersistence.prototype.update_referrer_info = function(referrer) { - // If referrer doesn't exist, we want to note the fact that it was type-in traffic. - this.register_once({ - '$initial_referrer': referrer || '$direct', - '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' - }, ''); +/** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ +ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); }; -MixpanelPersistence.prototype.get_referrer_info = function() { - return _.strip_empty_properties({ - '$initial_referrer': this['props']['$initial_referrer'], - '$initial_referring_domain': this['props']['$initial_referring_domain'] - }); +ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); }; -MixpanelPersistence.prototype.update_config = function(config) { - this.default_expiry = this.expire_days = config['cookie_expiration']; - this.set_disabled(config['disable_persistence']); - this.set_cookie_domain(config['cookie_domain']); - this.set_cross_site(config['cross_site_cookie']); - this.set_cross_subdomain(config['cross_subdomain_cookie']); - this.set_secure(config['secure_cookie']); +ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); }; -MixpanelPersistence.prototype.set_disabled = function(disabled) { - this.disabled = disabled; - if (this.disabled) { - this.remove(); - } else { - this.save(); +/** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ +ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } +}; + +ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; }; -MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { - if (cookie_domain !== this.cookie_domain) { - this.remove(); - this.cookie_domain = cookie_domain; - this.save(); +/** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ +ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); } }; -MixpanelPersistence.prototype.set_cross_site = function(cross_site) { - if (cross_site !== this.cross_site) { - this.cross_site = cross_site; - this.remove(); - this.save(); +/** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ +ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; } + this._writeDecisionKey(this._decisionKey(), flag); }; -MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { - if (cross_subdomain !== this.cross_subdomain) { - this.cross_subdomain = cross_subdomain; - this.remove(); - this.save(); +/** + * @param {string} key + * @param {string|null} value null to remove it + */ +ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); } }; -MixpanelPersistence.prototype.get_cross_subdomain = function() { - return this.cross_subdomain; +// the store the persistence uses, chosen without the localStorage support probe, which writes a key +ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); }; -MixpanelPersistence.prototype.set_secure = function(secure) { - if (secure !== this.secure) { - this.secure = secure ? true : false; - this.remove(); - this.save(); - } +ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; }; -MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { - var q_key = this._get_queue_key(queue), - q_data = data[queue], - set_q = this._get_or_create_queue(SET_ACTION), - set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), - unset_q = this._get_or_create_queue(UNSET_ACTION), - add_q = this._get_or_create_queue(ADD_ACTION), - union_q = this._get_or_create_queue(UNION_ACTION), - remove_q = this._get_or_create_queue(REMOVE_ACTION, []), - append_q = this._get_or_create_queue(APPEND_ACTION, []); +ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); +}; - if (q_key === SET_QUEUE_KEY) { - // Update the set queue - we can override any existing values - _.extend(set_q, q_data); - // if there was a pending increment, override it - // with the set. - this._pop_from_people_queue(ADD_ACTION, q_data); - // if there was a pending union, override it - // with the set. - this._pop_from_people_queue(UNION_ACTION, q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === SET_ONCE_QUEUE_KEY) { - // only queue the data if there is not already a set_once call for it. - _.each(q_data, function(v, k) { - if (!(k in set_once_q)) { - set_once_q[k] = v; - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNSET_QUEUE_KEY) { - _.each(q_data, function(prop) { +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ +ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); +}; - // undo previously-queued actions on this key - _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { - if (prop in enqueued_obj) { - delete enqueued_obj[prop]; - } - }); - _.each(append_q, function(append_obj) { - if (prop in append_obj) { - delete append_obj[prop]; - } - }); +/** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ +ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); +}; - unset_q[prop] = true; +/** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + +/** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ +function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; }); - } else if (q_key === ADD_QUEUE_KEY) { - _.each(q_data, function(v, k) { - // If it exists in the set queue, increment - // the value - if (k in set_q) { - set_q[k] += v; - } else { - // If it doesn't exist, update the add - // queue - if (!(k in add_q)) { - add_q[k] = 0; - } - add_q[k] += v; - } - }, this); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNION_QUEUE_KEY) { - _.each(q_data, function(v, k) { - if (_.isArray(v)) { - if (!(k in union_q)) { - union_q[k] = []; - } - // Prevent duplicate values - _.each(v, function(item) { - if (!_.include(union_q[k], item)) { - union_q[k].push(item); - } - }); - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === REMOVE_QUEUE_KEY) { - remove_q.push(q_data); - this._pop_from_people_queue(APPEND_ACTION, q_data); - } else if (q_key === APPEND_QUEUE_KEY) { - append_q.push(q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); + if (same) { + answers[capability] = answer; + } + }); + return answers; +} + +/** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ +var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; +}; + +/** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ +ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; } + return CONSENT_STATES[this.state()][capability]; +}; - console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); - console.log(data); +/** + * @returns {string} + */ +ConsentManager.prototype.state = function() { + return this.decisions.state(); +}; - this.save(); +/** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ +ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; }; -MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { - var q = this['props'][this._get_queue_key(queue)]; - if (!_.isUndefined(q)) { - _.each(data, function(v, k) { - if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { - // list actions: only remove if both k+v match - // e.g. remove should not override append in a case like - // append({foo: 'bar'}); remove({foo: 'qux'}) - _.each(q, function(queued_action) { - if (queued_action[k] === v) { - delete queued_action[k]; - } - }); - } else { - delete q[k]; - } - }, this); - } +/** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ +ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; }; -MixpanelPersistence.prototype.load_queue = function(queue) { - return this.load_prop(this._get_queue_key(queue)); +/** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ +ConsentManager.prototype.init = function() { + this.decisions.init(); }; -MixpanelPersistence.prototype._get_queue_key = function(queue) { - if (queue === SET_ACTION) { - return SET_QUEUE_KEY; - } else if (queue === SET_ONCE_ACTION) { - return SET_ONCE_QUEUE_KEY; - } else if (queue === UNSET_ACTION) { - return UNSET_QUEUE_KEY; - } else if (queue === ADD_ACTION) { - return ADD_QUEUE_KEY; - } else if (queue === APPEND_ACTION) { - return APPEND_QUEUE_KEY; - } else if (queue === REMOVE_ACTION) { - return REMOVE_QUEUE_KEY; - } else if (queue === UNION_ACTION) { - return UNION_QUEUE_KEY; - } else { - console.error('Invalid queue:', queue); - } +/** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); }; -MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { - var key = this._get_queue_key(queue); - default_val = _.isUndefined(default_val) ? {} : default_val; - return this['props'][key] || (this['props'][key] = default_val); +/** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); }; -MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - timers[event_name] = timestamp; - this['props'][EVENT_TIMERS_KEY] = timers; - this.save(); +/** + * @param {Object} [options] opt_in_tracking() options + */ +ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); }; -MixpanelPersistence.prototype.remove_event_timer = function(event_name) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - var timestamp = timers[event_name]; - if (!_.isUndefined(timestamp)) { - delete this['props'][EVENT_TIMERS_KEY][event_name]; - this.save(); - } - return timestamp; +/** + * @param {Object} [options] opt_out_tracking() options + */ +ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); +}; + +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); }; /* eslint camelcase: "off" */ @@ -8035,6 +8832,7 @@ var DEFAULT_CONFIG = { 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -8101,26 +8899,9 @@ var create_mplib = function(token, config, name) { instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -8215,6 +8996,19 @@ MixpanelLib.prototype._init = function(token, config, name) { 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -8222,6 +9016,7 @@ MixpanelLib.prototype._init = function(token, config, name) { getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -8239,64 +9034,16 @@ MixpanelLib.prototype._init = function(token, config, name) { }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && win.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - win.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - win.addEventListener('visibilitychange', function() { - if (document$1['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - var uuid = _.UUID(); - if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -8306,12 +9053,52 @@ MixpanelLib.prototype._init = function(token, config, name) { setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); +}; + +MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } +}; + +// the services that store or send on their own; at init, and again on an opt-in under 'require_consent' +MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -8323,21 +9110,174 @@ MixpanelLib.prototype._init = function(token, config, name) { } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } +}; - this.autocapture = new Autocapture(this); - this.autocapture.init(); +/** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ +MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); +}; + +/** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ +MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); +}; + +/** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ +MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); +}; + +MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); +}; + +MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + consentGate: this._consent, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + + if (sendBeacon && win.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + win.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + win.addEventListener('visibilitychange', function() { + if (document$1['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } + } + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { + this.start_batch_senders(); + } +}; + +MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); }; /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ +MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); +}; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -8368,9 +9308,12 @@ MixpanelLib.prototype.get_tab_id = function () { return this.tab_id || null; }; -MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { +MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); -}); +}; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -8460,7 +9403,7 @@ MixpanelLib.prototype._dom_loaded = function() { this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -8522,6 +9465,15 @@ MixpanelLib.prototype._prepare_callback = function(callback, data) { MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -8679,6 +9631,10 @@ MixpanelLib.prototype._send_request = function(url, data, options, callback) { }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -8816,48 +9772,6 @@ MixpanelLib.prototype.get_batcher_configs = function() { return this._batcher_configs; }; -MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } -}; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -8995,7 +9909,6 @@ MixpanelLib.prototype._track_or_batch = function(options, callback) { return request_enqueued_or_initiated && truncated_data; }; -MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -9020,7 +9933,17 @@ MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(event_name, properties, options, callback) { +MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -9032,10 +9955,6 @@ function(event_name, properties, options, callback) { } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -9126,9 +10045,8 @@ function(event_name, properties, options, callback) { } return ret; -}); +}; -MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -9144,7 +10062,13 @@ MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ -function(group_key, group_ids, callback) { +MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -9152,9 +10076,8 @@ function(group_key, group_ids, callback) { prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); -}); +}; -MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -9167,7 +10090,13 @@ MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -9181,9 +10110,8 @@ function(group_key, group_id, callback) { } } return this['people'].union(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -9196,7 +10124,13 @@ MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -9210,9 +10144,8 @@ function(group_key, group_id, callback) { } } return this['people'].remove(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -9226,7 +10159,7 @@ MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(event_name, properties, groups, callback) { +MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -9234,7 +10167,7 @@ function(event_name, properties, groups, callback) { } }); return this.track(event_name, tracking_props, callback); -}); +}; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -9261,13 +10194,12 @@ MixpanelLib.prototype.get_group = function (group_key, group_id) { var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; -MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -9313,7 +10245,7 @@ MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(properties, options) { +MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -9337,7 +10269,7 @@ function(properties, options) { } return this.track(event_name, event_properties); -}); +}; /** * Track clicks on a set of document elements. Selector must be a @@ -9600,6 +10532,10 @@ MixpanelLib.prototype._register_single = function(prop, value) { * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -9612,6 +10548,12 @@ MixpanelLib.prototype.identify = function( // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -9676,11 +10618,11 @@ MixpanelLib.prototype.reset = function() { this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -9742,6 +10684,11 @@ MixpanelLib.prototype.get_distinct_id = function() { * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -9871,6 +10818,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -9922,6 +10874,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -10050,105 +11007,42 @@ MixpanelLib.prototype._event_is_disabled = function(event_name) { _.include(this.__disabled_events, event_name); }; -// perform some housekeeping around GDPR opt-in/out state -MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } +/** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ +MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ -MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; +MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; -// call a base gdpr function after constructing the appropriate token and options args -MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; +// delete the identified user's profile and charges, which the opt-out about to happen would block +MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); }; /** @@ -10170,6 +11064,10 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -10184,12 +11082,7 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -10207,6 +11100,10 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -10219,19 +11116,7 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -10243,13 +11128,15 @@ MixpanelLib.prototype.opt_out_tracking = function(options) { * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -10261,13 +11148,16 @@ MixpanelLib.prototype.has_opted_in_tracking = function(options) { * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -10286,6 +11176,11 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -10297,12 +11192,7 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -10366,6 +11256,7 @@ MixpanelLibProto['toString'] = MixpanelLibProto.toStri MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; +MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/dist/mixpanel-with-recorder.d.ts b/dist/mixpanel-with-recorder.d.ts index 6c9c4660..a0156e5f 100644 --- a/dist/mixpanel-with-recorder.d.ts +++ b/dist/mixpanel-with-recorder.d.ts @@ -10,6 +10,15 @@ export type Query = string | Element | Element[]; export type RemoteSettingType = "disabled" | "fallback" | "strict"; +/** + * What the SDK does before the visitor decides. "no_consent_required" tracks until + * opt_out_tracking(). "require_consent" stores and sends nothing until opt_in_tracking(); with it, + * opt_out_tracking_persistence_type and opt_out_persistence_by_default are ignored, and + * opt_out_tracking_cookie_prefix still names the stored flag. Unset means "no_consent_required"; + * opt_out_tracking_by_default applies only when consent_mode is unset. + */ +export type ConsentMode = "no_consent_required" | "require_consent" | null; + export interface EventTriggerProps { percentage: number; @@ -267,6 +276,7 @@ export interface Config { opt_out_persistence_by_default: boolean; opt_out_tracking_persistence_type: Persistence; opt_out_tracking_cookie_prefix: string; + consent_mode: ConsentMode; inapp_protocol: string; inapp_link_new_window: boolean; ignore_dnt: boolean; diff --git a/dist/mixpanel-with-recorder.js b/dist/mixpanel-with-recorder.js index 79850426..6b90af2e 100644 --- a/dist/mixpanel-with-recorder.js +++ b/dist/mixpanel-with-recorder.js @@ -28,7 +28,7 @@ var Config = { DEBUG: false, - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules @@ -20837,11 +20837,13 @@ /** * @type {import('./wrapper').StorageWrapper} */ - var IDBStorageWrapper = function (dbName, storeName, versionData) { + var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -20852,25 +20854,47 @@ var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -20970,622 +20994,312 @@ storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME] }; + var logger$9 = console_with_prefix('lock'); + /** - * GDPR utils + * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser + * window/tab at a time will be able to access shared resources. * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. + * Based on the Alur and Taubenfeld fast lock + * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html) + * with an added timeout to ensure there will be eventual progress in the event + * that a window is closed in the middle of the callback. * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. + * Implementation based on the original version by David Wolever (https://github.com/wolever) + * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432. + * + * @example + * const myLock = new SharedLock('some-key'); + * myLock.withLock(function() { + * console.log('I hold the mutex!'); + * }); + * + * @constructor */ + var SharedLock = function(key, options) { + options = options || {}; + this.storageKey = key; + this.storage = options.storage || getLocalStorage(); + this.pollIntervalMS = options.pollIntervalMS || 100; + this.timeoutMS = options.timeoutMS || 2000; - /** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ + // dependency-inject promise implementation for testing purposes + this.promiseImpl = options.promiseImpl || PromisePolyfill; + }; - /** Public **/ + // pass in a specific pid to test contention scenarios; otherwise + // it is chosen randomly for each acquisition attempt + SharedLock.prototype.withLock = function(lockedCB, pid) { + var Promise = this.promiseImpl; + return new Promise(_.bind(function (resolve, reject) { + var i = pid || (new Date().getTime() + '|' + Math.random()); + var startTime = new Date().getTime(); + var key = this.storageKey; + var pollIntervalMS = this.pollIntervalMS; + var timeoutMS = this.timeoutMS; + var storage = this.storage; - var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; + var keyX = key + ':X'; + var keyY = key + ':Y'; + var keyZ = key + ':Z'; - /** - * Opt the user in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ - function optIn(token, options) { - _optInOut(true, token, options); - } + var delay = function(cb) { + if (new Date().getTime() - startTime > timeoutMS) { + logger$9.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']'); + storage.removeItem(keyZ); + storage.removeItem(keyY); + loop(); + return; + } + setTimeout(function() { + try { + cb(); + } catch(err) { + reject(err); + } + }, pollIntervalMS * (Math.random() + 0.1)); + }; - /** - * Opt the user out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not - */ - function optOut(token, options) { - _optInOut(false, token, options); - } + var waitFor = function(predicate, cb) { + if (predicate()) { + cb(); + } else { + delay(function() { + waitFor(predicate, cb); + }); + } + }; - /** - * Check whether the user has opted in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {boolean} whether the user has opted in to the given opt type - */ - function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; - } + var getSetY = function() { + var valY = storage.getItem(keyY); + if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases) + return false; + } else { + storage.setItem(keyY, i); + if (storage.getItem(keyY) === i) { + return true; + } else { + if (!localStorageSupported(storage, true)) { + reject(new Error('localStorage support dropped while acquiring lock')); + } + return false; + } + } + }; - /** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ - function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); - } - return optedOut; - } + var loop = function() { + storage.setItem(keyX, i); - /** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); - } + waitFor(getSetY, function() { + if (storage.getItem(keyX) === i) { + criticalSection(); + return; + } - /** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); - } + delay(function() { + if (storage.getItem(keyY) !== i) { + loop(); + return; + } + waitFor(function() { + return !storage.getItem(keyZ); + }, criticalSection); + }); + }); + }; - /** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); - } + var criticalSection = function() { + storage.setItem(keyZ, '1'); + var removeLock = function () { + storage.removeItem(keyZ); + if (storage.getItem(keyY) === i) { + storage.removeItem(keyY); + } + if (storage.getItem(keyX) === i) { + storage.removeItem(keyX); + } + }; - /** - * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ - function clearOptInOut(token, options) { - options = options || {}; - _getStorage(options).remove( - _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain - ); - } + lockedCB() + .then(function (ret) { + removeLock(); + resolve(ret); + }) + .catch(function (err) { + removeLock(); + reject(err); + }); + }; - /** Private **/ + try { + if (localStorageSupported(storage, true)) { + loop(); + } else { + throw new Error('localStorage support check failed'); + } + } catch(err) { + reject(err); + } + }, this)); + }; /** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage + * @type {import('./wrapper').StorageWrapper} */ - function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; - } + var LocalStorageWrapper = function (storageOverride) { + this.storage = storageOverride || getLocalStorage(); + }; - /** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type - */ - function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; - } + LocalStorageWrapper.prototype.init = function () { + if (!this.storage) { + return PromisePolyfill.reject(new Error('localStorage is not available')); + } + return PromisePolyfill.resolve(); + }; - /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type - */ - function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); - } + LocalStorageWrapper.prototype.isInitialized = function () { + return true; + }; - /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read - */ - function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; - } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; - } + LocalStorageWrapper.prototype.setItem = function (key, value) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + try { + this.storage.setItem(key, JSONStringify(value)); + } catch (e) { + reject(e); + } + resolve(); + }, this)); + }; - /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true - */ - function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; - } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; + LocalStorageWrapper.prototype.getItem = function (key) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + var item; + try { + item = JSONParse(this.storage.getItem(key)); + } catch (e) { + reject(e); + } + resolve(item); + }, this)); + }; - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; + LocalStorageWrapper.prototype.removeItem = function (key) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + try { + this.storage.removeItem(key); + } catch (e) { + reject(e); } - }); + resolve(); + }, this)); + }; - return hasDntOn; - } + var logger$8 = console_with_prefix('batch'); /** - * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type - * @param {boolean} optValue - whether to opt the user in or out for the given opt type - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + * RequestQueue: queue for batching API requests with localStorage backup for retries. + * Maintains an in-memory queue which represents the source of truth for the current + * page, but also writes all items out to a copy in the browser's localStorage, which + * can be read on subsequent pageloads and retried. For batchability, all the request + * items in the queue should be of the same type (events, people updates, group updates) + * so they can be sent in a single request to the same API endpoint. + * + * LocalStorage keying and locking: In order for reloads and subsequent pageloads of + * the same site to access the same persisted data, they must share the same localStorage + * key (for instance based on project token and queue type). Therefore access to the + * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent + * simultaneously open windows/tabs from overwriting each other's data (which would lead + * to data loss in some situations). + * @constructor */ - function _optInOut(optValue, token, options) { - if (!_.isString(token) || !token.length) { - console$1.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); - return; - } - + var RequestQueue = function (storageKey, options) { options = options || {}; - - _getStorage(options).set( - _getStorageKey(token, options), - optValue ? 1 : 0, - _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, - !!options.crossSubdomainCookie, - !!options.secureCookie, - !!options.crossSiteCookie, - options.cookieDomain - ); - - if (options.track && optValue) { // only track event if opting in (optValue=true) - options.track(options.trackEventName || '$opt_in', options.trackProperties, { - 'send_immediately': true + this.storageKey = storageKey; + this.usePersistence = options.usePersistence; + if (this.usePersistence) { + this.queueStorage = options.queueStorage || new LocalStorageWrapper(); + this.lock = new SharedLock(storageKey, { + storage: options.sharedLockStorage, + timeoutMS: options.sharedLockTimeoutMS, }); } - } - - /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out - */ - function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; + this.reportError = options.errorReporter || _.bind(logger$8.error, logger$8); + this.consentGate = options.consentGate; - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console$1.error('Unexpected error when checking tracking opt-out status: ' + err); - } + this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios - if (!optedOut) { - return method.apply(this, arguments); - } + this.memQueue = []; + this.initialized = false; - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { - callback(0); - } + if (options.enqueueThrottleMs) { + this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs); + } else { + this.enqueuePersisted = _.bind(function (queueEntry) { + return this._enqueuePersisted([queueEntry]); + }, this); + } + }; - return; - }; - } + RequestQueue.prototype.ensureInit = function () { + if (this.initialized || !this.usePersistence) { + return PromisePolyfill.resolve(); + } - var logger$9 = console_with_prefix('lock'); + return this.queueStorage + .init() + .then(_.bind(function () { + this.initialized = true; + }, this)) + .catch(_.bind(function (err) { + this.reportError('Error initializing queue persistence. Disabling persistence', err); + this.initialized = true; + this.usePersistence = false; + }, this)); + }; /** - * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser - * window/tab at a time will be able to access shared resources. - * - * Based on the Alur and Taubenfeld fast lock - * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html) - * with an added timeout to ensure there will be eventual progress in the event - * that a window is closed in the middle of the callback. - * - * Implementation based on the original version by David Wolever (https://github.com/wolever) - * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432. - * - * @example - * const myLock = new SharedLock('some-key'); - * myLock.withLock(function() { - * console.log('I hold the mutex!'); - * }); + * Add one item to queues (memory and localStorage). The queued entry includes + * the given item along with an auto-generated ID and a "flush-after" timestamp. + * It is expected that the item will be sent over the network and dequeued + * before the flush-after time; if this doesn't happen it is considered orphaned + * (e.g., the original tab where it was enqueued got closed before it could be + * sent) and the item can be sent by any tab that finds it in localStorage. * - * @constructor + * The final callback param is called with a param indicating success or + * failure of the enqueue operation; it is asynchronous because the localStorage + * lock is asynchronous. */ - var SharedLock = function(key, options) { - options = options || {}; + RequestQueue.prototype.enqueue = function (item, flushInterval) { + var queueEntry = { + 'id': cheap_guid(), + 'flushAfter': new Date().getTime() + flushInterval * 2, + 'payload': item + }; - this.storageKey = key; - this.storage = options.storage || getLocalStorage(); - this.pollIntervalMS = options.pollIntervalMS || 100; - this.timeoutMS = options.timeoutMS || 2000; + if (!this._persists()) { + this.memQueue.push(queueEntry); + return PromisePolyfill.resolve(true); + } else { + return this.enqueuePersisted(queueEntry); + } + }; - // dependency-inject promise implementation for testing purposes - this.promiseImpl = options.promiseImpl || PromisePolyfill; - }; - - // pass in a specific pid to test contention scenarios; otherwise - // it is chosen randomly for each acquisition attempt - SharedLock.prototype.withLock = function(lockedCB, pid) { - var Promise = this.promiseImpl; - return new Promise(_.bind(function (resolve, reject) { - var i = pid || (new Date().getTime() + '|' + Math.random()); - var startTime = new Date().getTime(); - var key = this.storageKey; - var pollIntervalMS = this.pollIntervalMS; - var timeoutMS = this.timeoutMS; - var storage = this.storage; - - var keyX = key + ':X'; - var keyY = key + ':Y'; - var keyZ = key + ':Z'; - - var delay = function(cb) { - if (new Date().getTime() - startTime > timeoutMS) { - logger$9.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']'); - storage.removeItem(keyZ); - storage.removeItem(keyY); - loop(); - return; - } - setTimeout(function() { - try { - cb(); - } catch(err) { - reject(err); - } - }, pollIntervalMS * (Math.random() + 0.1)); - }; - - var waitFor = function(predicate, cb) { - if (predicate()) { - cb(); - } else { - delay(function() { - waitFor(predicate, cb); - }); - } - }; - - var getSetY = function() { - var valY = storage.getItem(keyY); - if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases) - return false; - } else { - storage.setItem(keyY, i); - if (storage.getItem(keyY) === i) { - return true; - } else { - if (!localStorageSupported(storage, true)) { - reject(new Error('localStorage support dropped while acquiring lock')); - } - return false; - } - } - }; - - var loop = function() { - storage.setItem(keyX, i); - - waitFor(getSetY, function() { - if (storage.getItem(keyX) === i) { - criticalSection(); - return; - } - - delay(function() { - if (storage.getItem(keyY) !== i) { - loop(); - return; - } - waitFor(function() { - return !storage.getItem(keyZ); - }, criticalSection); - }); - }); - }; - - var criticalSection = function() { - storage.setItem(keyZ, '1'); - var removeLock = function () { - storage.removeItem(keyZ); - if (storage.getItem(keyY) === i) { - storage.removeItem(keyY); - } - if (storage.getItem(keyX) === i) { - storage.removeItem(keyX); - } - }; - - lockedCB() - .then(function (ret) { - removeLock(); - resolve(ret); - }) - .catch(function (err) { - removeLock(); - reject(err); - }); - }; - - try { - if (localStorageSupported(storage, true)) { - loop(); - } else { - throw new Error('localStorage support check failed'); - } - } catch(err) { - reject(err); - } - }, this)); - }; - - /** - * @type {import('./wrapper').StorageWrapper} - */ - var LocalStorageWrapper = function (storageOverride) { - this.storage = storageOverride || getLocalStorage(); - }; - - LocalStorageWrapper.prototype.init = function () { - if (!this.storage) { - return PromisePolyfill.reject(new Error('localStorage is not available')); - } - return PromisePolyfill.resolve(); - }; - - LocalStorageWrapper.prototype.isInitialized = function () { - return true; - }; - - LocalStorageWrapper.prototype.setItem = function (key, value) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - try { - this.storage.setItem(key, JSONStringify(value)); - } catch (e) { - reject(e); - } - resolve(); - }, this)); - }; - - LocalStorageWrapper.prototype.getItem = function (key) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - var item; - try { - item = JSONParse(this.storage.getItem(key)); - } catch (e) { - reject(e); - } - resolve(item); - }, this)); - }; - - LocalStorageWrapper.prototype.removeItem = function (key) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - try { - this.storage.removeItem(key); - } catch (e) { - reject(e); - } - resolve(); - }, this)); - }; - - var logger$8 = console_with_prefix('batch'); - - /** - * RequestQueue: queue for batching API requests with localStorage backup for retries. - * Maintains an in-memory queue which represents the source of truth for the current - * page, but also writes all items out to a copy in the browser's localStorage, which - * can be read on subsequent pageloads and retried. For batchability, all the request - * items in the queue should be of the same type (events, people updates, group updates) - * so they can be sent in a single request to the same API endpoint. - * - * LocalStorage keying and locking: In order for reloads and subsequent pageloads of - * the same site to access the same persisted data, they must share the same localStorage - * key (for instance based on project token and queue type). Therefore access to the - * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent - * simultaneously open windows/tabs from overwriting each other's data (which would lead - * to data loss in some situations). - * @constructor - */ - var RequestQueue = function (storageKey, options) { - options = options || {}; - this.storageKey = storageKey; - this.usePersistence = options.usePersistence; - if (this.usePersistence) { - this.queueStorage = options.queueStorage || new LocalStorageWrapper(); - this.lock = new SharedLock(storageKey, { - storage: options.sharedLockStorage, - timeoutMS: options.sharedLockTimeoutMS, - }); - } - this.reportError = options.errorReporter || _.bind(logger$8.error, logger$8); - - this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios - - this.memQueue = []; - this.initialized = false; - - if (options.enqueueThrottleMs) { - this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs); - } else { - this.enqueuePersisted = _.bind(function (queueEntry) { - return this._enqueuePersisted([queueEntry]); - }, this); - } - }; - - RequestQueue.prototype.ensureInit = function () { - if (this.initialized || !this.usePersistence) { - return PromisePolyfill.resolve(); - } - - return this.queueStorage - .init() - .then(_.bind(function () { - this.initialized = true; - }, this)) - .catch(_.bind(function (err) { - this.reportError('Error initializing queue persistence. Disabling persistence', err); - this.initialized = true; - this.usePersistence = false; - }, this)); - }; - - /** - * Add one item to queues (memory and localStorage). The queued entry includes - * the given item along with an auto-generated ID and a "flush-after" timestamp. - * It is expected that the item will be sent over the network and dequeued - * before the flush-after time; if this doesn't happen it is considered orphaned - * (e.g., the original tab where it was enqueued got closed before it could be - * sent) and the item can be sent by any tab that finds it in localStorage. - * - * The final callback param is called with a param indicating success or - * failure of the enqueue operation; it is asynchronous because the localStorage - * lock is asynchronous. - */ - RequestQueue.prototype.enqueue = function (item, flushInterval) { - var queueEntry = { - 'id': cheap_guid(), - 'flushAfter': new Date().getTime() + flushInterval * 2, - 'payload': item - }; - - if (!this.usePersistence) { - this.memQueue.push(queueEntry); - return PromisePolyfill.resolve(true); - } else { - return this.enqueuePersisted(queueEntry); - } + /** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ + RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); }; RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -21685,7 +21399,7 @@ }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -21773,7 +21487,7 @@ */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -21828,11 +21542,14 @@ RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); - }, this)) - .then(function () { - return true; - }) + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); + }, this)) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -21877,7 +21594,8 @@ sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -23909,6 +23627,8 @@ /** * @typedef {Object} SessionRecordingOptions * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib + * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks + * before it stores or sends * @property {String} [options.replayId] - unique uuid for a single replay * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length @@ -23939,6 +23659,7 @@ */ var SessionRecording = function(options) { this._mixpanel = options.mixpanelInstance; + this.consentGate = options.consentGate; this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC; this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC; this._onBatchSent = options.onBatchSent || NOOP_FUNC; @@ -23965,7 +23686,7 @@ // disable persistence if localStorage is not supported // request-queue will automatically disable persistence if indexedDB fails to initialize - var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence'); + var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence(); // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId; @@ -23979,6 +23700,7 @@ sharedLockStorage: options.sharedLockStorage, usePersistence: usePersistence, stopAllBatchingFunc: this.stopRecording.bind(this), + consentGate: this.consentGate, // increased throttle and shared lock timeout because recording events are very high frequency. // this will minimize the amount of lock contention between enqueued events. @@ -24034,13 +23756,6 @@ return this._mixpanel.get_config(configVar); }; - // Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which - // reaches into this class instance and expects the snake case version of the function. - // eslint-disable-next-line camelcase - SessionRecording.prototype.get_config = function(configVar) { - return this.getConfig(configVar); - }; - SessionRecording.prototype.startRecording = function (shouldStopBatcher) { if (this._rrwebRecord === null) { this.reportError('rrweb record function not provided. '); @@ -24215,19 +23930,15 @@ /** - * Flushes the current batch of events to the server, but passes an opt-out callback to make sure - * we stop recording and dump any queued events if the user has opted out. + * Flushes the current batch of events to the server, or stops recording if consent stops the calls. */ SessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) { - var onOptOut = function (code) { - // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out - if (code === 0) { - this.stopRecording(); - cb({error: 'Tracking has been opted out, stopping recording.'}); - } - }.bind(this); - - this._flushEvents(data, options, cb, onOptOut); + if (!this.consentGate.allowsApiCalls()) { + this.stopRecording(); + cb({error: 'Tracking has been opted out, stopping recording.'}); + return; + } + this._flushEvents(data, options, cb); }; /** @@ -24283,7 +23994,12 @@ return this.getConfig('api_routes')['record']; }; + // consent can be withdrawn while the batch is compressed, so it is checked again before sending SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) { + if (!this.consentGate.allowsApiCalls()) { + callback(0); + return; + } var onSuccess = function (response, responseBody) { // Update batch specific props only if the request was successful to guarantee ordering. // RequestBatcher will always flush the next batch after the previous one succeeds. @@ -24320,7 +24036,7 @@ }); }; - SessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) { + SessionRecording.prototype._flushEvents = function(data, options, callback) { var numEvents = data.length; if (numEvents > 0) { @@ -24387,7 +24103,7 @@ sendUncompressed(); } } - }); + }; SessionRecording.prototype.reportError = function(msg, err) { @@ -24442,9 +24158,10 @@ */ SessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) { return function(text, element) { - // prevent visual artifacts from random whitespace + // whitespace-only text has nothing to mask, and dropping it would join adjacent words + // (e.g. a space text node between two inline elements) if (!text.trim().length) { - return ''; + return text; } var shouldMask = true; @@ -24472,11 +24189,12 @@ this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA); this.errorReporter = options.errorReporter; this.mixpanelInstance = options.mixpanelInstance; + this.consentGate = options.consentGate; this.sharedLockStorage = options.sharedLockStorage; }; RecordingRegistry.prototype.isPersistenceEnabled = function() { - return !this.mixpanelInstance.get_config('disable_persistence'); + return this.consentGate.allowsPersistence(); }; RecordingRegistry.prototype.handleError = function (err) { @@ -24487,6 +24205,7 @@ * @param {import('./session-recording').SerializedRecording} serializedRecording */ RecordingRegistry.prototype.setActiveRecording = function (serializedRecording) { + // a recording that resumes after consent stops storage writes nothing if (!this.isPersistenceEnabled()) { return PromisePolyfill.resolve(); } @@ -24523,13 +24242,10 @@ }; RecordingRegistry.prototype.clearActiveRecording = function () { - if (this.isPersistenceEnabled()) { - // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. - // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. - return this.markActiveRecordingExpired(); - } else { - return this.deleteActiveRecording(); - } + // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. + // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. + // without persistence the entry is left as it is, and its unsent events wait for a load that allows them. + return this.markActiveRecordingExpired(); }; RecordingRegistry.prototype.markActiveRecordingExpired = function () { @@ -24543,16 +24259,6 @@ .catch(this.handleError.bind(this)); }; - RecordingRegistry.prototype.deleteActiveRecording = function () { - // avoid initializing IDB if this registry instance hasn't already written a recording - if (this.idb.isInitialized()) { - return this.idb.removeItem(this.mixpanelInstance.get_tab_id()) - .catch(this.handleError.bind(this)); - } else { - return PromisePolyfill.resolve(); - } - }; - /** * Flush any inactive recordings from the registry to minimize data loss. * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch. @@ -24575,6 +24281,7 @@ .map(function (serializedRecording) { var sessionRecording = SessionRecording.deserialize(serializedRecording, { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, sharedLockStorage: this.sharedLockStorage }); return sessionRecording.unloadPersistedData() @@ -24590,6 +24297,79 @@ .catch(this.handleError.bind(this)); }; + /** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + + /** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ + function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console$1.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; + } + + /** + * The consent gate the recorder bundle builds when it starts, and hands to its services. The core + * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name, + * the bundle being built separately. A core without it only knows the opt-out, through + * has_opted_out_tracking(). + * @param {Object} mixpanelInstance + * @returns {ConsentGate} + */ + function consentGateFor(mixpanelInstance) { + return buildConsentGate( + function(capability) { + var consentAllows = mixpanelInstance['_consent_allows']; + if (typeof consentAllows === 'function') { + return !!consentAllows.call(mixpanelInstance, capability); + } + return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking(); + }, + function(key) { + return mixpanelInstance.get_config(key); + } + ); + } + var logger$3 = console_with_prefix('recorder'); /** @@ -24600,12 +24380,14 @@ this.mixpanelInstance = mixpanelInstance; this.rrwebRecord = rrwebRecord || record; this.sharedLockStorage = sharedLockStorage; + this.consentGate = consentGateFor(mixpanelInstance); /** * @member {import('./registry').RecordingRegistry} */ this.recordingRegistry = new RecordingRegistry({ mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, errorReporter: logger$3.error, sharedLockStorage: sharedLockStorage }); @@ -24642,6 +24424,7 @@ */ var sessionRecordingOptions = { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, onBatchSent: onBatchSent, onIdleTimeout: onIdleTimeout, onMaxLengthReached: onMaxLengthReached, @@ -25878,16 +25661,23 @@ }); }; + /** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger$2.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger$2.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger$2.log('No persisted variants cleared from IndexedDB:', error); }); }; @@ -25950,11 +25740,15 @@ this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger$1.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -25970,7 +25764,7 @@ this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -26038,7 +25832,7 @@ }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -26069,6 +25863,14 @@ return !!this.flags; }; + /** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ + FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); + }; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -26364,6 +26166,9 @@ }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); @@ -26644,6 +26449,8 @@ this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -26655,8 +26462,8 @@ }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console$1.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console$1.log('Load recorder check skipped without persistence'); return PromisePolyfill.resolve(false); } @@ -26683,6 +26490,10 @@ }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console$1.log('Session recording skipped without consent'); + return PromisePolyfill.resolve(); + } if (!win['MutationObserver']) { console$1.critical('Browser does not support MutationObserver; skipping session recording'); return PromisePolyfill.resolve(); @@ -26691,6 +26502,11 @@ var loadRecorder = _.bind(function(startNewIfInactive) { return new PromisePolyfill(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new win[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); @@ -27220,13 +27036,19 @@ _.extend(MixpanelGroup.prototype, apiActions); - MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { + /** + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate + */ + MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { this._mixpanel = mixpanel_instance; this._group_key = group_key; this._group_id = group_id; + this.consentGate = consentGate; }; - MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** * Set properties on a group. * @@ -27246,15 +27068,20 @@ * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(prop, to, callback) { - var data = this.set_action(prop, to); + MixpanelGroup.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** * Set properties on a group, only if they do not yet exist. * This will not overwrite previous group property values, unlike @@ -27276,15 +27103,20 @@ * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(prop, to, callback) { - var data = this.set_once_action(prop, to); + MixpanelGroup.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( /** * Unset properties on a group permanently. * @@ -27296,12 +27128,17 @@ * @param {String} prop The name of the property. * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(prop, callback) { + MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( /** * Merge a given list with a list-valued group property, excluding duplicate values. * @@ -27315,15 +27152,20 @@ * @param {Array} values Values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(list_name, values, callback) { + MixpanelGroup.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( /** * Permanently delete a group. * @@ -27334,13 +27176,18 @@ * * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(callback) { + MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } // bracket notation above prevents a minification error related to reserved words var data = this.delete_action(); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( /** * Remove a property from a group. The value will be ignored if doesn't exist. * @@ -27353,10 +27200,16 @@ * @param {Object} value Value to remove from the given group property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(list_name, value, callback) { + MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); - }); + }; MixpanelGroup.prototype._send_request = function(data, callback) { data['$group_key'] = this._group_key; @@ -27405,11 +27258,15 @@ _.extend(MixpanelPeople.prototype, apiActions); - MixpanelPeople.prototype._init = function(mixpanel_instance) { + /** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ + MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; + this.consentGate = consentGate; }; - MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( /** * Set properties on a user record. * @@ -27430,11 +27287,17 @@ * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, to, callback) { - var data = this.set_action(prop, to); + MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); // make sure that the referrer info has been updated and saved if (this._get_config('save_referrer')) { this._mixpanel['persistence'].update_referrer_info(document.referrer); @@ -27447,9 +27310,8 @@ data[SET_ACTION] ); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( /** * Set properties on a user record, only if they do not yet exist. * This will not overwrite previous people property values, unlike @@ -27472,15 +27334,20 @@ * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, to, callback) { - var data = this.set_once_action(prop, to); + MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -27495,12 +27362,17 @@ * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, callback) { + MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -27527,7 +27399,16 @@ * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, by, callback) { + MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -27541,7 +27422,6 @@ } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -27553,9 +27433,8 @@ data[ADD_ACTION] = $add; return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -27576,15 +27455,20 @@ * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, value, callback) { + MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -27597,15 +27481,20 @@ * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, value, callback) { + MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -27633,15 +27522,20 @@ * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, values, callback) { + MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -27663,9 +27557,15 @@ * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ - function(amount, properties, callback) { // eslint-disable-line no-unused-vars + MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console$1.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); - }); + }; /** * Permanently clear all revenue report transactions from the @@ -27879,428 +27779,1340 @@ /* eslint camelcase: "off" */ - /* - * Constants + /* + * Constants + */ + /** @const */ var SET_QUEUE_KEY = '__mps'; + /** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; + /** @const */ var UNSET_QUEUE_KEY = '__mpus'; + /** @const */ var ADD_QUEUE_KEY = '__mpa'; + /** @const */ var APPEND_QUEUE_KEY = '__mpap'; + /** @const */ var REMOVE_QUEUE_KEY = '__mpr'; + /** @const */ var UNION_QUEUE_KEY = '__mpu'; + // This key is deprecated, but we want to check for it to see whether aliasing is allowed. + /** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; + /** @const */ var ALIAS_ID_KEY = '__alias'; + /** @const */ var EVENT_TIMERS_KEY = '__timers'; + /** @const */ var RESERVED_PROPERTIES = [ + SET_QUEUE_KEY, + SET_ONCE_QUEUE_KEY, + UNSET_QUEUE_KEY, + ADD_QUEUE_KEY, + APPEND_QUEUE_KEY, + REMOVE_QUEUE_KEY, + UNION_QUEUE_KEY, + PEOPLE_DISTINCT_ID_KEY, + ALIAS_ID_KEY, + EVENT_TIMERS_KEY + ]; + + // the store while persistence is off: nothing is read or written + /** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} + }; + + /** + * Mixpanel Persistence Object + * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() + */ + var MixpanelPersistence = function(config, options) { + this['props'] = {}; + this.campaign_params_saved = false; + + if (config['persistence_name']) { + this.name = 'mp_' + config['persistence_name']; + } else { + this.name = 'mp_' + config['token'] + '_mixpanel'; + } + + var storage_type = config['persistence']; + if (storage_type !== 'cookie' && storage_type !== 'localStorage') { + console$1.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); + config['persistence'] = 'cookie'; + } + this.storage_type = config['persistence']; + + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } + }; + + MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; + } else { + this.backend = _.cookie; + } + this.storage = this.backend; + }; + + MixpanelPersistence.prototype.properties = function() { + var p = {}; + + this.load(); + + // Filter out reserved properties + _.each(this['props'], function(v, k) { + if (!_.include(RESERVED_PROPERTIES, k)) { + p[k] = v; + } + }); + return p; + }; + + MixpanelPersistence.prototype.load = function() { + var entry = this.storage.parse(this.name); + + if (entry) { + this['props'] = _.extend({}, entry); + } + }; + + MixpanelPersistence.prototype.upgrade = function() { + var old_cookie, + old_localstorage; + + // if transferring from cookie to localStorage or vice-versa, copy existing + // super properties over to new storage mode + if (this.backend === _.localStorage) { + old_cookie = _.cookie.parse(this.name); + + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + + if (old_cookie) { + this.register_once(old_cookie); + } + } else if (this.backend === _.cookie) { + old_localstorage = _.localStorage.parse(this.name); + + _.localStorage.remove(this.name); + + if (old_localstorage) { + this.register_once(old_localstorage); + } + } + }; + + MixpanelPersistence.prototype.save = function() { + this.storage.set( + this.name, + JSONStringify(this['props']), + this.expire_days, + this.cross_subdomain, + this.secure, + this.cross_site, + this.cookie_domain + ); + }; + + MixpanelPersistence.prototype.load_prop = function(key) { + this.load(); + return this['props'][key]; + }; + + MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } + // remove both domain and subdomain cookies + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); + }; + + // removes the storage entry and deletes all loaded data + // forced name for tests + MixpanelPersistence.prototype.clear = function() { + this.remove(); + this['props'] = {}; + }; + + /** + * @param {Object} props + * @param {*=} default_value + * @param {number=} days + */ + MixpanelPersistence.prototype.register_once = function(props, default_value, days) { + if (_.isObject(props)) { + if (typeof(default_value) === 'undefined') { default_value = 'None'; } + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + + _.each(props, function(val, prop) { + if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { + this['props'][prop] = val; + } + }, this); + + this.save(); + + return true; + } + return false; + }; + + /** + * @param {Object} props + * @param {number=} days + */ + MixpanelPersistence.prototype.register = function(props, days) { + if (_.isObject(props)) { + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + _.extend(this['props'], props); + this.save(); + + return true; + } + return false; + }; + + MixpanelPersistence.prototype.unregister = function(prop) { + this.load(); + if (prop in this['props']) { + delete this['props'][prop]; + this.save(); + } + }; + + MixpanelPersistence.prototype.update_search_keyword = function(referrer) { + this.register(_.info.searchInfo(referrer)); + }; + + // EXPORTED METHOD, we test this directly. + MixpanelPersistence.prototype.update_referrer_info = function(referrer) { + // If referrer doesn't exist, we want to note the fact that it was type-in traffic. + this.register_once({ + '$initial_referrer': referrer || '$direct', + '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' + }, ''); + }; + + MixpanelPersistence.prototype.get_referrer_info = function() { + return _.strip_empty_properties({ + '$initial_referrer': this['props']['$initial_referrer'], + '$initial_referring_domain': this['props']['$initial_referring_domain'] + }); + }; + + MixpanelPersistence.prototype.update_config = function(config) { + this.default_expiry = this.expire_days = config['cookie_expiration']; + this.set_disabled(config['disable_persistence']); + this.set_cookie_domain(config['cookie_domain']); + this.set_cross_site(config['cross_site_cookie']); + this.set_cross_subdomain(config['cross_subdomain_cookie']); + this.set_secure(config['secure_cookie']); + }; + + /** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ + MixpanelPersistence.prototype.set_disabled = function(disabled) { + this.disabled = disabled; + this._update_storage(); + }; + + /** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ + MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); + }; + + /** + * Read and write storage again, saving the props in memory to it. + */ + MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); + }; + + /** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ + MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); + }; + + MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; + this.remove(); + } else { + this.storage = this.backend; + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { + if (cookie_domain !== this.cookie_domain) { + this.remove(); + this.cookie_domain = cookie_domain; + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cross_site = function(cross_site) { + if (cross_site !== this.cross_site) { + this.cross_site = cross_site; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { + if (cross_subdomain !== this.cross_subdomain) { + this.cross_subdomain = cross_subdomain; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype.get_cross_subdomain = function() { + return this.cross_subdomain; + }; + + MixpanelPersistence.prototype.set_secure = function(secure) { + if (secure !== this.secure) { + this.secure = secure ? true : false; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { + var q_key = this._get_queue_key(queue), + q_data = data[queue], + set_q = this._get_or_create_queue(SET_ACTION), + set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), + unset_q = this._get_or_create_queue(UNSET_ACTION), + add_q = this._get_or_create_queue(ADD_ACTION), + union_q = this._get_or_create_queue(UNION_ACTION), + remove_q = this._get_or_create_queue(REMOVE_ACTION, []), + append_q = this._get_or_create_queue(APPEND_ACTION, []); + + if (q_key === SET_QUEUE_KEY) { + // Update the set queue - we can override any existing values + _.extend(set_q, q_data); + // if there was a pending increment, override it + // with the set. + this._pop_from_people_queue(ADD_ACTION, q_data); + // if there was a pending union, override it + // with the set. + this._pop_from_people_queue(UNION_ACTION, q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === SET_ONCE_QUEUE_KEY) { + // only queue the data if there is not already a set_once call for it. + _.each(q_data, function(v, k) { + if (!(k in set_once_q)) { + set_once_q[k] = v; + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNSET_QUEUE_KEY) { + _.each(q_data, function(prop) { + + // undo previously-queued actions on this key + _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { + if (prop in enqueued_obj) { + delete enqueued_obj[prop]; + } + }); + _.each(append_q, function(append_obj) { + if (prop in append_obj) { + delete append_obj[prop]; + } + }); + + unset_q[prop] = true; + + }); + } else if (q_key === ADD_QUEUE_KEY) { + _.each(q_data, function(v, k) { + // If it exists in the set queue, increment + // the value + if (k in set_q) { + set_q[k] += v; + } else { + // If it doesn't exist, update the add + // queue + if (!(k in add_q)) { + add_q[k] = 0; + } + add_q[k] += v; + } + }, this); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNION_QUEUE_KEY) { + _.each(q_data, function(v, k) { + if (_.isArray(v)) { + if (!(k in union_q)) { + union_q[k] = []; + } + // Prevent duplicate values + _.each(v, function(item) { + if (!_.include(union_q[k], item)) { + union_q[k].push(item); + } + }); + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === REMOVE_QUEUE_KEY) { + remove_q.push(q_data); + this._pop_from_people_queue(APPEND_ACTION, q_data); + } else if (q_key === APPEND_QUEUE_KEY) { + append_q.push(q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } + + console$1.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); + console$1.log(data); + + this.save(); + }; + + MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { + var q = this['props'][this._get_queue_key(queue)]; + if (!_.isUndefined(q)) { + _.each(data, function(v, k) { + if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { + // list actions: only remove if both k+v match + // e.g. remove should not override append in a case like + // append({foo: 'bar'}); remove({foo: 'qux'}) + _.each(q, function(queued_action) { + if (queued_action[k] === v) { + delete queued_action[k]; + } + }); + } else { + delete q[k]; + } + }, this); + } + }; + + MixpanelPersistence.prototype.load_queue = function(queue) { + return this.load_prop(this._get_queue_key(queue)); + }; + + MixpanelPersistence.prototype._get_queue_key = function(queue) { + if (queue === SET_ACTION) { + return SET_QUEUE_KEY; + } else if (queue === SET_ONCE_ACTION) { + return SET_ONCE_QUEUE_KEY; + } else if (queue === UNSET_ACTION) { + return UNSET_QUEUE_KEY; + } else if (queue === ADD_ACTION) { + return ADD_QUEUE_KEY; + } else if (queue === APPEND_ACTION) { + return APPEND_QUEUE_KEY; + } else if (queue === REMOVE_ACTION) { + return REMOVE_QUEUE_KEY; + } else if (queue === UNION_ACTION) { + return UNION_QUEUE_KEY; + } else { + console$1.error('Invalid queue:', queue); + } + }; + + MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { + var key = this._get_queue_key(queue); + default_val = _.isUndefined(default_val) ? {} : default_val; + return this['props'][key] || (this['props'][key] = default_val); + }; + + MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + timers[event_name] = timestamp; + this['props'][EVENT_TIMERS_KEY] = timers; + this.save(); + }; + + MixpanelPersistence.prototype.remove_event_timer = function(event_name) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + var timestamp = timers[event_name]; + if (!_.isUndefined(timestamp)) { + delete this['props'][EVENT_TIMERS_KEY][event_name]; + this.save(); + } + return timestamp; + }; + + /** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + + + /** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; + /** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + + /** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + + /** @const */ var DECISION_NONE = 'none'; + /** @const */ var DECISION_OPTED_IN = 'opted_in'; + /** @const */ var DECISION_OPTED_OUT = 'opted_out'; + // Do Not Track counts as an objection + /** @const */ var DECISION_OBJECTED = 'objected'; + + /** @const */ var STATE_FULL = 'full'; + /** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; + /** @const */ var STATE_BLOCKED = 'blocked'; + + /** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} + }; + + /** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ + /** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} + }; + + /** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ + function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console$1.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; + } + + /** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ + function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; + } + + /** + * GDPR utils + * + * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection + * and privacy for all individuals within the European Union. It addresses the export of personal + * data outside the EU. The GDPR aims primarily to give control back to citizens and residents + * over their personal data and to simplify the regulatory environment for international business + * by unifying the regulation within the EU. + * + * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. + * These functions are used internally by the SDK and are not intended to be publicly exposed. + */ + + + /** + * A function used to track a Mixpanel event (e.g. MixpanelLib.track) + * @callback trackFunction + * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. + * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. + * @param {Function} [callback] If provided, the callback function will be called after tracking the event. + */ + + /** Public **/ + + var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; + + /** + * Opt the user in to data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function optIn(token, options) { + _optInOut(true, token, options); + } + + /** + * Opt the user out of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not + */ + function optOut(token, options) { + _optInOut(false, token, options); + } + + /** + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ + function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; + } + + /** + * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function clearOptInOut(token, options) { + options = options || {}; + _getStorage(options).remove( + _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain + ); + } + + /** Private **/ + + /** + * Get storage util + * @param {Object} [options] + * @param {string} [options.persistenceType] + * @returns {object} either _.cookie or _.localstorage + */ + function _getStorage(options) { + options = options || {}; + return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; + } + + /** + * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the name of the cookie for the given opt type + */ + function _getStorageKey(token, options) { + options = options || {}; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; + } + + /** + * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the value of the cookie for the given opt type + */ + function readOptInOutFlag(token, options) { + return _getStorage(options).get(_getStorageKey(token, options)); + } + + /** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ + function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); + } + + /** + * Check whether the user has set the DNT/doNotTrack setting to true in their browser + * @param {Object} [options] + * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests + * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false + * @returns {boolean} whether the DNT setting is true + */ + function hasDoNotTrackFlagOn(options) { + if (options && options.ignoreDnt) { + return false; + } + var win$1 = (options && options.window) || win; + var nav = win$1['navigator'] || {}; + var hasDntOn = false; + + _.each([ + nav['doNotTrack'], // standard + nav['msDoNotTrack'], + win$1['doNotTrack'] + ], function(dntValue) { + if (_.includes([true, 1, '1', 'yes'], dntValue)) { + hasDntOn = true; + } + }); + + return hasDntOn; + } + + /** + * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type + * @param {boolean} optValue - whether to opt the user in or out for the given opt type + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function _optInOut(optValue, token, options) { + if (!_.isString(token) || !token.length) { + console$1.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + return; + } + + options = options || {}; + + _getStorage(options).set( + _getStorageKey(token, options), + optValue ? 1 : 0, + _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, + !!options.crossSubdomainCookie, + !!options.secureCookie, + !!options.crossSiteCookie, + options.cookieDomain + ); + + if (options.track && optValue) { // only track event if opting in (optValue=true) + options.track(options.trackEventName || '$opt_in', options.trackProperties, { + 'send_immediately': true + }); + } + } + + /** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. */ - /** @const */ var SET_QUEUE_KEY = '__mps'; - /** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; - /** @const */ var UNSET_QUEUE_KEY = '__mpus'; - /** @const */ var ADD_QUEUE_KEY = '__mpa'; - /** @const */ var APPEND_QUEUE_KEY = '__mpap'; - /** @const */ var REMOVE_QUEUE_KEY = '__mpr'; - /** @const */ var UNION_QUEUE_KEY = '__mpu'; - // This key is deprecated, but we want to check for it to see whether aliasing is allowed. - /** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; - /** @const */ var ALIAS_ID_KEY = '__alias'; - /** @const */ var EVENT_TIMERS_KEY = '__timers'; - /** @const */ var RESERVED_PROPERTIES = [ - SET_QUEUE_KEY, - SET_ONCE_QUEUE_KEY, - UNSET_QUEUE_KEY, - ADD_QUEUE_KEY, - APPEND_QUEUE_KEY, - REMOVE_QUEUE_KEY, - UNION_QUEUE_KEY, - PEOPLE_DISTINCT_ID_KEY, - ALIAS_ID_KEY, - EVENT_TIMERS_KEY - ]; + /** - * Mixpanel Persistence Object * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges */ - var MixpanelPersistence = function(config) { - this['props'] = {}; - this.campaign_params_saved = false; - - if (config['persistence_name']) { - this.name = 'mp_' + config['persistence_name']; - } else { - this.name = 'mp_' + config['token'] + '_mixpanel'; - } + var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; + }; - var storage_type = config['persistence']; - if (storage_type !== 'cookie' && storage_type !== 'localStorage') { - console$1.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; + /** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ + OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; - } else { - this.storage = _.cookie; + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); }; - MixpanelPersistence.prototype.properties = function() { - var p = {}; - - this.load(); - - // Filter out reserved properties - _.each(this['props'], function(v, k) { - if (!_.include(RESERVED_PROPERTIES, k)) { - p[k] = v; - } - }); - return p; + // opt_out_tracking_by_default applies only without consent_mode, which replaces it + OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); }; - MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } + /** + * @returns {string} + */ + OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; + }; - var entry = this.storage.parse(this.name); + /** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ + OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; + }; - if (entry) { - this['props'] = _.extend({}, entry); - } + /** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ + OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; - MixpanelPersistence.prototype.upgrade = function() { - var old_cookie, - old_localstorage; + /** + * @param {Object} [options] opt_in_tracking() options + */ + OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); + }; - // if transferring from cookie to localStorage or vice-versa, copy existing - // super properties over to new storage mode - if (this.storage === _.localStorage) { - old_cookie = _.cookie.parse(this.name); + /** + * @param {Object} [options] opt_out_tracking() options + */ + OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); - _.cookie.remove(this.name); - _.cookie.remove(this.name, true); + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } - if (old_cookie) { - this.register_once(old_cookie); - } - } else if (this.storage === _.cookie) { - old_localstorage = _.localStorage.parse(this.name); + this._writeFlag(optOut, options); + this._updatePersistence(options); + }; - _.localStorage.remove(this.name); + /** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ + OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); + }; - if (old_localstorage) { - this.register_once(old_localstorage); - } + /** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ + OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); } }; - MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - - this.storage.set( - this.name, - JSONStringify(this['props']), - this.expire_days, - this.cross_subdomain, - this.secure, - this.cross_site, - this.cookie_domain - ); - }; + /** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ + OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); - MixpanelPersistence.prototype.load_prop = function(key) { - this.load(); - return this['props'][key]; - }; + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } - MixpanelPersistence.prototype.remove = function() { - // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); }; - // removes the storage entry and deletes all loaded data - // forced name for tests - MixpanelPersistence.prototype.clear = function() { - this.remove(); - this['props'] = {}; + /** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ + OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); }; /** - * @param {Object} props - * @param {*=} default_value - * @param {number=} days - */ - MixpanelPersistence.prototype.register_once = function(props, default_value, days) { - if (_.isObject(props)) { - if (typeof(default_value) === 'undefined') { default_value = 'None'; } - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ + OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); - this.load(); + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } - _.each(props, function(val, prop) { - if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { - this['props'][prop] = val; - } - }, this); + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); + }; - this.save(); + /** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ - return true; - } - return false; - }; /** - * @param {Object} props - * @param {number=} days - */ - MixpanelPersistence.prototype.register = function(props, days) { - if (_.isObject(props)) { - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ + var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; + }; - this.load(); - _.extend(this['props'], props); - this.save(); + // delete what an earlier page stored without consent + ConsentDecisions.prototype.init = function() { + this._reconcile(); + }; - return true; + /** + * @returns {string} + */ + ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; } - return false; + return this.appliedState; }; - MixpanelPersistence.prototype.unregister = function(prop) { - this.load(); - if (prop in this['props']) { - delete this['props'][prop]; - this.save(); - } + /** + * @returns {boolean} + */ + ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; }; - MixpanelPersistence.prototype.update_search_keyword = function(referrer) { - this.register(_.info.searchInfo(referrer)); + /** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ + ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; - // EXPORTED METHOD, we test this directly. - MixpanelPersistence.prototype.update_referrer_info = function(referrer) { - // If referrer doesn't exist, we want to note the fact that it was type-in traffic. - this.register_once({ - '$initial_referrer': referrer || '$direct', - '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' - }, ''); + /** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ + ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); }; - MixpanelPersistence.prototype.get_referrer_info = function() { - return _.strip_empty_properties({ - '$initial_referrer': this['props']['$initial_referrer'], - '$initial_referring_domain': this['props']['$initial_referring_domain'] - }); + ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); }; - MixpanelPersistence.prototype.update_config = function(config) { - this.default_expiry = this.expire_days = config['cookie_expiration']; - this.set_disabled(config['disable_persistence']); - this.set_cookie_domain(config['cookie_domain']); - this.set_cross_site(config['cross_site_cookie']); - this.set_cross_subdomain(config['cross_subdomain_cookie']); - this.set_secure(config['secure_cookie']); + ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); }; - MixpanelPersistence.prototype.set_disabled = function(disabled) { - this.disabled = disabled; - if (this.disabled) { - this.remove(); - } else { - this.save(); + /** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ + ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } + }; + + ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; }; - MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { - if (cookie_domain !== this.cookie_domain) { - this.remove(); - this.cookie_domain = cookie_domain; - this.save(); + /** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ + ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); } }; - MixpanelPersistence.prototype.set_cross_site = function(cross_site) { - if (cross_site !== this.cross_site) { - this.cross_site = cross_site; - this.remove(); - this.save(); + /** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ + ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; } + this._writeDecisionKey(this._decisionKey(), flag); }; - MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { - if (cross_subdomain !== this.cross_subdomain) { - this.cross_subdomain = cross_subdomain; - this.remove(); - this.save(); + /** + * @param {string} key + * @param {string|null} value null to remove it + */ + ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); } }; - MixpanelPersistence.prototype.get_cross_subdomain = function() { - return this.cross_subdomain; + // the store the persistence uses, chosen without the localStorage support probe, which writes a key + ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); }; - MixpanelPersistence.prototype.set_secure = function(secure) { - if (secure !== this.secure) { - this.secure = secure ? true : false; - this.remove(); - this.save(); - } + ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; }; - MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { - var q_key = this._get_queue_key(queue), - q_data = data[queue], - set_q = this._get_or_create_queue(SET_ACTION), - set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), - unset_q = this._get_or_create_queue(UNSET_ACTION), - add_q = this._get_or_create_queue(ADD_ACTION), - union_q = this._get_or_create_queue(UNION_ACTION), - remove_q = this._get_or_create_queue(REMOVE_ACTION, []), - append_q = this._get_or_create_queue(APPEND_ACTION, []); + ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); + }; - if (q_key === SET_QUEUE_KEY) { - // Update the set queue - we can override any existing values - _.extend(set_q, q_data); - // if there was a pending increment, override it - // with the set. - this._pop_from_people_queue(ADD_ACTION, q_data); - // if there was a pending union, override it - // with the set. - this._pop_from_people_queue(UNION_ACTION, q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === SET_ONCE_QUEUE_KEY) { - // only queue the data if there is not already a set_once call for it. - _.each(q_data, function(v, k) { - if (!(k in set_once_q)) { - set_once_q[k] = v; - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNSET_QUEUE_KEY) { - _.each(q_data, function(prop) { + /** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ + ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); + }; - // undo previously-queued actions on this key - _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { - if (prop in enqueued_obj) { - delete enqueued_obj[prop]; - } - }); - _.each(append_q, function(append_obj) { - if (prop in append_obj) { - delete append_obj[prop]; - } - }); + /** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ + ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); + }; - unset_q[prop] = true; + /** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + + /** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ + function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; }); - } else if (q_key === ADD_QUEUE_KEY) { - _.each(q_data, function(v, k) { - // If it exists in the set queue, increment - // the value - if (k in set_q) { - set_q[k] += v; - } else { - // If it doesn't exist, update the add - // queue - if (!(k in add_q)) { - add_q[k] = 0; - } - add_q[k] += v; - } - }, this); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNION_QUEUE_KEY) { - _.each(q_data, function(v, k) { - if (_.isArray(v)) { - if (!(k in union_q)) { - union_q[k] = []; - } - // Prevent duplicate values - _.each(v, function(item) { - if (!_.include(union_q[k], item)) { - union_q[k].push(item); - } - }); - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === REMOVE_QUEUE_KEY) { - remove_q.push(q_data); - this._pop_from_people_queue(APPEND_ACTION, q_data); - } else if (q_key === APPEND_QUEUE_KEY) { - append_q.push(q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); + if (same) { + answers[capability] = answer; + } + }); + return answers; + } + + /** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ + var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; + }; + + /** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ + ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; } + return CONSENT_STATES[this.state()][capability]; + }; - console$1.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); - console$1.log(data); + /** + * @returns {string} + */ + ConsentManager.prototype.state = function() { + return this.decisions.state(); + }; - this.save(); + /** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ + ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; }; - MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { - var q = this['props'][this._get_queue_key(queue)]; - if (!_.isUndefined(q)) { - _.each(data, function(v, k) { - if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { - // list actions: only remove if both k+v match - // e.g. remove should not override append in a case like - // append({foo: 'bar'}); remove({foo: 'qux'}) - _.each(q, function(queued_action) { - if (queued_action[k] === v) { - delete queued_action[k]; - } - }); - } else { - delete q[k]; - } - }, this); - } + /** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ + ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; }; - MixpanelPersistence.prototype.load_queue = function(queue) { - return this.load_prop(this._get_queue_key(queue)); + /** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ + ConsentManager.prototype.init = function() { + this.decisions.init(); }; - MixpanelPersistence.prototype._get_queue_key = function(queue) { - if (queue === SET_ACTION) { - return SET_QUEUE_KEY; - } else if (queue === SET_ONCE_ACTION) { - return SET_ONCE_QUEUE_KEY; - } else if (queue === UNSET_ACTION) { - return UNSET_QUEUE_KEY; - } else if (queue === ADD_ACTION) { - return ADD_QUEUE_KEY; - } else if (queue === APPEND_ACTION) { - return APPEND_QUEUE_KEY; - } else if (queue === REMOVE_ACTION) { - return REMOVE_QUEUE_KEY; - } else if (queue === UNION_ACTION) { - return UNION_QUEUE_KEY; - } else { - console$1.error('Invalid queue:', queue); - } + /** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ + ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); }; - MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { - var key = this._get_queue_key(queue); - default_val = _.isUndefined(default_val) ? {} : default_val; - return this['props'][key] || (this['props'][key] = default_val); + /** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ + ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); }; - MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - timers[event_name] = timestamp; - this['props'][EVENT_TIMERS_KEY] = timers; - this.save(); + /** + * @param {Object} [options] opt_in_tracking() options + */ + ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); }; - MixpanelPersistence.prototype.remove_event_timer = function(event_name) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - var timestamp = timers[event_name]; - if (!_.isUndefined(timestamp)) { - delete this['props'][EVENT_TIMERS_KEY][event_name]; - this.save(); - } - return timestamp; + /** + * @param {Object} [options] opt_out_tracking() options + */ + ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); + }; + + /** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ + ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); }; /* eslint camelcase: "off" */ @@ -28421,6 +29233,7 @@ 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -28487,26 +29300,9 @@ instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -28601,6 +29397,19 @@ 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -28608,6 +29417,7 @@ getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -28625,64 +29435,16 @@ }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console$1.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console$1.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && win.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - win.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - win.addEventListener('visibilitychange', function() { - if (document$1['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - var uuid = _.UUID(); - if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -28692,12 +29454,52 @@ setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); + }; + + MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } + }; + + // the services that store or send on their own; at init, and again on an opt-in under 'require_consent' + MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -28709,21 +29511,174 @@ } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } + }; - this.autocapture = new Autocapture(this); - this.autocapture.init(); + /** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ + MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); + }; + + /** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ + MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); + }; + + /** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ + MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); + }; + + MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); + }; + + MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console$1.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console$1.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + consentGate: this._consent, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + + if (sendBeacon && win.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + win.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + win.addEventListener('visibilitychange', function() { + if (document$1['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } + } + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { + this.start_batch_senders(); + } + }; + + MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); }; /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ + MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); + }; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console$1.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console$1.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -28754,9 +29709,12 @@ return this.tab_id || null; }; - MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { + MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); - }); + }; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -28846,7 +29804,7 @@ this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -28908,6 +29866,15 @@ MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console$1.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -29065,6 +30032,10 @@ }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -29202,48 +30173,6 @@ return this._batcher_configs; }; - MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } - }; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -29381,7 +30310,6 @@ return request_enqueued_or_initiated && truncated_data; }; - MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -29406,7 +30334,17 @@ * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ - function(event_name, properties, options, callback) { + MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -29418,10 +30356,6 @@ } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -29512,9 +30446,8 @@ } return ret; - }); + }; - MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -29530,7 +30463,13 @@ * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ - function(group_key, group_ids, callback) { + MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -29538,9 +30477,8 @@ prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); - }); + }; - MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -29553,7 +30491,13 @@ * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(group_key, group_id, callback) { + MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -29567,9 +30511,8 @@ } } return this['people'].union(group_key, group_id, callback); - }); + }; - MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -29582,7 +30525,13 @@ * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(group_key, group_id, callback) { + MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -29596,9 +30545,8 @@ } } return this['people'].remove(group_key, group_id, callback); - }); + }; - MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -29612,7 +30560,7 @@ * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(event_name, properties, groups, callback) { + MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -29620,7 +30568,7 @@ } }); return this.track(event_name, tracking_props, callback); - }); + }; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -29647,13 +30595,12 @@ var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; - MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -29699,7 +30646,7 @@ * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ - function(properties, options) { + MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -29723,7 +30670,7 @@ } return this.track(event_name, event_properties); - }); + }; /** * Track clicks on a set of document elements. Selector must be a @@ -29986,6 +30933,10 @@ * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -29998,6 +30949,12 @@ // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console$1.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -30062,11 +31019,11 @@ this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -30128,6 +31085,11 @@ * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console$1.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -30257,6 +31219,11 @@ * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -30308,6 +31275,11 @@ */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console$1.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -30436,105 +31408,42 @@ _.include(this.__disabled_events, event_name); }; - // perform some housekeeping around GDPR opt-in/out state - MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } + /** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ + MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ - MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; + MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; - // call a base gdpr function after constructing the appropriate token and options args - MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; + // delete the identified user's profile and charges, which the opt-out about to happen would block + MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); }; /** @@ -30556,6 +31465,10 @@ * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -30570,12 +31483,7 @@ * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -30593,6 +31501,10 @@ * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -30605,19 +31517,7 @@ * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -30629,13 +31529,15 @@ * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -30647,13 +31549,16 @@ * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -30672,6 +31577,11 @@ * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -30683,12 +31593,7 @@ * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -30752,6 +31657,7 @@ MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; + MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/dist/mixpanel-with-recorder.min.d.ts b/dist/mixpanel-with-recorder.min.d.ts index 6c9c4660..a0156e5f 100644 --- a/dist/mixpanel-with-recorder.min.d.ts +++ b/dist/mixpanel-with-recorder.min.d.ts @@ -10,6 +10,15 @@ export type Query = string | Element | Element[]; export type RemoteSettingType = "disabled" | "fallback" | "strict"; +/** + * What the SDK does before the visitor decides. "no_consent_required" tracks until + * opt_out_tracking(). "require_consent" stores and sends nothing until opt_in_tracking(); with it, + * opt_out_tracking_persistence_type and opt_out_persistence_by_default are ignored, and + * opt_out_tracking_cookie_prefix still names the stored flag. Unset means "no_consent_required"; + * opt_out_tracking_by_default applies only when consent_mode is unset. + */ +export type ConsentMode = "no_consent_required" | "require_consent" | null; + export interface EventTriggerProps { percentage: number; @@ -267,6 +276,7 @@ export interface Config { opt_out_persistence_by_default: boolean; opt_out_tracking_persistence_type: Persistence; opt_out_tracking_cookie_prefix: string; + consent_mode: ConsentMode; inapp_protocol: string; inapp_link_new_window: boolean; ignore_dnt: boolean; diff --git a/dist/mixpanel-with-recorder.min.js b/dist/mixpanel-with-recorder.min.js index aa80ff8e..3b88cbad 100644 --- a/dist/mixpanel-with-recorder.min.js +++ b/dist/mixpanel-with-recorder.min.js @@ -1 +1 @@ -(function(){"use strict";var C;if(typeof window=="undefined"){var xu={hostname:""};C={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:xu,referrer:""},screen:{width:0,height:0},location:xu,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else C=window;var Ne={DEBUG:!1,LIB_VERSION:"2.84.0"},He="__mp_targeting",Rs="__mp_recorder",nd="__MP_RECORDER_FILENAME__",ku="__MP_TARGETING_FILENAME__";function Ru(t,n){(n==null||n>t.length)&&(n=t.length);for(var i=0,e=new Array(n);i=0)&&(i[r]=t[r]);return i}function Br(t,n){return Br=Object.setPrototypeOf||function(e,r){return e.__proto__=r,e},Br(t,n)}function P(t){"@swc/helpers - typeof";return t&&typeof Symbol!="undefined"&&t.constructor===Symbol?"symbol":typeof t}function od(t,n){if(t){if(typeof t=="string")return Ru(t,n);var i=Object.prototype.toString.call(t).slice(8,-1);if(i==="Object"&&t.constructor&&(i=t.constructor.name),i==="Map"||i==="Set")return Array.from(i);if(i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return Ru(t,n)}}function zr(t){var n=typeof Map=="function"?new Map:void 0;return zr=function(e){if(e===null||!sd(e))return e;if(typeof e!="function")throw new TypeError("Super expression must either be null or a function");if(typeof n!="undefined"){if(n.has(e))return n.get(e);n.set(e,r)}function r(){return Mn(e,arguments,As(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),Br(r,e)},zr(t)}function Mu(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(n){}return(Mu=function(){return!!t})()}function E(t,n){var i=typeof Symbol!="undefined"&&t[Symbol.iterator]||t["@@iterator"];if(i)return(i=i.call(t)).next.bind(i);if(Array.isArray(t)||(i=od(t))||n){i&&(t=i);var e=0;return function(){return e>=t.length?{done:!0}:{done:!1,value:t[e++]}}}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 zt(t,n){var i,e,r,s,o={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function a(c){return function(l){return u([c,l])}}function u(c){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,e&&(r=c[0]&2?e.return:c[0]?e.throw||((r=e.return)&&r.call(e),0):e.next)&&!(r=r.call(e,c[1])).done)return r;switch(e=0,r&&(c=[c[0]&2,r.value]),c[0]){case 0:case 1:r=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,e=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(r=o.trys,!(r=r.length>0&&r[r.length-1])&&(c[0]===6||c[0]===2)){o=0;continue}if(c[0]===3&&(!r||c[1]>r[0]&&c[1]=t.length&&(t=void 0),{value:t&&t[e++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}var ad=Object.defineProperty,ud=function(t,n,i){return n in t?ad(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i},x=function(t,n,i){return ud(t,(typeof n=="undefined"?"undefined":P(n))!=="symbol"?n+"":n,i)},Tu,cd=Object.defineProperty,ld=function(t,n,i){return n in t?cd(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i},Pu=function(t,n,i){return ld(t,(typeof n=="undefined"?"undefined":P(n))!=="symbol"?n+"":n,i)},Oe=(function(t){return t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment",t})(Oe||{}),$u={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Nu={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Tn={},fd=function(){return!!globalThis.Zone};function Ts(t){if(Tn[t])return Tn[t];var n=globalThis[t],i=n.prototype,e=t in $u?$u[t]:void 0,r=!!(e&&e.every(function(l){var f,p;return!!((p=(f=Object.getOwnPropertyDescriptor(i,l))==null?void 0:f.get)!=null&&p.toString().includes("[native code]"))})),s=t in Nu?Nu[t]:void 0,o=!!(s&&s.every(function(l){var f;return typeof i[l]=="function"&&((f=i[l])==null?void 0:f.toString().includes("[native code]"))}));if(r&&o&&!fd())return Tn[t]=n.prototype,n.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return n.prototype;var c=u[t].prototype;return document.body.removeChild(a),c?Tn[t]=c:i}catch(l){return i}}var Ps={};function yt(t,n,i){var e,r=t+"."+String(i);if(Ps[r])return Ps[r].call(n);var s=Ts(t),o=(e=Object.getOwnPropertyDescriptor(s,i))==null?void 0:e.get;return o?(Ps[r]=o,o.call(n)):n[i]}var $s={};function Lu(t,n,i){var e=t+"."+String(i);if($s[e])return $s[e].bind(n);var r=Ts(t),s=r[i];return typeof s!="function"?n[i]:($s[e]=s,s.bind(n))}function hd(t){return yt("Node",t,"childNodes")}function pd(t){return yt("Node",t,"parentNode")}function dd(t){return yt("Node",t,"parentElement")}function vd(t){return yt("Node",t,"textContent")}function gd(t,n){return Lu("Node",t,"contains")(n)}function md(t){return Lu("Node",t,"getRootNode")()}function yd(t){return!t||!("host"in t)?null:yt("ShadowRoot",t,"host")}function _d(t){return t.styleSheets}function wd(t){return!t||!("shadowRoot"in t)?null:yt("Element",t,"shadowRoot")}function bd(t,n){return yt("Element",t,"querySelector")(n)}function Sd(t,n){return yt("Element",t,"querySelectorAll")(n)}function Cd(){return Ts("MutationObserver").constructor}function Ed(t,n,i){try{if(!(n in t))return function(){};var e=t[n],r=i(e);return typeof r=="function"&&(r.prototype=r.prototype||{},Object.defineProperties(r,{__rrweb_original__:{enumerable:!1,value:e}})),t[n]=r,function(){t[n]=e}}catch(s){return function(){}}}var Ae={childNodes:hd,parentNode:pd,parentElement:dd,textContent:vd,contains:gd,getRootNode:md,host:yd,styleSheets:_d,shadowRoot:wd,querySelector:bd,querySelectorAll:Sd,mutationObserver:Cd,patch:Ed};function Du(t){return t.nodeType===t.ELEMENT_NODE}function qr(t){var n=t&&"host"in t&&"mode"in t&&Ae.host(t)||null;return!!(n&&"shadowRoot"in n&&Ae.shadowRoot(n)===t)}function Wr(t){return Object.prototype.toString.call(t)==="[object ShadowRoot]"}function Id(t){return t.includes(" background-clip: text;")&&!t.includes(" -webkit-background-clip: text;")&&(t=t.replace(/\sbackground-clip:\s*text;/g," -webkit-background-clip: text; background-clip: text;")),t}function Od(t){var n=t.cssText;if(n.split('"').length<3)return n;var i=["@import","url("+JSON.stringify(t.href)+")"];return t.layerName===""?i.push("layer"):t.layerName&&i.push("layer("+t.layerName+")"),t.supportsText&&i.push("supports("+t.supportsText+")"),t.media.length&&i.push(t.media.mediaText),i.join(" ")+";"}function Ns(t){try{var n=t.rules||t.cssRules;if(!n)return null;var i=t.href;!i&&t.ownerNode&&t.ownerNode.ownerDocument&&(i=t.ownerNode.ownerDocument.location.href);var e=Array.from(n,function(r){return Fu(r,i)}).join("");return Id(e)}catch(r){return null}}function Fu(t,n){if(kd(t)){var i;try{i=Ns(t.styleSheet)||Od(t)}catch(r){i=t.cssText}return t.styleSheet.href?Pn(i,t.styleSheet.href):i}else{var e=t.cssText;return Rd(t)&&t.selectorText.includes(":")&&(e=xd(e)),n?Pn(e,n):e}}function xd(t){var n=/(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;return t.replace(n,"$1\\$2")}function kd(t){return"styleSheet"in t}function Rd(t){return"selectorText"in t}var Uu=(function(){function t(){Pu(this,"idNodeMap",new Map),Pu(this,"nodeMetaMap",new WeakMap)}var n=t.prototype;return n.getId=function(e){var r;if(!e)return-1;var s=(r=this.getMeta(e))==null?void 0:r.id;return s!=null?s:-1},n.getNode=function(e){return this.idNodeMap.get(e)||null},n.getIds=function(){return Array.from(this.idNodeMap.keys())},n.getMeta=function(e){return this.nodeMetaMap.get(e)||null},n.removeNodeFromMap=function(e,r){var s=this;r===void 0&&(r=!1);var o=this.getId(e);this.idNodeMap.delete(o),r&&this.nodeMetaMap.delete(e),e.childNodes&&e.childNodes.forEach(function(a){return s.removeNodeFromMap(a,r)})},n.has=function(e){return this.idNodeMap.has(e)},n.hasNode=function(e){return this.nodeMetaMap.has(e)},n.add=function(e,r){var s=r.id;this.idNodeMap.set(s,e),this.nodeMetaMap.set(e,r)},n.replace=function(e,r){var s=this.getNode(e);if(s){var o=this.nodeMetaMap.get(s);o&&this.nodeMetaMap.set(r,o)}this.idNodeMap.set(e,r)},n.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},t})();function Ad(){return new Uu}function Gr(t){var n=t.element,i=t.maskInputOptions,e=t.tagName,r=t.type,s=t.value,o=t.maskInputFn,a=s||"",u=r&&qt(r);return(i[e.toLowerCase()]||u&&i[u])&&(o?a=o(a,n):a="*".repeat(a.length)),a}function qt(t){return t.toLowerCase()}var Bu="__rrweb_original__";function Md(t){var n=t.getContext("2d");if(!n)return!0;for(var i=50,e=0;e-1?n=t.split("/").slice(0,3).join("/"):n=t.split("/")[0],n=n.split("?")[0],n}var Pd=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,$d=/^(?:[a-z+]+:)?\/\//i,Nd=/^www\..*/i,Ld=/^(data:)([^,]*),(.*)/i;function Pn(t,n){return(t||"").replace(Pd,function(i,e,r,s,o,a){var u=r||o||a,c=e||s||"";if(!u)return i;if($d.test(u)||Nd.test(u)||Ld.test(u))return"url("+c+u+c+")";if(u[0]==="/")return"url("+c+(Td(n)+u)+c+")";var l=n.split("/"),f=u.split("/");l.pop();for(var p=E(f),g;!(g=p()).done;){var v=g.value;v!=="."&&(v===".."?l.pop():l.push(v))}return"url("+c+l.join("/")+c+")"})}function $n(t,n){return n===void 0&&(n=!1),n?t.replace(/(\/\*[^*]*\*\/)|[\s;]/g,""):t.replace(/(\/\*[^*]*\*\/)|[\s;]/g,"").replace(/0px/g,"0")}function Dd(t,n,i){i===void 0&&(i=!1);var e=Array.from(n.childNodes),r=[],s=0;if(e.length>1&&t&&typeof t=="string"){for(var o=$n(t,i),a=o.length/t.length,u=1;u2&&g[0]===""&&e[u-1].textContent!=="")v=o.indexOf(p,1);else if(g.length===1){if(p=p.substring(0,p.length-1),g=o.split(p),g.length<=1)return r.push(t),r;f=l+1}else f===c.length-1&&(v=o.indexOf(p));if(g.length>=2&&f>l){var m=e[u-1].textContent;if(m&&typeof m=="string"){var d=$n(m).length;v=o.indexOf(p,d)}v===-1&&(v=g[0].length)}if(v!==-1){for(var y=Math.floor(v/a);y>0&&y50*e.length)return r.push(t),r;var _=$n(t.substring(0,y),i);if(_.length===v){r.push(t.substring(0,y)),t=t.substring(y),o=o.substring(v);break}else _.length=n.length);){var s=e(qd);if(s.slice(-1)===",")s=lr(t,s.substring(0,s.length-1)),r.push(s);else{var o="";s=lr(t,s);for(var a=!1;;){var u=n.charAt(i);if(u===""){r.push((s+o).trim());break}else if(a)u===")"&&(a=!1);else if(u===","){i+=1,r.push((s+o).trim());break}else u==="("&&(a=!0);o+=u,i+=1}}}return r.join(", ")}var Gu=new WeakMap;function lr(t,n){return!n||n.trim()===""?n:Ls(t,n)}function Vd(t){return!!(t.tagName==="svg"||t.ownerSVGElement)}function Ls(t,n){var i=Gu.get(t);if(i||(i=t.createElement("a"),Gu.set(t,i)),!n)n="";else if(n.startsWith("blob:")||n.startsWith("data:"))return n;return i.setAttribute("href",n),i.href}function Vu(t,n,i,e){return e&&(i==="src"||i==="href"&&!(n==="use"&&e[0]==="#")||i==="xlink:href"&&e[0]!=="#"||i==="background"&&(n==="table"||n==="td"||n==="th")?lr(t,e):i==="srcset"?Gd(t,e):i==="style"?Pn(e,Ls(t)):n==="object"&&i==="data"?lr(t,e):e)}function ju(t,n,i){return(t==="video"||t==="audio")&&n==="autoplay"}function jd(t,n,i){try{if(typeof n=="string"){if(t.classList.contains(n))return!0}else for(var e=t.classList.length;e--;){var r=t.classList[e];if(n.test(r))return!0}if(i)return t.matches(i)}catch(s){}return!1}function Nn(t,n,i){if(!t)return!1;if(t.nodeType!==t.ELEMENT_NODE)return i?Nn(Ae.parentNode(t),n,i):!1;for(var e=t.classList.length;e--;){var r=t.classList[e];if(n.test(r))return!0}return i?Nn(Ae.parentNode(t),n,i):!1}function Hu(t,n,i,e){var r;if(Du(t)){if(r=t,!Ae.childNodes(r).length)return!1}else{if(Ae.parentElement(t)===null)return!1;r=Ae.parentElement(t)}try{if(typeof n=="string"){if(e){if(r.closest("."+n))return!0}else if(r.classList.contains(n))return!0}else if(Nn(r,n,e))return!0;if(i){if(e){if(r.closest(i))return!0}else if(r.matches(i))return!0}}catch(s){}return!1}function Hd(t,n,i){var e=t.contentWindow;if(e){var r=!1,s;try{s=e.document.readyState}catch(u){return}if(s!=="complete"){var o=setTimeout(function(){r||(n(),r=!0)},i);t.addEventListener("load",function(){clearTimeout(o),r=!0,n()});return}var a="about:blank";if(e.location.href!==a||t.src===a||t.src==="")return setTimeout(n,0),t.addEventListener("load",n);t.addEventListener("load",n)}}function Kd(t,n,i){var e=!1,r;try{r=t.sheet}catch(o){return}if(!r){var s=setTimeout(function(){e||(n(),e=!0)},i);t.addEventListener("load",function(){clearTimeout(s),e=!0,n()})}}function Yd(t,n){var i=n.doc,e=n.mirror,r=n.blockClass,s=n.blockSelector,o=n.needsMask,a=n.inlineStylesheet,u=n.maskInputOptions,c=u===void 0?{}:u,l=n.maskTextFn,f=n.maskInputFn,p=n.dataURLOptions,g=p===void 0?{}:p,v=n.inlineImages,m=n.recordCanvas,d=n.keepIframeSrcFn,y=n.newlyAddedElement,_=y===void 0?!1:y,w=n.cssCaptured,S=w===void 0?!1:w,b=Jd(i,e);switch(t.nodeType){case t.DOCUMENT_NODE:return t.compatMode!=="CSS1Compat"?{type:Oe.Document,childNodes:[],compatMode:t.compatMode}:{type:Oe.Document,childNodes:[]};case t.DOCUMENT_TYPE_NODE:return{type:Oe.DocumentType,name:t.name,publicId:t.publicId,systemId:t.systemId,rootId:b};case t.ELEMENT_NODE:return Zd(t,{doc:i,blockClass:r,blockSelector:s,inlineStylesheet:a,maskInputOptions:c,maskInputFn:f,dataURLOptions:g,inlineImages:v,recordCanvas:m,keepIframeSrcFn:d,newlyAddedElement:_,rootId:b});case t.TEXT_NODE:return Xd(t,{doc:i,needsMask:o,maskTextFn:l,rootId:b,cssCaptured:S});case t.CDATA_SECTION_NODE:return{type:Oe.CDATA,textContent:"",rootId:b};case t.COMMENT_NODE:return{type:Oe.Comment,textContent:Ae.textContent(t)||"",rootId:b};default:return!1}}function Jd(t,n){if(n.hasNode(t)){var i=n.getId(t);return i===1?void 0:i}}function Xd(t,n){var i=n.needsMask,e=n.maskTextFn,r=n.rootId,s=n.cssCaptured,o=Ae.parentNode(t),a=o&&o.tagName,u="",c=a==="STYLE"?!0:void 0,l=a==="SCRIPT"?!0:void 0;return l?u="SCRIPT_PLACEHOLDER":s||(u=Ae.textContent(t),c&&u&&(u=Pn(u,Ls(n.doc)))),!c&&!l&&u&&i&&(u=e?e(u,Ae.parentElement(t)):u.replace(/[\S]/g,"*")),{type:Oe.Text,textContent:u||"",rootId:r}}function Zd(t,n){for(var i=n.doc,e=n.blockClass,r=n.blockSelector,s=n.inlineStylesheet,o=n.maskInputOptions,a=o===void 0?{}:o,u=n.maskInputFn,c=n.dataURLOptions,l=c===void 0?{}:c,f=n.inlineImages,p=n.recordCanvas,g=n.keepIframeSrcFn,v=n.newlyAddedElement,m=v===void 0?!1:v,d=n.rootId,y=jd(t,e,r),_=zd(t),w={},S=t.attributes.length,b=0;b1&&(N=Fd(N,t)),w._cssText=N)}if(_==="input"||_==="textarea"||_==="select"){var W=t.value,ge=t.checked;w.type!=="radio"&&w.type!=="checkbox"&&w.type!=="submit"&&w.type!=="button"&&W?w.value=Gr({element:t,type:Vr(t),tagName:_,value:W,maskInputOptions:a,maskInputFn:u}):ge&&(w.checked=ge)}if((_==="input"||_==="textarea")&&w.placeholder&&(w.placeholder=Gr({element:t,type:Vr(t),tagName:_,value:w.placeholder,maskInputOptions:a,maskInputFn:u})),_==="option"&&(t.selected&&!a.select?w.selected=!0:delete w.selected),_==="dialog"&&t.open&&(w.rr_open_mode=t.matches("dialog:modal")?"modal":"non-modal"),_==="canvas"&&p){if(t.__context==="2d")Md(t)||(w.rr_dataURL=t.toDataURL(l.type,l.quality));else if(!("__context"in t)){var D=t.toDataURL(l.type,l.quality),G=i.createElement("canvas");G.width=t.width,G.height=t.height;var de=G.toDataURL(l.type,l.quality);D!==de&&(w.rr_dataURL=D)}}if(_==="img"&&f){cr||(cr=i.createElement("canvas"),Wu=cr.getContext("2d"));var K=t,Ue=K.currentSrc||K.getAttribute("src")||"",De=K.crossOrigin,Re=function(){K.removeEventListener("load",Re);try{cr.width=K.naturalWidth,cr.height=K.naturalHeight,Wu.drawImage(K,0,0),w.rr_dataURL=cr.toDataURL(l.type,l.quality)}catch(We){if(K.crossOrigin!=="anonymous"){K.crossOrigin="anonymous",K.complete&&K.naturalWidth!==0?Re():K.addEventListener("load",Re);return}else console.warn("Cannot inline img src="+Ue+"! Error: "+We)}K.crossOrigin==="anonymous"&&(De?w.crossOrigin=De:K.removeAttribute("crossorigin"))};K.complete&&K.naturalWidth!==0?Re():K.addEventListener("load",Re)}if(_==="audio"||_==="video"){var pe=w;pe.rr_mediaState=t.paused?"paused":"played",pe.rr_mediaCurrentTime=t.currentTime,pe.rr_mediaPlaybackRate=t.playbackRate,pe.rr_mediaMuted=t.muted,pe.rr_mediaLoop=t.loop,pe.rr_mediaVolume=t.volume}if(m||(t.scrollLeft&&(w.rr_scrollLeft=t.scrollLeft),t.scrollTop&&(w.rr_scrollTop=t.scrollTop)),y){var ke=t.getBoundingClientRect(),Qt=ke.width,ot=ke.height;w={class:w.class,rr_width:""+Qt+"px",rr_height:""+ot+"px"}}_==="iframe"&&!g(w.src)&&(t.contentDocument||(w.rr_src=w.src),delete w.src);var er;try{customElements.get(_)&&(er=!0)}catch(We){}return{type:Oe.Element,tagName:_,attributes:w,childNodes:[],isSVG:Vd(t)||void 0,needBlock:y,rootId:d,isCustom:er}}function te(t){return t==null?"":t.toLowerCase()}function Qd(t,n){if(n.comment&&t.type===Oe.Comment)return!0;if(t.type===Oe.Element){if(n.script&&(t.tagName==="script"||t.tagName==="link"&&(t.attributes.rel==="preload"&&t.attributes.as==="script"||t.attributes.rel==="modulepreload")||t.tagName==="link"&&t.attributes.rel==="prefetch"&&typeof t.attributes.href=="string"&&zu(t.attributes.href)==="js"))return!0;if(n.headFavicon&&(t.tagName==="link"&&t.attributes.rel==="shortcut icon"||t.tagName==="meta"&&(te(t.attributes.name).match(/^msapplication-tile(image|color)$/)||te(t.attributes.name)==="application-name"||te(t.attributes.rel)==="icon"||te(t.attributes.rel)==="apple-touch-icon"||te(t.attributes.rel)==="shortcut icon")))return!0;if(t.tagName==="meta"){if(n.headMetaDescKeywords&&te(t.attributes.name).match(/^description|keywords$/))return!0;if(n.headMetaSocial&&(te(t.attributes.property).match(/^(og|twitter|fb):/)||te(t.attributes.name).match(/^(og|twitter):/)||te(t.attributes.name)==="pinterest"))return!0;if(n.headMetaRobots&&(te(t.attributes.name)==="robots"||te(t.attributes.name)==="googlebot"||te(t.attributes.name)==="bingbot"))return!0;if(n.headMetaHttpEquiv&&t.attributes["http-equiv"]!==void 0)return!0;if(n.headMetaAuthorship&&(te(t.attributes.name)==="author"||te(t.attributes.name)==="generator"||te(t.attributes.name)==="framework"||te(t.attributes.name)==="publisher"||te(t.attributes.name)==="progid"||te(t.attributes.property).match(/^article:/)||te(t.attributes.property).match(/^product:/)))return!0;if(n.headMetaVerification&&(te(t.attributes.name)==="google-site-verification"||te(t.attributes.name)==="yandex-verification"||te(t.attributes.name)==="csrf-token"||te(t.attributes.name)==="p:domain_verify"||te(t.attributes.name)==="verify-v1"||te(t.attributes.name)==="verification"||te(t.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function fr(t,n){var i=n.doc,e=n.mirror,r=n.blockClass,s=n.blockSelector,o=n.maskTextClass,a=n.maskTextSelector,u=n.skipChild,c=u===void 0?!1:u,l=n.inlineStylesheet,f=l===void 0?!0:l,p=n.maskInputOptions,g=p===void 0?{}:p,v=n.maskTextFn,m=n.maskInputFn,d=n.slimDOMOptions,y=n.dataURLOptions,_=y===void 0?{}:y,w=n.inlineImages,S=w===void 0?!1:w,b=n.recordCanvas,O=b===void 0?!1:b,M=n.onSerialize,R=n.onIframeLoad,N=n.iframeLoadTimeout,W=N===void 0?5e3:N,ge=n.onStylesheetLoad,D=n.stylesheetLoadTimeout,G=D===void 0?5e3:D,de=n.keepIframeSrcFn,K=de===void 0?function(){return!1}:de,Ue=n.newlyAddedElement,De=Ue===void 0?!1:Ue,Re=n.cssCaptured,pe=Re===void 0?!1:Re,ke=n.needsMask,Qt=n.preserveWhiteSpace,ot=Qt===void 0?!0:Qt;if(!ke){var er=ke===void 0;ke=Hu(t,o,a,er)}var We=Yd(t,{doc:i,mirror:e,blockClass:r,blockSelector:s,needsMask:ke,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,dataURLOptions:_,inlineImages:S,recordCanvas:O,keepIframeSrcFn:K,newlyAddedElement:De,cssCaptured:pe});if(!We)return console.warn(t,"not serialized"),null;var Ft;e.hasNode(t)?Ft=e.getId(t):Qd(We,d)||!ot&&We.type===Oe.Text&&!We.textContent.replace(/^\s+|\s+$/gm,"").length?Ft=jr:Ft=qu();var X=Object.assign(We,{id:Ft});if(e.add(t,X),Ft===jr)return null;M&&M(t);var Lr=!c;if(X.type===Oe.Element){Lr=Lr&&!X.needBlock,delete X.needBlock;var Dr=Ae.shadowRoot(t);Dr&&Wr(Dr)&&(X.isShadowHost=!0)}if((X.type===Oe.Document||X.type===Oe.Element)&&Lr){d.headWhitespace&&X.type===Oe.Element&&X.tagName==="head"&&(ot=!1);var Ut={doc:i,mirror:e,blockClass:r,blockSelector:s,needsMask:ke,maskTextClass:o,maskTextSelector:a,skipChild:c,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,slimDOMOptions:d,dataURLOptions:_,inlineImages:S,recordCanvas:O,preserveWhiteSpace:ot,onSerialize:M,onIframeLoad:R,iframeLoadTimeout:W,onStylesheetLoad:ge,stylesheetLoadTimeout:G,keepIframeSrcFn:K,cssCaptured:!1};if(!(X.type===Oe.Element&&X.tagName==="textarea"&&X.attributes.value!==void 0)){X.type===Oe.Element&&X.attributes._cssText!==void 0&&typeof X.attributes._cssText=="string"&&(Ut.cssCaptured=!0);for(var Es=E(Array.from(Ae.childNodes(t))),Fr;!(Fr=Es()).done;){var Is=Fr.value,Os=fr(Is,Ut);Os&&X.childNodes.push(Os)}}var Rn=null;if(Du(t)&&(Rn=Ae.shadowRoot(t)))for(var tr=E(Array.from(Ae.childNodes(Rn))),rr;!(rr=tr()).done;){var nr=rr.value,ir=fr(nr,Ut);ir&&(Wr(Rn)&&(ir.isShadow=!0),X.childNodes.push(ir))}}var sr=Ae.parentNode(t);return sr&&qr(sr)&&Wr(sr)&&(X.isShadow=!0),X.type===Oe.Element&&X.tagName==="iframe"&&Hd(t,function(){var gt=t.contentDocument;if(gt&&R){var Ur=fr(gt,{doc:gt,mirror:e,blockClass:r,blockSelector:s,needsMask:ke,maskTextClass:o,maskTextSelector:a,skipChild:!1,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,slimDOMOptions:d,dataURLOptions:_,inlineImages:S,recordCanvas:O,preserveWhiteSpace:ot,onSerialize:M,onIframeLoad:R,iframeLoadTimeout:W,onStylesheetLoad:ge,stylesheetLoadTimeout:G,keepIframeSrcFn:K});Ur&&R(t,Ur)}},W),X.type===Oe.Element&&X.tagName==="link"&&typeof X.attributes.rel=="string"&&(X.attributes.rel==="stylesheet"||X.attributes.rel==="preload"&&typeof X.attributes.href=="string"&&zu(X.attributes.href)==="css")&&Kd(t,function(){if(ge){var gt=fr(t,{doc:i,mirror:e,blockClass:r,blockSelector:s,needsMask:ke,maskTextClass:o,maskTextSelector:a,skipChild:!1,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,slimDOMOptions:d,dataURLOptions:_,inlineImages:S,recordCanvas:O,preserveWhiteSpace:ot,onSerialize:M,onIframeLoad:R,iframeLoadTimeout:W,onStylesheetLoad:ge,stylesheetLoadTimeout:G,keepIframeSrcFn:K});gt&&ge(t,gt)}},G),X}function ev(t,n){var i=n||{},e=i.mirror,r=e===void 0?new Uu:e,s=i.blockClass,o=s===void 0?"rr-block":s,a=i.blockSelector,u=a===void 0?null:a,c=i.maskTextClass,l=c===void 0?"rr-mask":c,f=i.maskTextSelector,p=f===void 0?null:f,g=i.inlineStylesheet,v=g===void 0?!0:g,m=i.inlineImages,d=m===void 0?!1:m,y=i.recordCanvas,_=y===void 0?!1:y,w=i.maskAllInputs,S=w===void 0?!1:w,b=i.maskTextFn,O=i.maskInputFn,M=i.slimDOM,R=M===void 0?!1:M,N=i.dataURLOptions,W=i.preserveWhiteSpace,ge=i.onSerialize,D=i.onIframeLoad,G=i.iframeLoadTimeout,de=i.onStylesheetLoad,K=i.stylesheetLoadTimeout,Ue=i.keepIframeSrcFn,De=Ue===void 0?function(){return!1}:Ue,Re=S===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:S===!1?{password:!0}:S,pe=R===!0||R==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:R==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:R===!1?{}:R;return fr(t,{doc:t,mirror:r,blockClass:o,blockSelector:u,maskTextClass:l,maskTextSelector:p,skipChild:!1,inlineStylesheet:v,maskInputOptions:Re,maskTextFn:b,maskInputFn:O,slimDOMOptions:pe,dataURLOptions:N,inlineImages:d,recordCanvas:_,preserveWhiteSpace:W,onSerialize:ge,onIframeLoad:D,iframeLoadTimeout:G,onStylesheetLoad:de,stylesheetLoadTimeout:K,keepIframeSrcFn:De,newlyAddedElement:!1})}function tv(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function rv(t){if(t.__esModule)return t;var n=t.default;if(typeof n=="function"){var i=function e(){return T(this,e)?Reflect.construct(n,arguments,this.constructor):n.apply(this,arguments)};i.prototype=n.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})}),i}var Ds={exports:{}},se=String,Ku=function(){return{isColorSupported:!1,reset:se,bold:se,dim:se,italic:se,underline:se,inverse:se,hidden:se,strikethrough:se,black:se,red:se,green:se,yellow:se,blue:se,magenta:se,cyan:se,white:se,gray:se,bgBlack:se,bgRed:se,bgGreen:se,bgYellow:se,bgBlue:se,bgMagenta:se,bgCyan:se,bgWhite:se}};Ds.exports=Ku(),Ds.exports.createColors=Ku;var nv=Ds.exports,iv={},sv=Object.freeze(Object.defineProperty({__proto__:null,default:iv},Symbol.toStringTag,{value:"Module"})),me=rv(sv),Yu=nv,Ju=me,Fs=(function(t){ue(n,t);function n(e,r,s,o,a,u){var c;return c=t.call(this,e)||this,c.name="CssSyntaxError",c.reason=e,a&&(c.file=a),o&&(c.source=o),u&&(c.plugin=u),typeof r!="undefined"&&typeof s!="undefined"&&(typeof r=="number"?(c.line=r,c.column=s):(c.line=r.line,c.column=r.column,c.endLine=s.line,c.endColumn=s.column)),c.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(c,n),c}var i=n.prototype;return i.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},i.showSourceCode=function(r){var s=this;if(!this.source)return"";var o=this.source;r==null&&(r=Yu.isColorSupported),Ju&&r&&(o=Ju(o));var a=o.split(/\r?\n/),u=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),l=String(c).length,f,p;if(r){var g=Yu.createColors(!0),v=g.bold,m=g.gray,d=g.red;f=function(y){return v(d(y))},p=function(y){return m(y)}}else f=p=function(y){return y};return a.slice(u,c).map(function(y,_){var w=u+1+_,S=" "+(" "+w).slice(-l)+" | ";if(w===s.line){var b=p(S.replace(/\d/g," "))+y.slice(0,s.column-1).replace(/[^\t]/g," ");return f(">")+p(S)+y+"\n "+b+f("^")}return" "+p(S)+y}).join("\n")},i.toString=function(){var r=this.showSourceCode();return r&&(r="\n\n"+r+"\n"),this.name+": "+this.message+r},n})(zr(Error)),Us=Fs;Fs.default=Fs;var _t={};_t.isClean=Symbol("isClean"),_t.my=Symbol("my");var Xu={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function ov(t){return t[0].toUpperCase()+t.slice(1)}var Bs=(function(){function t(i){this.builder=i}var n=t.prototype;return n.atrule=function(e,r){var s="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?s+=e.raws.afterName:o&&(s+=" "),e.nodes)this.block(e,s+o);else{var a=(e.raws.between||"")+(r?";":"");this.builder(s+o+a,e)}},n.beforeAfter=function(e,r){var s;e.type==="decl"?s=this.raw(e,null,"beforeDecl"):e.type==="comment"?s=this.raw(e,null,"beforeComment"):r==="before"?s=this.raw(e,null,"beforeRule"):s=this.raw(e,null,"beforeClose");for(var o=e.parent,a=0;o&&o.type!=="root";)a+=1,o=o.parent;if(s.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var c=0;c0&&e.nodes[r].type==="comment";)r-=1;for(var s=this.raw(e,"semicolon"),o=0;o0&&typeof s.raws.after!="undefined")return r=s.raws.after,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawBeforeComment=function(e,r){var s;return e.walkComments(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeDecl"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeDecl=function(e,r){var s;return e.walkDecls(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeRule"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeOpen=function(e){var r;return e.walk(function(s){if(s.type!=="decl"&&(r=s.raws.between,typeof r!="undefined"))return!1}),r},n.rawBeforeRule=function(e){var r;return e.walk(function(s){if(s.nodes&&(s.parent!==e||e.first!==s)&&typeof s.raws.before!="undefined")return r=s.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawColon=function(e){var r;return e.walkDecls(function(s){if(typeof s.raws.between!="undefined")return r=s.raws.between.replace(/[^\s:]/g,""),!1}),r},n.rawEmptyBody=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length===0&&(r=s.raws.after,typeof r!="undefined"))return!1}),r},n.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var r;return e.walk(function(s){var o=s.parent;if(o&&o!==e&&o.parent&&o.parent===e&&typeof s.raws.before!="undefined"){var a=s.raws.before.split("\n");return r=a[a.length-1],r=r.replace(/\S/g,""),!1}}),r},n.rawSemicolon=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length&&s.last.type==="decl"&&(r=s.raws.semicolon,typeof r!="undefined"))return!1}),r},n.rawValue=function(e,r){var s=e[r],o=e.raws[r];return o&&o.value===s?o.raw:s},n.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},n.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},n.stringify=function(e,r){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,r)},t})(),Zu=Bs;Bs.default=Bs;var av=Zu;function zs(t,n){var i=new av(n);i.stringify(t)}var Ln=zs;zs.default=zs;var Dn=_t.isClean,uv=_t.my,cv=Us,lv=Zu,fv=Ln;function qs(t,n){var i=new t.constructor;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&e!=="proxyCache"){var r=t[e],s=typeof r=="undefined"?"undefined":P(r);e==="parent"&&s==="object"?n&&(i[e]=n):e==="source"?i[e]=r:Array.isArray(r)?i[e]=r.map(function(o){return qs(o,i)}):(s==="object"&&r!==null&&(r=qs(r)),i[e]=r)}return i}var Ws=(function(){function t(i){i===void 0&&(i={}),this.raws={},this[Dn]=!1,this[uv]=!0;for(var e in i)if(e==="nodes"){this.nodes=[];for(var r=E(i[e]),s;!(s=r()).done;){var o=s.value;typeof o.clone=="function"?this.append(o.clone()):this.append(o)}}else this[e]=i[e]}var n=t.prototype;return n.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var r=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+r.input.from+":"+r.start.line+":"+r.start.column+"$&")}return e},n.after=function(e){return this.parent.insertAfter(this,e),this},n.assign=function(e){e===void 0&&(e={});for(var r in e)this[r]=e[r];return this},n.before=function(e){return this.parent.insertBefore(this,e),this},n.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},n.clone=function(e){e===void 0&&(e={});var r=qs(this);for(var s in e)r[s]=e[s];return r},n.cloneAfter=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertAfter(this,r),r},n.cloneBefore=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertBefore(this,r),r},n.error=function(e,r){if(r===void 0&&(r={}),this.source){var s=this.rangeBy(r),o=s.end,a=s.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:o.column,line:o.line},r)}return new cv(e)},n.getProxyProcessor=function(){return{get:function(r,s){return s==="proxyOf"?r:s==="root"?function(){return r.root().toProxy()}:r[s]},set:function(r,s,o){return r[s]===o||(r[s]=o,(s==="prop"||s==="value"||s==="name"||s==="params"||s==="important"||s==="text")&&r.markDirty()),!0}}},n.markDirty=function(){if(this[Dn]){this[Dn]=!1;for(var e=this;e=e.parent;)e[Dn]=!1}},n.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},n.positionBy=function(e,r){var s=this.source.start;if(e.index)s=this.positionInside(e.index,r);else if(e.word){r=this.toString();var o=r.indexOf(e.word);o!==-1&&(s=this.positionInside(o,r))}return s},n.positionInside=function(e,r){for(var s=r||this.toString(),o=this.source.start.column,a=this.source.start.line,u=0;u-1&&o>-1&&(this.annotation=this.getAnnotationURL(e.substring(s,o)))}},n.loadFile=function(e){if(this.root=Vs(e),gv(e))return this.mapFile=e,mv(e,"utf-8").toString().trim()},n.loadMap=function(e,r){if(r===!1)return!1;if(r){if(typeof r=="string")return r;if(typeof r=="function"){var s=r(e);if(s){var o=this.loadFile(s);if(!o)throw new Error("Unable to load previous source map: "+s.toString());return o}}else{if(T(r,Qu))return ec.fromSourceMap(r).toString();if(T(r,ec))return r.toString();if(this.isMap(r))return JSON.stringify(r);throw new Error("Unsupported previous source map format: "+r.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=yv(Vs(e),a)),this.loadFile(a)}}},n.startWith=function(e,r){return e?e.substr(0,r.length)===r:!1},n.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},t})(),tc=js;js.default=js;var wv=me.SourceMapConsumer,bv=me.SourceMapGenerator,rc=me.fileURLToPath,Bn=me.pathToFileURL,Hs=me.isAbsolute,Ks=me.resolve,Sv=vv.nanoid,Ys=me,nc=Us,Cv=tc,Js=Symbol("fromOffsetCache"),Ev=!!(wv&&bv),ic=!!(Ks&&Hs),zn=(function(){function t(i,e){if(e===void 0&&(e={}),i===null||typeof i=="undefined"||(typeof i=="undefined"?"undefined":P(i))==="object"&&!i.toString)throw new Error("PostCSS received "+i+" instead of CSS string");if(this.css=i.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!ic||/^\w+:\/\//.test(e.from)||Hs(e.from)?this.file=e.from:this.file=Ks(e.from)),ic&&Ev){var r=new Cv(this.css,e);if(r.text){this.map=r;var s=r.consumer().file;!this.file&&s&&(this.file=this.mapResolve(s))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var n=t.prototype;return n.error=function(e,r,s,o){o===void 0&&(o={});var a,u,c;if(r&&(typeof r=="undefined"?"undefined":P(r))==="object"){var l=r,f=s;if(typeof l.offset=="number"){var p=this.fromOffset(l.offset);r=p.line,s=p.col}else r=l.line,s=l.column;if(typeof f.offset=="number"){var g=this.fromOffset(f.offset);u=g.line,c=g.col}else u=f.line,c=f.column}else if(!s){var v=this.fromOffset(r);r=v.line,s=v.col}var m=this.origin(r,s,u,c);return m?a=new nc(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,o.plugin):a=new nc(e,u===void 0?r:{column:s,line:r},u===void 0?s:{column:c,line:u},this.css,this.file,o.plugin),a.input={column:s,endColumn:c,endLine:u,line:r,source:this.css},this.file&&(Bn&&(a.input.url=Bn(this.file).toString()),a.input.file=this.file),a},n.fromOffset=function(e){var r,s;if(this[Js])s=this[Js];else{var o=this.css.split("\n");s=new Array(o.length);for(var a=0,u=0,c=o.length;u=r)l=s.length-1;else for(var f=s.length-2,p;l>1),e=s[p+1])l=p+1;else{l=p;break}return{col:e-s[l]+1,line:l+1}},n.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Ks(this.map.consumer().sourceRoot||this.map.root||".",e)},n.origin=function(e,r,s,o){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:r,line:e});if(!u.source)return!1;var c;typeof s=="number"&&(c=a.originalPositionFor({column:o,line:s}));var l;Hs(u.source)?l=Bn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Bn(this.map.mapFile));var f={column:u.column,endColumn:c&&c.column,endLine:c&&c.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(rc)f.file=rc(l);else throw new Error("file: protocol is not available in this PostCSS build");var p=a.sourceContentFor(u.source);return p&&(f.source=p),f},n.toJSON=function(){for(var e={},r=0,s=["hasBOM","css","file","id"];r=0;r--)e=this.root.nodes[r],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(r);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},n.generate=function(){if(this.clearAnnotation(),xv&&Ov&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(r){e+=r}),[e]},n.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Wn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Wn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},n.generateString=function(){var e=this;this.css="",this.map=new Wn({file:this.outputFile(),ignoreInvalidMapping:!0});var r=1,s=1,o="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,c;this.stringify(this.root,function(l,f,p){if(e.css+=l,f&&p!=="end"&&(a.generated.line=r,a.generated.column=s-1,f.source&&f.source.start?(a.source=e.sourcePath(f),a.original.line=f.source.start.line,a.original.column=f.source.start.column-1,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(r+=u.length,c=l.lastIndexOf("\n"),s=l.length-c):s+=l.length,f&&p!=="start"){var g=f.parent||{raws:{}},v=f.type==="decl"||f.type==="atrule"&&!f.nodes;(!v||f!==g.last||g.raws.semicolon)&&(f.source&&f.source.end?(a.source=e.sourcePath(f),a.original.line=f.source.end.line,a.original.column=f.source.end.column-1,a.generated.line=r,a.generated.column=s-2,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,a.generated.line=r,a.generated.column=s-1,e.map.addMapping(a)))}})},n.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},n.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(r){return r.inline}):!0},n.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},n.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},n.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},n.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var r=this.memoizedPaths.get(e);if(r)return r;var s=this.opts.to?Gn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(s=Gn(ac(s,this.mapOpts.annotation)));var o=oc(s,e);return this.memoizedPaths.set(e,o),o},n.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(s){if(s.source&&s.source.input.map){var o=s.source.input.map;e.previousMaps.includes(o)||e.previousMaps.push(o)}});else{var r=new Iv(this.originalCSS,this.opts);r.map&&this.previousMaps.push(r.map)}return this.previousMaps},n.setSourcesContent=function(){var e=this,r={};if(this.root)this.root.walk(function(o){if(o.source){var a=o.source.input.from;if(a&&!r[a]){r[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,o.source.input.css)}}});else if(this.css){var s=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(s,this.css)}},n.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},n.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},n.toFileUrl=function(e){var r=this.memoizedFileURLs.get(e);if(r)return r;if(cc){var s=cc(e).toString();return this.memoizedFileURLs.set(e,s),s}else throw new Error("`map.absolute` option is not available in this PostCSS build")},n.toUrl=function(e){var r=this.memoizedURLs.get(e);if(r)return r;uc==="\\"&&(e=e.replace(/\\/g,"/"));var s=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,s),s},t})(),lc=kv,Rv=Fn,Xs=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="comment",e}return n})(Rv),Vn=Xs;Xs.default=Xs;var fc=_t.isClean,hc=_t.my,pc=Un,dc=Vn,Av=Fn,vc,Zs,Qs,gc;function mc(t){return t.map(function(n){return n.nodes&&(n.nodes=mc(n.nodes)),delete n.source,n})}function yc(t){if(t[fc]=!1,t.proxyOf.nodes)for(var n=E(t.proxyOf.nodes),i;!(i=n()).done;){var e=i.value;yc(e)}}var at=(function(t){ue(n,t);function n(){return t.apply(this,arguments)||this}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?c-1:0),f=1;f=r&&(this.indexes[o]=s-1);return this.markDirty(),this},i.replaceValues=function(r,s,o){return o||(o=s,s={}),this.walkDecls(function(a){s.props&&!s.props.includes(a.prop)||s.fast&&!a.value.includes(s.fast)||(a.value=a.value.replace(r,o))}),this.markDirty(),this},i.some=function(r){return this.nodes.some(r)},i.walk=function(r){return this.each(function(s,o){var a;try{a=r(s,o)}catch(u){throw s.addToError(u)}return a!==!1&&s.walk&&(a=s.walk(r)),a})},i.walkAtRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="atrule"&&r.test(o.name))return s(o,a)}):this.walk(function(o,a){if(o.type==="atrule"&&o.name===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="atrule")return s(o,a)}))},i.walkComments=function(r){return this.walk(function(s,o){if(s.type==="comment")return r(s,o)})},i.walkDecls=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="decl"&&r.test(o.prop))return s(o,a)}):this.walk(function(o,a){if(o.type==="decl"&&o.prop===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="decl")return s(o,a)}))},i.walkRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="rule"&&r.test(o.selector))return s(o,a)}):this.walk(function(o,a){if(o.type==="rule"&&o.selector===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="rule")return s(o,a)}))},ie(n,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),n})(Av);at.registerParse=function(t){vc=t},at.registerRule=function(t){Zs=t},at.registerAtRule=function(t){Qs=t},at.registerRoot=function(t){gc=t};var Wt=at;at.default=at,at.rebuild=function(t){t.type==="atrule"?Object.setPrototypeOf(t,Qs.prototype):t.type==="rule"?Object.setPrototypeOf(t,Zs.prototype):t.type==="decl"?Object.setPrototypeOf(t,pc.prototype):t.type==="comment"?Object.setPrototypeOf(t,dc.prototype):t.type==="root"&&Object.setPrototypeOf(t,gc.prototype),t[hc]=!0,t.nodes&&t.nodes.forEach(function(n){at.rebuild(n)})};var Mv=Wt,_c,wc,Hr=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,z({type:"document"},e))||this,r.nodes||(r.nodes=[]),r}var i=n.prototype;return i.toResult=function(r){r===void 0&&(r={});var s=new _c(new wc,this,r);return s.stringify()},n})(Mv);Hr.registerLazyResult=function(t){_c=t},Hr.registerProcessor=function(t){wc=t};var eo=Hr;Hr.default=Hr;var bc={},Sc=function(n){bc[n]||(bc[n]=!0,typeof console!="undefined"&&console.warn&&console.warn(n))},to=(function(){function t(i,e){if(e===void 0&&(e={}),this.type="warning",this.text=i,e.node&&e.node.source){var r=e.node.rangeBy(e);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(var s in e)this[s]=e[s]}var n=t.prototype;return n.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},t})(),Cc=to;to.default=to;var Tv=Cc,ro=(function(){function t(i,e,r){this.processor=i,this.messages=[],this.root=e,this.opts=r,this.css=void 0,this.map=void 0}var n=t.prototype;return n.toString=function(){return this.css},n.warn=function(e,r){r===void 0&&(r={}),r.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(r.plugin=this.lastPlugin.postcssPlugin);var s=new Tv(e,r);return this.messages.push(s),s},n.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},ie(t,[{key:"content",get:function(){return this.css}}]),t})(),no=ro;ro.default=ro;var io=39,Ec=34,jn=92,Ic=47,Hn=10,Kr=32,Kn=12,Yn=9,Jn=13,Pv=91,$v=93,Nv=40,Lv=41,Dv=123,Fv=125,Uv=59,Bv=42,zv=58,qv=64,Xn=/[\t\n\f\r "#'()/;[\\\]{}]/g,Zn=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,Wv=/.[\r\n"'(/\\]/,Oc=/[\da-f]/i,Gv=function(n,i){i===void 0&&(i={});var e=n.css.valueOf(),r=i.ignoreErrors,s,o,a,u,c,l,f,p,g,v,m=e.length,d=0,y=[],_=[];function w(){return d}function S(R){throw n.error("Unclosed "+R,d)}function b(){return _.length===0&&d>=m}function O(R){if(_.length)return _.pop();if(!(d>=m)){var N=R?R.ignoreUnclosed:!1;switch(s=e.charCodeAt(d),s){case Hn:case Kr:case Yn:case Jn:case Kn:{o=d;do o+=1,s=e.charCodeAt(o);while(s===Kr||s===Hn||s===Yn||s===Jn||s===Kn);v=["space",e.slice(d,o)],d=o-1;break}case Pv:case $v:case Dv:case Fv:case zv:case Uv:case Lv:{var W=String.fromCharCode(s);v=[W,W,d];break}case Nv:{if(p=y.length?y.pop()[1]:"",g=e.charCodeAt(d+1),p==="url"&&g!==io&&g!==Ec&&g!==Kr&&g!==Hn&&g!==Yn&&g!==Kn&&g!==Jn){o=d;do{if(l=!1,o=e.indexOf(")",o+1),o===-1)if(r||N){o=d;break}else S("bracket");for(f=o;e.charCodeAt(f-1)===jn;)f-=1,l=!l}while(l);v=["brackets",e.slice(d,o+1),d,o],d=o}else o=e.indexOf(")",d+1),u=e.slice(d,o+1),o===-1||Wv.test(u)?v=["(","(",d]:(v=["brackets",u,d,o],d=o);break}case io:case Ec:{a=s===io?"'":'"',o=d;do{if(l=!1,o=e.indexOf(a,o+1),o===-1)if(r||N){o=d+1;break}else S("string");for(f=o;e.charCodeAt(f-1)===jn;)f-=1,l=!l}while(l);v=["string",e.slice(d,o+1),d,o],d=o;break}case qv:{Xn.lastIndex=d+1,Xn.test(e),Xn.lastIndex===0?o=e.length-1:o=Xn.lastIndex-2,v=["at-word",e.slice(d,o+1),d,o],d=o;break}case jn:{for(o=d,c=!0;e.charCodeAt(o+1)===jn;)o+=1,c=!c;if(s=e.charCodeAt(o+1),c&&s!==Ic&&s!==Kr&&s!==Hn&&s!==Yn&&s!==Jn&&s!==Kn&&(o+=1,Oc.test(e.charAt(o)))){for(;Oc.test(e.charAt(o+1));)o+=1;e.charCodeAt(o+1)===Kr&&(o+=1)}v=["word",e.slice(d,o+1),d,o],d=o;break}default:{s===Ic&&e.charCodeAt(d+1)===Bv?(o=e.indexOf("*/",d+2)+1,o===0&&(r||N?o=e.length:S("comment")),v=["comment",e.slice(d,o+1),d,o],d=o):(Zn.lastIndex=d+1,Zn.test(e),Zn.lastIndex===0?o=e.length-1:o=Zn.lastIndex-2,v=["word",e.slice(d,o+1),d,o],y.push(v),d=o);break}}return d++,v}}function M(R){_.push(R)}return{back:M,endOfFile:b,nextToken:O,position:w}},xc=Wt,Qn=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,e)||this,r.type="atrule",r}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?s.raws.before=this.nodes[1].raws.before:delete s.raws.before;else if(this.first!==s)for(var u=E(a),c;!(c=u()).done;){var l=c.value;l.raws.before=s.raws.before}}return a},i.removeChild=function(r,s){var o=this.index(r);return!s&&o===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[o].raws.before),t.prototype.removeChild.call(this,r)},i.toResult=function(r){r===void 0&&(r={});var s=new Rc(new Ac,this,r);return s.stringify()},n})(kc);hr.registerLazyResult=function(t){Rc=t},hr.registerProcessor=function(t){Ac=t};var Yr=hr;hr.default=hr,kc.registerRoot(hr);var Jr={comma:function(n){return Jr.split(n,[","],!0)},space:function(n){var i=[" ","\n"," "];return Jr.split(n,i)},split:function(n,i,e){for(var r=[],s="",o=!1,a=0,u=!1,c="",l=!1,f=E(n),p;!(p=f()).done;){var g=p.value;l?l=!1:g==="\\"?l=!0:u?g===c&&(u=!1):g==='"'||g==="'"?(u=!0,c=g):g==="("?a+=1:g===")"?a>0&&(a-=1):a===0&&i.includes(g)&&(o=!0),o?(s!==""&&r.push(s.trim()),s="",o=!1):s+=g}return(e||s!=="")&&r.push(s.trim()),r}},Mc=Jr;Jr.default=Jr;var Tc=Wt,Vv=Mc,ei=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return ie(n,[{key:"selectors",get:function(){return Vv.comma(this.selector)},set:function(e){var r=this.selector?this.selector.match(/,\s*/):null,s=r?r[0]:","+this.raw("between","beforeOpen");this.selector=e.join(s)}}]),n})(Tc),oo=ei;ei.default=ei,Tc.registerRule(ei);var jv=Un,Hv=Gv,Kv=Vn,Yv=so,Jv=Yr,Pc=oo,$c={empty:!0,space:!0};function Xv(t){for(var n=t.length-1;n>=0;n--){var i=t[n],e=i[3]||i[2];if(e)return e}}var Zv=(function(){function t(i){this.input=i,this.root=new Jv,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:i,start:{column:1,line:1,offset:0}}}var n=t.prototype;return n.atrule=function(e){var r=new Yv;r.name=e[1].slice(1),r.name===""&&this.unnamedAtrule(r,e),this.init(r,e[2]);for(var s,o,a,u=!1,c=!1,l=[],f=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),s=e[0],s==="("||s==="["?f.push(s==="("?")":"]"):s==="{"&&f.length>0?f.push("}"):s===f[f.length-1]&&f.pop(),f.length===0)if(s===";"){r.source.end=this.getPosition(e[2]),r.source.end.offset++,this.semicolon=!0;break}else if(s==="{"){c=!0;break}else if(s==="}"){if(l.length>0){for(a=l.length-1,o=l[a];o&&o[0]==="space";)o=l[--a];o&&(r.source.end=this.getPosition(o[3]||o[2]),r.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}r.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(r.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(r,"params",l),u&&(e=l[l.length-1],r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++,this.spaces=r.raws.between,r.raws.between="")):(r.raws.afterName="",r.params=""),c&&(r.nodes=[],this.current=r)},n.checkMissedSemicolon=function(e){var r=this.colon(e);if(r!==!1){for(var s=0,o,a=r-1;a>=0&&(o=e[a],!(o[0]!=="space"&&(s+=1,s===2)));a--);throw this.input.error("Missed semicolon",o[0]==="word"?o[3]+1:o[2])}},n.colon=function(e){for(var r=0,s,o,a,u=E(e.entries()),c;!(c=u()).done;){var l=c.value,f=l[0],p=l[1];if(s=p,o=s[0],o==="("&&(r+=1),o===")"&&(r-=1),r===0&&o===":")if(!a)this.doubleColon(s);else{if(a[0]==="word"&&a[1]==="progid")continue;return f}a=s}return!1},n.comment=function(e){var r=new Kv;this.init(r,e[2]),r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++;var s=e[1].slice(2,-2);if(/^\s*$/.test(s))r.text="",r.raws.left=s,r.raws.right="";else{var o=s.match(/^(\s*)([^]*\S)(\s*)$/);r.text=o[2],r.raws.left=o[1],r.raws.right=o[3]}},n.createTokenizer=function(){this.tokenizer=Hv(this.input)},n.decl=function(e,r){var s=new jv;this.init(s,e[0][2]);var o=e[e.length-1];for(o[0]===";"&&(this.semicolon=!0,e.pop()),s.source.end=this.getPosition(o[3]||o[2]||Xv(e)),s.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),s.raws.before+=e.shift()[1];for(s.source.start=this.getPosition(e[0][2]),s.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;s.prop+=e.shift()[1]}s.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){s.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),s.raws.between+=u[1];(s.prop[0]==="_"||s.prop[0]==="*")&&(s.raws.before+=s.prop[0],s.prop=s.prop.slice(1));for(var c=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)c.push(e.shift());this.precheckMissedSemicolon(e);for(var f=e.length-1;f>=0;f--){if(u=e[f],u[1].toLowerCase()==="!important"){s.important=!0;var p=this.stringFrom(e,f);p=this.spacesFromEnd(e)+p,p!==" !important"&&(s.raws.important=p);break}else if(u[1].toLowerCase()==="important"){for(var g=e.slice(0),v="",m=f;m>0;m--){var d=g[m][0];if(v.trim().indexOf("!")===0&&d!=="space")break;v=g.pop()[1]+v}v.trim().indexOf("!")===0&&(s.important=!0,s.raws.important=v,e=g)}if(u[0]!=="space"&&u[0]!=="comment")break}var y=e.some(function(_){return _[0]!=="space"&&_[0]!=="comment"});y&&(s.raws.between+=c.map(function(_){return _[1]}).join(""),c=[]),this.raw(s,"value",c.concat(e),r),s.value.includes(":")&&!r&&this.checkMissedSemicolon(e)},n.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},n.emptyRule=function(e){var r=new Pc;this.init(r,e[2]),r.selector="",r.raws.between="",this.current=r},n.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},n.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},n.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var r=this.current.nodes[this.current.nodes.length-1];r&&r.type==="rule"&&!r.raws.ownSemicolon&&(r.raws.ownSemicolon=this.spaces,this.spaces="")}},n.getPosition=function(e){var r=this.input.fromOffset(e);return{column:r.col,line:r.line,offset:e}},n.init=function(e,r){this.current.push(e),e.source={input:this.input,start:this.getPosition(r)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},n.other=function(e){for(var r=!1,s=null,o=!1,a=null,u=[],c=e[1].startsWith("--"),l=[],f=e;f;){if(s=f[0],l.push(f),s==="("||s==="[")a||(a=f),u.push(s==="("?")":"]");else if(c&&o&&s==="{")a||(a=f),u.push("}");else if(u.length===0)if(s===";")if(o){this.decl(l,c);return}else break;else if(s==="{"){this.rule(l);return}else if(s==="}"){this.tokenizer.back(l.pop()),r=!0;break}else s===":"&&(o=!0);else s===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));f=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(r=!0),u.length>0&&this.unclosedBracket(a),r&&o){if(!c)for(;l.length&&(f=l[l.length-1][0],!(f!=="space"&&f!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,c)}else this.unknownWord(l)},n.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},n.precheckMissedSemicolon=function(){},n.raw=function(e,r,s,o){for(var a,u,c=s.length,l="",f=!0,p,g,v=0;vparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+o+" uses "+a+". Perhaps this is the source of the error below.")}}catch(f){console&&console.error&&console.error(f)}return e},n.prepareVisitors=function(){var e=this;this.listeners={};for(var r=function(l,f,p){e.listeners[f]||(e.listeners[f]=[]),e.listeners[f].push([l,p])},s=E(this.plugins),o;!(o=s()).done;){var a=o.value;if((typeof a=="undefined"?"undefined":P(a))==="object")for(var u in a){if(!hg[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!pg[u])if(P(a[u])==="object")for(var c in a[u])c==="*"?r(a,u,a[u][c]):r(a,u+"-"+c.toLowerCase(),a[u][c]);else typeof a[u]=="function"&&r(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},n.runAsync=function(){var e=this;return An(function(){var r,s,o,a,u,c,l,f,p,g,v,m;return zt(this,function(d){switch(d.label){case 0:e.plugin=0,r=0,d.label=1;case 1:if(!(r0))return[3,13];if(l=e.visitTick(c),!Xr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw f=d.sent(),p=c[c.length-1].node,e.handleError(f,p);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];g=function(){var y,_,w,S,b;return zt(this,function(O){switch(O.label){case 0:y=m.value,_=y[0],w=y[1],e.result.lastPlugin=_,O.label=1;case 1:return O.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(M){return w(M,e.helpers)}),[4,Promise.all(S)]);case 2:return O.sent(),[3,5];case 3:return[4,w(u,e.helpers)];case 4:O.sent(),O.label=5;case 5:return[3,7];case 6:throw b=O.sent(),e.handleError(b);case 7:return[2]}})},v=E(e.listeners.OnceExit),d.label=15;case 15:return(m=v()).done?[3,18]:[5,Ms(g())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},n.runOnRoot=function(e){var r=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":P(e))==="object"&&e.Once){if(this.result.root.type==="document"){var s=this.result.root.nodes.map(function(o){return e.Once(o,r.helpers)});return Xr(s[0])?Promise.all(s):s}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(o){throw this.handleError(o)}},n.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,r=sg;e.syntax&&(r=e.syntax.stringify),e.stringifier&&(r=e.stringifier),r.stringify&&(r=r.stringify);var s=new ig(r,this.result.root,this.result.opts),o=s.generate();return this.result.css=o[0],this.result.map=o[1],this.result},n.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=E(this.plugins),r;!(r=e()).done;){var s=r.value,o=this.runOnRoot(s);if(Xr(o))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Ke];)a[Ke]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=E(a.nodes),c;!(c=u()).done;){var l=c.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},n.then=function(e,r){return process.env.NODE_ENV!=="production"&&("from"in this.opts||ug("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,r)},n.toString=function(){return this.css},n.visitSync=function(e,r){for(var s=E(e),o;!(o=s()).done;){var a=o.value,u=a[0],c=a[1];this.result.lastPlugin=u;var l=void 0;try{l=c(r,this.helpers)}catch(f){throw this.handleError(f,r.proxyOf)}if(r.type!=="root"&&r.type!=="document"&&!r.parent)return!0;if(Xr(l))throw this.getAsyncError()}},n.visitTick=function(e){var r=e[e.length-1],s=r.node,o=r.visitors;if(s.type!=="root"&&s.type!=="document"&&!s.parent){e.pop();return}if(o.length>0&&r.visitorIndex",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},i.showSourceCode=function(r){var s=this;if(!this.source)return"";var o=this.source;r==null&&(r=jc.isColorSupported),Hc&&r&&(o=Hc(o));var a=o.split(/\r?\n/),u=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),l=String(c).length,f,p;if(r){var g=jc.createColors(!0),v=g.bold,m=g.gray,d=g.red;f=function(y){return v(d(y))},p=function(y){return m(y)}}else f=p=function(y){return y};return a.slice(u,c).map(function(y,_){var w=u+1+_,S=" "+(" "+w).slice(-l)+" | ";if(w===s.line){var b=p(S.replace(/\d/g," "))+y.slice(0,s.column-1).replace(/[^\t]/g," ");return f(">")+p(S)+y+"\n "+b+f("^")}return" "+p(S)+y}).join("\n")},i.toString=function(){var r=this.showSourceCode();return r&&(r="\n\n"+r+"\n"),this.name+": "+this.message+r},n})(zr(Error)),vo=po;po.default=po;var wt={};wt.isClean=Symbol("isClean"),wt.my=Symbol("my");var Kc={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Zg(t){return t[0].toUpperCase()+t.slice(1)}var go=(function(){function t(i){this.builder=i}var n=t.prototype;return n.atrule=function(e,r){var s="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?s+=e.raws.afterName:o&&(s+=" "),e.nodes)this.block(e,s+o);else{var a=(e.raws.between||"")+(r?";":"");this.builder(s+o+a,e)}},n.beforeAfter=function(e,r){var s;e.type==="decl"?s=this.raw(e,null,"beforeDecl"):e.type==="comment"?s=this.raw(e,null,"beforeComment"):r==="before"?s=this.raw(e,null,"beforeRule"):s=this.raw(e,null,"beforeClose");for(var o=e.parent,a=0;o&&o.type!=="root";)a+=1,o=o.parent;if(s.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var c=0;c0&&e.nodes[r].type==="comment";)r-=1;for(var s=this.raw(e,"semicolon"),o=0;o0&&typeof s.raws.after!="undefined")return r=s.raws.after,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawBeforeComment=function(e,r){var s;return e.walkComments(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeDecl"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeDecl=function(e,r){var s;return e.walkDecls(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeRule"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeOpen=function(e){var r;return e.walk(function(s){if(s.type!=="decl"&&(r=s.raws.between,typeof r!="undefined"))return!1}),r},n.rawBeforeRule=function(e){var r;return e.walk(function(s){if(s.nodes&&(s.parent!==e||e.first!==s)&&typeof s.raws.before!="undefined")return r=s.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawColon=function(e){var r;return e.walkDecls(function(s){if(typeof s.raws.between!="undefined")return r=s.raws.between.replace(/[^\s:]/g,""),!1}),r},n.rawEmptyBody=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length===0&&(r=s.raws.after,typeof r!="undefined"))return!1}),r},n.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var r;return e.walk(function(s){var o=s.parent;if(o&&o!==e&&o.parent&&o.parent===e&&typeof s.raws.before!="undefined"){var a=s.raws.before.split("\n");return r=a[a.length-1],r=r.replace(/\S/g,""),!1}}),r},n.rawSemicolon=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length&&s.last.type==="decl"&&(r=s.raws.semicolon,typeof r!="undefined"))return!1}),r},n.rawValue=function(e,r){var s=e[r],o=e.raws[r];return o&&o.value===s?o.raw:s},n.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},n.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},n.stringify=function(e,r){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,r)},t})(),Yc=go;go.default=go;var Qg=Yc;function mo(t,n){var i=new Qg(n);i.stringify(t)}var ri=mo;mo.default=mo;var ni=wt.isClean,em=wt.my,tm=vo,rm=Yc,nm=ri;function yo(t,n){var i=new t.constructor;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&e!=="proxyCache"){var r=t[e],s=typeof r=="undefined"?"undefined":P(r);e==="parent"&&s==="object"?n&&(i[e]=n):e==="source"?i[e]=r:Array.isArray(r)?i[e]=r.map(function(o){return yo(o,i)}):(s==="object"&&r!==null&&(r=yo(r)),i[e]=r)}return i}var _o=(function(){function t(i){i===void 0&&(i={}),this.raws={},this[ni]=!1,this[em]=!0;for(var e in i)if(e==="nodes"){this.nodes=[];for(var r=E(i[e]),s;!(s=r()).done;){var o=s.value;typeof o.clone=="function"?this.append(o.clone()):this.append(o)}}else this[e]=i[e]}var n=t.prototype;return n.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var r=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+r.input.from+":"+r.start.line+":"+r.start.column+"$&")}return e},n.after=function(e){return this.parent.insertAfter(this,e),this},n.assign=function(e){e===void 0&&(e={});for(var r in e)this[r]=e[r];return this},n.before=function(e){return this.parent.insertBefore(this,e),this},n.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},n.clone=function(e){e===void 0&&(e={});var r=yo(this);for(var s in e)r[s]=e[s];return r},n.cloneAfter=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertAfter(this,r),r},n.cloneBefore=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertBefore(this,r),r},n.error=function(e,r){if(r===void 0&&(r={}),this.source){var s=this.rangeBy(r),o=s.end,a=s.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:o.column,line:o.line},r)}return new tm(e)},n.getProxyProcessor=function(){return{get:function(r,s){return s==="proxyOf"?r:s==="root"?function(){return r.root().toProxy()}:r[s]},set:function(r,s,o){return r[s]===o||(r[s]=o,(s==="prop"||s==="value"||s==="name"||s==="params"||s==="important"||s==="text")&&r.markDirty()),!0}}},n.markDirty=function(){if(this[ni]){this[ni]=!1;for(var e=this;e=e.parent;)e[ni]=!1}},n.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},n.positionBy=function(e,r){var s=this.source.start;if(e.index)s=this.positionInside(e.index,r);else if(e.word){r=this.toString();var o=r.indexOf(e.word);o!==-1&&(s=this.positionInside(o,r))}return s},n.positionInside=function(e,r){for(var s=r||this.toString(),o=this.source.start.column,a=this.source.start.line,u=0;u-1&&o>-1&&(this.annotation=this.getAnnotationURL(e.substring(s,o)))}},n.loadFile=function(e){if(this.root=bo(e),um(e))return this.mapFile=e,cm(e,"utf-8").toString().trim()},n.loadMap=function(e,r){if(r===!1)return!1;if(r){if(typeof r=="string")return r;if(typeof r=="function"){var s=r(e);if(s){var o=this.loadFile(s);if(!o)throw new Error("Unable to load previous source map: "+s.toString());return o}}else{if(T(r,Jc))return Xc.fromSourceMap(r).toString();if(T(r,Xc))return r.toString();if(this.isMap(r))return JSON.stringify(r);throw new Error("Unsupported previous source map format: "+r.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=lm(bo(e),a)),this.loadFile(a)}}},n.startWith=function(e,r){return e?e.substr(0,r.length)===r:!1},n.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},t})(),Zc=So;So.default=So;var hm=ye.SourceMapConsumer,pm=ye.SourceMapGenerator,Qc=ye.fileURLToPath,oi=ye.pathToFileURL,Co=ye.isAbsolute,Eo=ye.resolve,dm=am.nanoid,Io=ye,el=vo,vm=Zc,Oo=Symbol("fromOffsetCache"),gm=!!(hm&&pm),tl=!!(Eo&&Co),ai=(function(){function t(i,e){if(e===void 0&&(e={}),i===null||typeof i=="undefined"||(typeof i=="undefined"?"undefined":P(i))==="object"&&!i.toString)throw new Error("PostCSS received "+i+" instead of CSS string");if(this.css=i.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!tl||/^\w+:\/\//.test(e.from)||Co(e.from)?this.file=e.from:this.file=Eo(e.from)),tl&&gm){var r=new vm(this.css,e);if(r.text){this.map=r;var s=r.consumer().file;!this.file&&s&&(this.file=this.mapResolve(s))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var n=t.prototype;return n.error=function(e,r,s,o){o===void 0&&(o={});var a,u,c;if(r&&(typeof r=="undefined"?"undefined":P(r))==="object"){var l=r,f=s;if(typeof l.offset=="number"){var p=this.fromOffset(l.offset);r=p.line,s=p.col}else r=l.line,s=l.column;if(typeof f.offset=="number"){var g=this.fromOffset(f.offset);u=g.line,c=g.col}else u=f.line,c=f.column}else if(!s){var v=this.fromOffset(r);r=v.line,s=v.col}var m=this.origin(r,s,u,c);return m?a=new el(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,o.plugin):a=new el(e,u===void 0?r:{column:s,line:r},u===void 0?s:{column:c,line:u},this.css,this.file,o.plugin),a.input={column:s,endColumn:c,endLine:u,line:r,source:this.css},this.file&&(oi&&(a.input.url=oi(this.file).toString()),a.input.file=this.file),a},n.fromOffset=function(e){var r,s;if(this[Oo])s=this[Oo];else{var o=this.css.split("\n");s=new Array(o.length);for(var a=0,u=0,c=o.length;u=r)l=s.length-1;else for(var f=s.length-2,p;l>1),e=s[p+1])l=p+1;else{l=p;break}return{col:e-s[l]+1,line:l+1}},n.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Eo(this.map.consumer().sourceRoot||this.map.root||".",e)},n.origin=function(e,r,s,o){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:r,line:e});if(!u.source)return!1;var c;typeof s=="number"&&(c=a.originalPositionFor({column:o,line:s}));var l;Co(u.source)?l=oi(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||oi(this.map.mapFile));var f={column:u.column,endColumn:c&&c.column,endLine:c&&c.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(Qc)f.file=Qc(l);else throw new Error("file: protocol is not available in this PostCSS build");var p=a.sourceContentFor(u.source);return p&&(f.source=p),f},n.toJSON=function(){for(var e={},r=0,s=["hasBOM","css","file","id"];r=0;r--)e=this.root.nodes[r],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(r);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},n.generate=function(){if(this.clearAnnotation(),_m&&ym&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(r){e+=r}),[e]},n.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=ci.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new ci({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},n.generateString=function(){var e=this;this.css="",this.map=new ci({file:this.outputFile(),ignoreInvalidMapping:!0});var r=1,s=1,o="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,c;this.stringify(this.root,function(l,f,p){if(e.css+=l,f&&p!=="end"&&(a.generated.line=r,a.generated.column=s-1,f.source&&f.source.start?(a.source=e.sourcePath(f),a.original.line=f.source.start.line,a.original.column=f.source.start.column-1,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(r+=u.length,c=l.lastIndexOf("\n"),s=l.length-c):s+=l.length,f&&p!=="start"){var g=f.parent||{raws:{}},v=f.type==="decl"||f.type==="atrule"&&!f.nodes;(!v||f!==g.last||g.raws.semicolon)&&(f.source&&f.source.end?(a.source=e.sourcePath(f),a.original.line=f.source.end.line,a.original.column=f.source.end.column-1,a.generated.line=r,a.generated.column=s-2,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,a.generated.line=r,a.generated.column=s-1,e.map.addMapping(a)))}})},n.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},n.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(r){return r.inline}):!0},n.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},n.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},n.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},n.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var r=this.memoizedPaths.get(e);if(r)return r;var s=this.opts.to?li(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(s=li(il(s,this.mapOpts.annotation)));var o=nl(s,e);return this.memoizedPaths.set(e,o),o},n.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(s){if(s.source&&s.source.input.map){var o=s.source.input.map;e.previousMaps.includes(o)||e.previousMaps.push(o)}});else{var r=new mm(this.originalCSS,this.opts);r.map&&this.previousMaps.push(r.map)}return this.previousMaps},n.setSourcesContent=function(){var e=this,r={};if(this.root)this.root.walk(function(o){if(o.source){var a=o.source.input.from;if(a&&!r[a]){r[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,o.source.input.css)}}});else if(this.css){var s=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(s,this.css)}},n.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},n.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},n.toFileUrl=function(e){var r=this.memoizedFileURLs.get(e);if(r)return r;if(ol){var s=ol(e).toString();return this.memoizedFileURLs.set(e,s),s}else throw new Error("`map.absolute` option is not available in this PostCSS build")},n.toUrl=function(e){var r=this.memoizedURLs.get(e);if(r)return r;sl==="\\"&&(e=e.replace(/\\/g,"/"));var s=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,s),s},t})(),al=wm,bm=ii,xo=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="comment",e}return n})(bm),fi=xo;xo.default=xo;var ul=wt.isClean,cl=wt.my,ll=si,fl=fi,Sm=ii,hl,ko,Ro,pl;function dl(t){return t.map(function(n){return n.nodes&&(n.nodes=dl(n.nodes)),delete n.source,n})}function vl(t){if(t[ul]=!1,t.proxyOf.nodes)for(var n=E(t.proxyOf.nodes),i;!(i=n()).done;){var e=i.value;vl(e)}}var ut=(function(t){ue(n,t);function n(){return t.apply(this,arguments)||this}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?c-1:0),f=1;f=r&&(this.indexes[o]=s-1);return this.markDirty(),this},i.replaceValues=function(r,s,o){return o||(o=s,s={}),this.walkDecls(function(a){s.props&&!s.props.includes(a.prop)||s.fast&&!a.value.includes(s.fast)||(a.value=a.value.replace(r,o))}),this.markDirty(),this},i.some=function(r){return this.nodes.some(r)},i.walk=function(r){return this.each(function(s,o){var a;try{a=r(s,o)}catch(u){throw s.addToError(u)}return a!==!1&&s.walk&&(a=s.walk(r)),a})},i.walkAtRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="atrule"&&r.test(o.name))return s(o,a)}):this.walk(function(o,a){if(o.type==="atrule"&&o.name===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="atrule")return s(o,a)}))},i.walkComments=function(r){return this.walk(function(s,o){if(s.type==="comment")return r(s,o)})},i.walkDecls=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="decl"&&r.test(o.prop))return s(o,a)}):this.walk(function(o,a){if(o.type==="decl"&&o.prop===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="decl")return s(o,a)}))},i.walkRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="rule"&&r.test(o.selector))return s(o,a)}):this.walk(function(o,a){if(o.type==="rule"&&o.selector===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="rule")return s(o,a)}))},ie(n,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),n})(Sm);ut.registerParse=function(t){hl=t},ut.registerRule=function(t){ko=t},ut.registerAtRule=function(t){Ro=t},ut.registerRoot=function(t){pl=t};var Gt=ut;ut.default=ut,ut.rebuild=function(t){t.type==="atrule"?Object.setPrototypeOf(t,Ro.prototype):t.type==="rule"?Object.setPrototypeOf(t,ko.prototype):t.type==="decl"?Object.setPrototypeOf(t,ll.prototype):t.type==="comment"?Object.setPrototypeOf(t,fl.prototype):t.type==="root"&&Object.setPrototypeOf(t,pl.prototype),t[cl]=!0,t.nodes&&t.nodes.forEach(function(n){ut.rebuild(n)})};var Cm=Gt,gl,ml,en=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,z({type:"document"},e))||this,r.nodes||(r.nodes=[]),r}var i=n.prototype;return i.toResult=function(r){r===void 0&&(r={});var s=new gl(new ml,this,r);return s.stringify()},n})(Cm);en.registerLazyResult=function(t){gl=t},en.registerProcessor=function(t){ml=t};var Ao=en;en.default=en;var yl={},_l=function(n){yl[n]||(yl[n]=!0,typeof console!="undefined"&&console.warn&&console.warn(n))},Mo=(function(){function t(i,e){if(e===void 0&&(e={}),this.type="warning",this.text=i,e.node&&e.node.source){var r=e.node.rangeBy(e);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(var s in e)this[s]=e[s]}var n=t.prototype;return n.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},t})(),wl=Mo;Mo.default=Mo;var Em=wl,To=(function(){function t(i,e,r){this.processor=i,this.messages=[],this.root=e,this.opts=r,this.css=void 0,this.map=void 0}var n=t.prototype;return n.toString=function(){return this.css},n.warn=function(e,r){r===void 0&&(r={}),r.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(r.plugin=this.lastPlugin.postcssPlugin);var s=new Em(e,r);return this.messages.push(s),s},n.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},ie(t,[{key:"content",get:function(){return this.css}}]),t})(),Po=To;To.default=To;var $o=39,bl=34,hi=92,Sl=47,pi=10,tn=32,di=12,vi=9,gi=13,Im=91,Om=93,xm=40,km=41,Rm=123,Am=125,Mm=59,Tm=42,Pm=58,$m=64,mi=/[\t\n\f\r "#'()/;[\\\]{}]/g,yi=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,Nm=/.[\r\n"'(/\\]/,Cl=/[\da-f]/i,Lm=function(n,i){i===void 0&&(i={});var e=n.css.valueOf(),r=i.ignoreErrors,s,o,a,u,c,l,f,p,g,v,m=e.length,d=0,y=[],_=[];function w(){return d}function S(R){throw n.error("Unclosed "+R,d)}function b(){return _.length===0&&d>=m}function O(R){if(_.length)return _.pop();if(!(d>=m)){var N=R?R.ignoreUnclosed:!1;switch(s=e.charCodeAt(d),s){case pi:case tn:case vi:case gi:case di:{o=d;do o+=1,s=e.charCodeAt(o);while(s===tn||s===pi||s===vi||s===gi||s===di);v=["space",e.slice(d,o)],d=o-1;break}case Im:case Om:case Rm:case Am:case Pm:case Mm:case km:{var W=String.fromCharCode(s);v=[W,W,d];break}case xm:{if(p=y.length?y.pop()[1]:"",g=e.charCodeAt(d+1),p==="url"&&g!==$o&&g!==bl&&g!==tn&&g!==pi&&g!==vi&&g!==di&&g!==gi){o=d;do{if(l=!1,o=e.indexOf(")",o+1),o===-1)if(r||N){o=d;break}else S("bracket");for(f=o;e.charCodeAt(f-1)===hi;)f-=1,l=!l}while(l);v=["brackets",e.slice(d,o+1),d,o],d=o}else o=e.indexOf(")",d+1),u=e.slice(d,o+1),o===-1||Nm.test(u)?v=["(","(",d]:(v=["brackets",u,d,o],d=o);break}case $o:case bl:{a=s===$o?"'":'"',o=d;do{if(l=!1,o=e.indexOf(a,o+1),o===-1)if(r||N){o=d+1;break}else S("string");for(f=o;e.charCodeAt(f-1)===hi;)f-=1,l=!l}while(l);v=["string",e.slice(d,o+1),d,o],d=o;break}case $m:{mi.lastIndex=d+1,mi.test(e),mi.lastIndex===0?o=e.length-1:o=mi.lastIndex-2,v=["at-word",e.slice(d,o+1),d,o],d=o;break}case hi:{for(o=d,c=!0;e.charCodeAt(o+1)===hi;)o+=1,c=!c;if(s=e.charCodeAt(o+1),c&&s!==Sl&&s!==tn&&s!==pi&&s!==vi&&s!==gi&&s!==di&&(o+=1,Cl.test(e.charAt(o)))){for(;Cl.test(e.charAt(o+1));)o+=1;e.charCodeAt(o+1)===tn&&(o+=1)}v=["word",e.slice(d,o+1),d,o],d=o;break}default:{s===Sl&&e.charCodeAt(d+1)===Tm?(o=e.indexOf("*/",d+2)+1,o===0&&(r||N?o=e.length:S("comment")),v=["comment",e.slice(d,o+1),d,o],d=o):(yi.lastIndex=d+1,yi.test(e),yi.lastIndex===0?o=e.length-1:o=yi.lastIndex-2,v=["word",e.slice(d,o+1),d,o],y.push(v),d=o);break}}return d++,v}}function M(R){_.push(R)}return{back:M,endOfFile:b,nextToken:O,position:w}},El=Gt,_i=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,e)||this,r.type="atrule",r}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?s.raws.before=this.nodes[1].raws.before:delete s.raws.before;else if(this.first!==s)for(var u=E(a),c;!(c=u()).done;){var l=c.value;l.raws.before=s.raws.before}}return a},i.removeChild=function(r,s){var o=this.index(r);return!s&&o===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[o].raws.before),t.prototype.removeChild.call(this,r)},i.toResult=function(r){r===void 0&&(r={});var s=new Ol(new xl,this,r);return s.stringify()},n})(Il);vr.registerLazyResult=function(t){Ol=t},vr.registerProcessor=function(t){xl=t};var rn=vr;vr.default=vr,Il.registerRoot(vr);var nn={comma:function(n){return nn.split(n,[","],!0)},space:function(n){var i=[" ","\n"," "];return nn.split(n,i)},split:function(n,i,e){for(var r=[],s="",o=!1,a=0,u=!1,c="",l=!1,f=E(n),p;!(p=f()).done;){var g=p.value;l?l=!1:g==="\\"?l=!0:u?g===c&&(u=!1):g==='"'||g==="'"?(u=!0,c=g):g==="("?a+=1:g===")"?a>0&&(a-=1):a===0&&i.includes(g)&&(o=!0),o?(s!==""&&r.push(s.trim()),s="",o=!1):s+=g}return(e||s!=="")&&r.push(s.trim()),r}},kl=nn;nn.default=nn;var Rl=Gt,Dm=kl,wi=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return ie(n,[{key:"selectors",get:function(){return Dm.comma(this.selector)},set:function(e){var r=this.selector?this.selector.match(/,\s*/):null,s=r?r[0]:","+this.raw("between","beforeOpen");this.selector=e.join(s)}}]),n})(Rl),Lo=wi;wi.default=wi,Rl.registerRule(wi);var Fm=si,Um=Lm,Bm=fi,zm=No,qm=rn,Al=Lo,Ml={empty:!0,space:!0};function Wm(t){for(var n=t.length-1;n>=0;n--){var i=t[n],e=i[3]||i[2];if(e)return e}}var Gm=(function(){function t(i){this.input=i,this.root=new qm,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:i,start:{column:1,line:1,offset:0}}}var n=t.prototype;return n.atrule=function(e){var r=new zm;r.name=e[1].slice(1),r.name===""&&this.unnamedAtrule(r,e),this.init(r,e[2]);for(var s,o,a,u=!1,c=!1,l=[],f=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),s=e[0],s==="("||s==="["?f.push(s==="("?")":"]"):s==="{"&&f.length>0?f.push("}"):s===f[f.length-1]&&f.pop(),f.length===0)if(s===";"){r.source.end=this.getPosition(e[2]),r.source.end.offset++,this.semicolon=!0;break}else if(s==="{"){c=!0;break}else if(s==="}"){if(l.length>0){for(a=l.length-1,o=l[a];o&&o[0]==="space";)o=l[--a];o&&(r.source.end=this.getPosition(o[3]||o[2]),r.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}r.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(r.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(r,"params",l),u&&(e=l[l.length-1],r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++,this.spaces=r.raws.between,r.raws.between="")):(r.raws.afterName="",r.params=""),c&&(r.nodes=[],this.current=r)},n.checkMissedSemicolon=function(e){var r=this.colon(e);if(r!==!1){for(var s=0,o,a=r-1;a>=0&&(o=e[a],!(o[0]!=="space"&&(s+=1,s===2)));a--);throw this.input.error("Missed semicolon",o[0]==="word"?o[3]+1:o[2])}},n.colon=function(e){for(var r=0,s,o,a,u=E(e.entries()),c;!(c=u()).done;){var l=c.value,f=l[0],p=l[1];if(s=p,o=s[0],o==="("&&(r+=1),o===")"&&(r-=1),r===0&&o===":")if(!a)this.doubleColon(s);else{if(a[0]==="word"&&a[1]==="progid")continue;return f}a=s}return!1},n.comment=function(e){var r=new Bm;this.init(r,e[2]),r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++;var s=e[1].slice(2,-2);if(/^\s*$/.test(s))r.text="",r.raws.left=s,r.raws.right="";else{var o=s.match(/^(\s*)([^]*\S)(\s*)$/);r.text=o[2],r.raws.left=o[1],r.raws.right=o[3]}},n.createTokenizer=function(){this.tokenizer=Um(this.input)},n.decl=function(e,r){var s=new Fm;this.init(s,e[0][2]);var o=e[e.length-1];for(o[0]===";"&&(this.semicolon=!0,e.pop()),s.source.end=this.getPosition(o[3]||o[2]||Wm(e)),s.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),s.raws.before+=e.shift()[1];for(s.source.start=this.getPosition(e[0][2]),s.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;s.prop+=e.shift()[1]}s.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){s.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),s.raws.between+=u[1];(s.prop[0]==="_"||s.prop[0]==="*")&&(s.raws.before+=s.prop[0],s.prop=s.prop.slice(1));for(var c=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)c.push(e.shift());this.precheckMissedSemicolon(e);for(var f=e.length-1;f>=0;f--){if(u=e[f],u[1].toLowerCase()==="!important"){s.important=!0;var p=this.stringFrom(e,f);p=this.spacesFromEnd(e)+p,p!==" !important"&&(s.raws.important=p);break}else if(u[1].toLowerCase()==="important"){for(var g=e.slice(0),v="",m=f;m>0;m--){var d=g[m][0];if(v.trim().indexOf("!")===0&&d!=="space")break;v=g.pop()[1]+v}v.trim().indexOf("!")===0&&(s.important=!0,s.raws.important=v,e=g)}if(u[0]!=="space"&&u[0]!=="comment")break}var y=e.some(function(_){return _[0]!=="space"&&_[0]!=="comment"});y&&(s.raws.between+=c.map(function(_){return _[1]}).join(""),c=[]),this.raw(s,"value",c.concat(e),r),s.value.includes(":")&&!r&&this.checkMissedSemicolon(e)},n.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},n.emptyRule=function(e){var r=new Al;this.init(r,e[2]),r.selector="",r.raws.between="",this.current=r},n.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},n.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},n.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var r=this.current.nodes[this.current.nodes.length-1];r&&r.type==="rule"&&!r.raws.ownSemicolon&&(r.raws.ownSemicolon=this.spaces,this.spaces="")}},n.getPosition=function(e){var r=this.input.fromOffset(e);return{column:r.col,line:r.line,offset:e}},n.init=function(e,r){this.current.push(e),e.source={input:this.input,start:this.getPosition(r)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},n.other=function(e){for(var r=!1,s=null,o=!1,a=null,u=[],c=e[1].startsWith("--"),l=[],f=e;f;){if(s=f[0],l.push(f),s==="("||s==="[")a||(a=f),u.push(s==="("?")":"]");else if(c&&o&&s==="{")a||(a=f),u.push("}");else if(u.length===0)if(s===";")if(o){this.decl(l,c);return}else break;else if(s==="{"){this.rule(l);return}else if(s==="}"){this.tokenizer.back(l.pop()),r=!0;break}else s===":"&&(o=!0);else s===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));f=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(r=!0),u.length>0&&this.unclosedBracket(a),r&&o){if(!c)for(;l.length&&(f=l[l.length-1][0],!(f!=="space"&&f!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,c)}else this.unknownWord(l)},n.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},n.precheckMissedSemicolon=function(){},n.raw=function(e,r,s,o){for(var a,u,c=s.length,l="",f=!0,p,g,v=0;vparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+o+" uses "+a+". Perhaps this is the source of the error below.")}}catch(f){console&&console.error&&console.error(f)}return e},n.prepareVisitors=function(){var e=this;this.listeners={};for(var r=function(l,f,p){e.listeners[f]||(e.listeners[f]=[]),e.listeners[f].push([l,p])},s=E(this.plugins),o;!(o=s()).done;){var a=o.value;if((typeof a=="undefined"?"undefined":P(a))==="object")for(var u in a){if(!iy[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!sy[u])if(P(a[u])==="object")for(var c in a[u])c==="*"?r(a,u,a[u][c]):r(a,u+"-"+c.toLowerCase(),a[u][c]);else typeof a[u]=="function"&&r(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},n.runAsync=function(){var e=this;return An(function(){var r,s,o,a,u,c,l,f,p,g,v,m;return zt(this,function(d){switch(d.label){case 0:e.plugin=0,r=0,d.label=1;case 1:if(!(r0))return[3,13];if(l=e.visitTick(c),!sn(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw f=d.sent(),p=c[c.length-1].node,e.handleError(f,p);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];g=function(){var y,_,w,S,b;return zt(this,function(O){switch(O.label){case 0:y=m.value,_=y[0],w=y[1],e.result.lastPlugin=_,O.label=1;case 1:return O.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(M){return w(M,e.helpers)}),[4,Promise.all(S)]);case 2:return O.sent(),[3,5];case 3:return[4,w(u,e.helpers)];case 4:O.sent(),O.label=5;case 5:return[3,7];case 6:throw b=O.sent(),e.handleError(b);case 7:return[2]}})},v=E(e.listeners.OnceExit),d.label=15;case 15:return(m=v()).done?[3,18]:[5,Ms(g())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},n.runOnRoot=function(e){var r=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":P(e))==="object"&&e.Once){if(this.result.root.type==="document"){var s=this.result.root.nodes.map(function(o){return e.Once(o,r.helpers)});return sn(s[0])?Promise.all(s):s}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(o){throw this.handleError(o)}},n.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,r=Xm;e.syntax&&(r=e.syntax.stringify),e.stringifier&&(r=e.stringifier),r.stringify&&(r=r.stringify);var s=new Jm(r,this.result.root,this.result.opts),o=s.generate();return this.result.css=o[0],this.result.map=o[1],this.result},n.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=E(this.plugins),r;!(r=e()).done;){var s=r.value,o=this.runOnRoot(s);if(sn(o))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Ye];)a[Ye]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=E(a.nodes),c;!(c=u()).done;){var l=c.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},n.then=function(e,r){return process.env.NODE_ENV!=="production"&&("from"in this.opts||ey("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,r)},n.toString=function(){return this.css},n.visitSync=function(e,r){for(var s=E(e),o;!(o=s()).done;){var a=o.value,u=a[0],c=a[1];this.result.lastPlugin=u;var l=void 0;try{l=c(r,this.helpers)}catch(f){throw this.handleError(f,r.proxyOf)}if(r.type!=="root"&&r.type!=="document"&&!r.parent)return!0;if(sn(l))throw this.getAsyncError()}},n.visitTick=function(e){var r=e[e.length-1],s=r.node,o=r.visitors;if(s.type!=="root"&&s.type!=="document"&&!s.parent){e.pop();return}if(o.length>0&&r.visitorIndexn?(e&&(clearTimeout(e),e=null),r=u,t.apply(l,o)):!e&&i.trailing!==!1&&(e=setTimeout(function(){r=i.leading===!1?0:Date.now(),e=null,t.apply(l,o)},c))}}function Ci(t,n,i,e,r){r===void 0&&(r=window);var s=r.Object.getOwnPropertyDescriptor(t,n);return r.Object.defineProperty(t,n,e?i:{set:function(a){var u=this;setTimeout(function(){i.set.call(u,a)},0),s&&s.set&&s.set.call(this,a)}}),function(){return Ci(t,n,s||{},!0)}}var Ei=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(Ei=function(){return new Date().getTime()});function Hl(t){var n,i,e,r,s=t.document;return{left:s.scrollingElement?s.scrollingElement.scrollLeft:t.pageXOffset!==void 0?t.pageXOffset:s.documentElement.scrollLeft||(s==null?void 0:s.body)&&((n=V.parentElement(s.body))==null?void 0:n.scrollLeft)||((i=s==null?void 0:s.body)==null?void 0:i.scrollLeft)||0,top:s.scrollingElement?s.scrollingElement.scrollTop:t.pageYOffset!==void 0?t.pageYOffset:(s==null?void 0:s.documentElement.scrollTop)||(s==null?void 0:s.body)&&((e=V.parentElement(s.body))==null?void 0:e.scrollTop)||((r=s==null?void 0:s.body)==null?void 0:r.scrollTop)||0}}function Kl(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function Yl(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function Jl(t){if(!t)return null;var n=t.nodeType===t.ELEMENT_NODE?t:V.parentElement(t);return n}function Pe(t,n,i,e){if(!t)return!1;var r=Jl(t);if(!r)return!1;try{if(typeof n=="string"){if(r.classList.contains(n)||e&&r.closest("."+n)!==null)return!0}else if(Nn(r,n,e))return!0}catch(s){}return!!(i&&(r.matches(i)||e&&r.closest(i)!==null))}function Jy(t,n){return n.getId(t)!==-1}function Vo(t,n,i){return t.tagName==="TITLE"&&i.headTitleMutations?!0:n.getId(t)===jr}function Xl(t,n){if(qr(t))return!1;var i=n.getId(t);if(!n.has(i))return!0;var e=V.parentNode(t);return e&&e.nodeType===t.DOCUMENT_NODE?!1:e?Xl(e,n):!0}function jo(t){return!!t.changedTouches}function Xy(t){t===void 0&&(t=window),"NodeList"in t&&!t.NodeList.prototype.forEach&&(t.NodeList.prototype.forEach=Array.prototype.forEach),"DOMTokenList"in t&&!t.DOMTokenList.prototype.forEach&&(t.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function Zl(t,n){return!!(t.nodeName==="IFRAME"&&n.getMeta(t))}function Ql(t,n){return!!(t.nodeName==="LINK"&&t.nodeType===t.ELEMENT_NODE&&t.getAttribute&&t.getAttribute("rel")==="stylesheet"&&n.getMeta(t))}function Ho(t){return t?T(t,Dy)&&"shadowRoot"in t?!!t.shadowRoot:!!V.shadowRoot(t):!1}var Zy=(function(){function t(){x(this,"id",1),x(this,"styleIDMap",new WeakMap),x(this,"idStyleMap",new Map)}var n=t.prototype;return n.getId=function(e){var r;return(r=this.styleIDMap.get(e))!=null?r:-1},n.has=function(e){return this.styleIDMap.has(e)},n.add=function(e,r){if(this.has(e))return this.getId(e);var s;return r===void 0?s=this.id++:s=r,this.styleIDMap.set(e,s),this.idStyleMap.set(s,e),s},n.getStyle=function(e){return this.idStyleMap.get(e)||null},n.reset=function(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1},n.generateId=function(){return this.id++},n.remove=function(e){var r=this.styleIDMap.get(e);return r!==void 0?(this.styleIDMap.delete(e),this.idStyleMap.delete(r),!0):!1},t})();function ef(t){var n,i=null;return"getRootNode"in t&&((n=V.getRootNode(t))==null?void 0:n.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&V.host(V.getRootNode(t))&&(i=V.host(V.getRootNode(t))),i}function Qy(t){for(var n=t,i;i=ef(n);)n=i;return n}function e_(t){var n=t.ownerDocument;if(!n)return!1;var i=Qy(t);return V.contains(n,i)}function tf(t){var n=t.ownerDocument;return n?V.contains(n,t)||e_(t):!1}var j=(function(t){return t[t.DomContentLoaded=0]="DomContentLoaded",t[t.Load=1]="Load",t[t.FullSnapshot=2]="FullSnapshot",t[t.IncrementalSnapshot=3]="IncrementalSnapshot",t[t.Meta=4]="Meta",t[t.Custom=5]="Custom",t[t.Plugin=6]="Plugin",t})(j||{}),F=(function(t){return t[t.Mutation=0]="Mutation",t[t.MouseMove=1]="MouseMove",t[t.MouseInteraction=2]="MouseInteraction",t[t.Scroll=3]="Scroll",t[t.ViewportResize=4]="ViewportResize",t[t.Input=5]="Input",t[t.TouchMove=6]="TouchMove",t[t.MediaInteraction=7]="MediaInteraction",t[t.StyleSheetRule=8]="StyleSheetRule",t[t.CanvasMutation=9]="CanvasMutation",t[t.Font=10]="Font",t[t.Log=11]="Log",t[t.Drag=12]="Drag",t[t.StyleDeclaration=13]="StyleDeclaration",t[t.Selection=14]="Selection",t[t.AdoptedStyleSheet=15]="AdoptedStyleSheet",t[t.CustomElement=16]="CustomElement",t})(F||{}),Le=(function(t){return t[t.MouseUp=0]="MouseUp",t[t.MouseDown=1]="MouseDown",t[t.Click=2]="Click",t[t.ContextMenu=3]="ContextMenu",t[t.DblClick=4]="DblClick",t[t.Focus=5]="Focus",t[t.Blur=6]="Blur",t[t.TouchStart=7]="TouchStart",t[t.TouchMove_Departed=8]="TouchMove_Departed",t[t.TouchEnd=9]="TouchEnd",t[t.TouchCancel=10]="TouchCancel",t})(Le||{}),ct=(function(t){return t[t.Mouse=0]="Mouse",t[t.Pen=1]="Pen",t[t.Touch=2]="Touch",t})(ct||{}),_r=(function(t){return t[t["2D"]=0]="2D",t[t.WebGL=1]="WebGL",t[t.WebGL2=2]="WebGL2",t})(_r||{}),wr=(function(t){return t[t.Play=0]="Play",t[t.Pause=1]="Pause",t[t.Seeked=2]="Seeked",t[t.VolumeChange=3]="VolumeChange",t[t.RateChange=4]="RateChange",t})(wr||{}),rf=(function(t){return t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment",t})(rf||{});function nf(t){return"__ln"in t}var t_=(function(){function t(){x(this,"length",0),x(this,"head",null),x(this,"tail",null)}var n=t.prototype;return n.get=function(e){if(e>=this.length)throw new Error("Position outside of list range");for(var r=this.head,s=0;s=0;n--){var i=Je[n];i.getDoc()===t&&Je.splice(n,1)}}function u_(t){var n=t.mousemoveCb,i=t.sampling,e=t.doc,r=t.mirror;if(i.mousemove===!1)return function(){};var s=typeof i.mousemove=="number"?i.mousemove:50,o=typeof i.mousemoveCallback=="number"?i.mousemoveCallback:500,a=[],u,c=un(H(function(p){var g=Date.now()-u;n(a.map(function(v){return v.timeOffset-=g,v}),p),a=[],u=null}),o),l=H(un(H(function(p){var g=ln(p),v=jo(p)?p.changedTouches[0]:p,m=v.clientX,d=v.clientY;u||(u=Ei()),a.push({x:m,y:d,id:r.getId(g),timeOffset:Ei()-u}),c(typeof DragEvent!="undefined"&&T(p,DragEvent)?F.Drag:T(p,MouseEvent)?F.MouseMove:F.TouchMove)}),s,{trailing:!1})),f=[Te("mousemove",l,e),Te("touchmove",l,e),Te("drag",l,e)];return H(function(){f.forEach(function(p){return p()})})}function c_(t){var n=t.mouseInteractionCb,i=t.doc,e=t.mirror,r=t.blockClass,s=t.blockSelector,o=t.sampling;if(o.mouseInteraction===!1)return function(){};var a=o.mouseInteraction===!0||o.mouseInteraction===void 0?{}:o.mouseInteraction,u=[],c=null,l=function(f){return function(p){var g=ln(p);if(!Pe(g,r,s,!0)){var v=null,m=f;if("pointerType"in p){switch(p.pointerType){case"mouse":v=ct.Mouse;break;case"touch":v=ct.Touch;break;case"pen":v=ct.Pen;break}v===ct.Touch?Le[f]===Le.MouseDown?m="TouchStart":Le[f]===Le.MouseUp&&(m="TouchEnd"):ct.Pen}else jo(p)&&(v=ct.Touch);v!==null?(c=v,(m.startsWith("Touch")&&v===ct.Touch||m.startsWith("Mouse")&&v===ct.Mouse)&&(v=null)):Le[f]===Le.Click&&(v=c,c=null);var d=jo(p)?p.changedTouches[0]:p;if(d){var y=e.getId(g),_=d.clientX,w=d.clientY;H(n)(z({type:Le[m],id:y,x:_,y:w},v!==null&&{pointerType:v}))}}}};return Object.keys(Le).filter(function(f){return Number.isNaN(Number(f))&&!f.endsWith("_Departed")&&a[f]!==!1}).forEach(function(f){var p=qt(f),g=l(f);if(window.PointerEvent)switch(Le[f]){case Le.MouseDown:case Le.MouseUp:p=p.replace("mouse","pointer");break;case Le.TouchStart:case Le.TouchEnd:return}u.push(Te(p,g,i))}),H(function(){u.forEach(function(f){return f()})})}function lf(t){var n=t.scrollCb,i=t.doc,e=t.mirror,r=t.blockClass,s=t.blockSelector,o=t.sampling,a=H(un(H(function(u){var c=ln(u);if(!(!c||Pe(c,r,s,!0))){var l=e.getId(c);if(c===i&&i.defaultView){var f=Hl(i.defaultView);n({id:l,x:f.left,y:f.top})}else n({id:l,x:c.scrollLeft,y:c.scrollTop})}}),o.scroll||100));return Te("scroll",a,i)}function l_(t,n){var i=t.viewportResizeCb,e=n.win,r=-1,s=-1,o=H(un(H(function(){var a=Kl(),u=Yl();(r!==a||s!==u)&&(i({width:Number(u),height:Number(a)}),r=a,s=u)}),200));return Te("resize",o,e)}var f_=["INPUT","TEXTAREA","SELECT"],ff=new WeakMap;function h_(t){var n=t.inputCb,i=t.doc,e=t.mirror,r=t.blockClass,s=t.blockSelector,o=t.ignoreClass,a=t.ignoreSelector,u=t.maskInputOptions,c=t.maskInputFn,l=t.sampling,f=t.userTriggeredOnInput;function p(S){var b=ln(S),O=S.isTrusted,M=b&&b.tagName;if(b&&M==="OPTION"&&(b=V.parentElement(b)),!(!b||!M||f_.indexOf(M)<0||Pe(b,r,s,!0))&&!(b.classList.contains(o)||a&&b.matches(a))){var R=b.value,N=!1,W=Vr(b)||"";W==="radio"||W==="checkbox"?N=b.checked:(u[M.toLowerCase()]||u[W])&&(R=Gr({element:b,maskInputOptions:u,tagName:M,type:W,value:R,maskInputFn:c})),g(b,f?{text:R,isChecked:N,userTriggered:O}:{text:R,isChecked:N});var ge=b.name;W==="radio"&&ge&&N&&i.querySelectorAll('input[type="radio"][name="'+ge+'"]').forEach(function(D){if(D!==b){var G=D.value;g(D,f?{text:G,isChecked:!N,userTriggered:!1}:{text:G,isChecked:!N})}})}}function g(S,b){var O=ff.get(S);if(!O||O.text!==b.text||O.isChecked!==b.isChecked){ff.set(S,b);var M=e.getId(S);H(n)(z({},b,{id:M}))}}var v=l.input==="last"?["change"]:["input","change"],m=v.map(function(S){return Te(S,H(p),i)}),d=i.defaultView;if(!d)return function(){m.forEach(function(S){return S()})};var y=d.Object.getOwnPropertyDescriptor(d.HTMLInputElement.prototype,"value"),_=[[d.HTMLInputElement.prototype,"value"],[d.HTMLInputElement.prototype,"checked"],[d.HTMLSelectElement.prototype,"value"],[d.HTMLTextAreaElement.prototype,"value"],[d.HTMLSelectElement.prototype,"selectedIndex"],[d.HTMLOptionElement.prototype,"selected"]];if(y&&y.set){var w;(w=m).push.apply(w,[].concat(_.map(function(S){return Ci(S[0],S[1],{set:function(){H(p)({target:this,isTrusted:!1})}},!1,d)})))}return H(function(){m.forEach(function(S){return S()})})}function Ii(t){var n=[];function i(e,r){if(Oi("CSSGroupingRule")&&T(e.parentRule,CSSGroupingRule)||Oi("CSSMediaRule")&&T(e.parentRule,CSSMediaRule)||Oi("CSSSupportsRule")&&T(e.parentRule,CSSSupportsRule)||Oi("CSSConditionRule")&&T(e.parentRule,CSSConditionRule)){var s=Array.from(e.parentRule.cssRules),o=s.indexOf(e);r.unshift(o)}else if(e.parentStyleSheet){var a=Array.from(e.parentStyleSheet.cssRules),u=a.indexOf(e);r.unshift(u)}return r}return i(t,n)}function St(t,n,i){var e,r;return t?(t.ownerNode?e=n.getId(t.ownerNode):r=i.getId(t),{styleId:r,id:e}):{}}function p_(t,n){var i=t.styleSheetRuleCb,e=t.mirror,r=t.stylesheetManager,s=n.win;if(!s.CSSStyleSheet||!s.CSSStyleSheet.prototype)return function(){};var o=s.CSSStyleSheet.prototype.insertRule;s.CSSStyleSheet.prototype.insertRule=new Proxy(o,{apply:H(function(p,g,v){var m=v[0],d=v[1],y=St(g,e,r.styleMirror),_=y.id,w=y.styleId;return(_&&_!==-1||w&&w!==-1)&&i({id:_,styleId:w,adds:[{rule:m,index:d}]}),p.apply(g,v)})}),s.CSSStyleSheet.prototype.addRule=function(p,g,v){v===void 0&&(v=this.cssRules.length);var m=p+" { "+g+" }";return s.CSSStyleSheet.prototype.insertRule.apply(this,[m,v])};var a=s.CSSStyleSheet.prototype.deleteRule;s.CSSStyleSheet.prototype.deleteRule=new Proxy(a,{apply:H(function(p,g,v){var m=v[0],d=St(g,e,r.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,removes:[{index:m}]}),p.apply(g,v)})}),s.CSSStyleSheet.prototype.removeRule=function(p){return s.CSSStyleSheet.prototype.deleteRule.apply(this,[p])};var u;s.CSSStyleSheet.prototype.replace&&(u=s.CSSStyleSheet.prototype.replace,s.CSSStyleSheet.prototype.replace=new Proxy(u,{apply:H(function(p,g,v){var m=v[0],d=St(g,e,r.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,replace:m}),p.apply(g,v)})}));var c;s.CSSStyleSheet.prototype.replaceSync&&(c=s.CSSStyleSheet.prototype.replaceSync,s.CSSStyleSheet.prototype.replaceSync=new Proxy(c,{apply:H(function(p,g,v){var m=v[0],d=St(g,e,r.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,replaceSync:m}),p.apply(g,v)})}));var l={};xi("CSSGroupingRule")?l.CSSGroupingRule=s.CSSGroupingRule:(xi("CSSMediaRule")&&(l.CSSMediaRule=s.CSSMediaRule),xi("CSSConditionRule")&&(l.CSSConditionRule=s.CSSConditionRule),xi("CSSSupportsRule")&&(l.CSSSupportsRule=s.CSSSupportsRule));var f={};return Object.entries(l).forEach(function(p){var g=p[0],v=p[1];f[g]={insertRule:v.prototype.insertRule,deleteRule:v.prototype.deleteRule},v.prototype.insertRule=new Proxy(f[g].insertRule,{apply:H(function(m,d,y){var _=y[0],w=y[1],S=St(d.parentStyleSheet,e,r.styleMirror),b=S.id,O=S.styleId;return(b&&b!==-1||O&&O!==-1)&&i({id:b,styleId:O,adds:[{rule:_,index:[].concat(Ii(d),[w||0])}]}),m.apply(d,y)})}),v.prototype.deleteRule=new Proxy(f[g].deleteRule,{apply:H(function(m,d,y){var _=y[0],w=St(d.parentStyleSheet,e,r.styleMirror),S=w.id,b=w.styleId;return(S&&S!==-1||b&&b!==-1)&&i({id:S,styleId:b,removes:[{index:[].concat(Ii(d),[_])}]}),m.apply(d,y)})})}),H(function(){s.CSSStyleSheet.prototype.insertRule=o,s.CSSStyleSheet.prototype.deleteRule=a,u&&(s.CSSStyleSheet.prototype.replace=u),c&&(s.CSSStyleSheet.prototype.replaceSync=c),Object.entries(l).forEach(function(p){var g=p[0],v=p[1];v.prototype.insertRule=f[g].insertRule,v.prototype.deleteRule=f[g].deleteRule})})}function hf(t,n){var i=t.mirror,e=t.stylesheetManager,r,s,o,a=null;n.nodeName==="#document"?a=i.getId(n):a=i.getId(V.host(n));var u=n.nodeName==="#document"?(r=n.defaultView)==null?void 0:r.Document:(o=(s=n.ownerDocument)==null?void 0:s.defaultView)==null?void 0:o.ShadowRoot,c=u!=null&&u.prototype?Object.getOwnPropertyDescriptor(u==null?void 0:u.prototype,"adoptedStyleSheets"):void 0;return a===null||a===-1||!u||!c?function(){}:(Object.defineProperty(n,"adoptedStyleSheets",{configurable:c.configurable,enumerable:c.enumerable,get:function(){var f;return(f=c.get)==null?void 0:f.call(this)},set:function(f){var p,g=(p=c.set)==null?void 0:p.call(this,f);if(a!==null&&a!==-1)try{e.adoptStyleSheets(f,a)}catch(v){}return g}}),H(function(){Object.defineProperty(n,"adoptedStyleSheets",{configurable:c.configurable,enumerable:c.enumerable,get:c.get,set:c.set})}))}function d_(t,n){var i=t.styleDeclarationCb,e=t.mirror,r=t.ignoreCSSAttributes,s=t.stylesheetManager,o=n.win,a=o.CSSStyleDeclaration.prototype.setProperty;o.CSSStyleDeclaration.prototype.setProperty=new Proxy(a,{apply:H(function(c,l,f){var p,g=f[0],v=f[1],m=f[2];if(r.has(g))return a.apply(l,[g,v,m]);var d=St((p=l.parentRule)==null?void 0:p.parentStyleSheet,e,s.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,set:{property:g,value:v,priority:m},index:Ii(l.parentRule)}),c.apply(l,f)})});var u=o.CSSStyleDeclaration.prototype.removeProperty;return o.CSSStyleDeclaration.prototype.removeProperty=new Proxy(u,{apply:H(function(c,l,f){var p,g=f[0];if(r.has(g))return u.apply(l,[g]);var v=St((p=l.parentRule)==null?void 0:p.parentStyleSheet,e,s.styleMirror),m=v.id,d=v.styleId;return(m&&m!==-1||d&&d!==-1)&&i({id:m,styleId:d,remove:{property:g},index:Ii(l.parentRule)}),c.apply(l,f)})}),H(function(){o.CSSStyleDeclaration.prototype.setProperty=a,o.CSSStyleDeclaration.prototype.removeProperty=u})}function v_(t){var n=t.mediaInteractionCb,i=t.blockClass,e=t.blockSelector,r=t.mirror,s=t.sampling,o=t.doc,a=H(function(c){return un(H(function(l){var f=ln(l);if(!(!f||Pe(f,i,e,!0))){var p=f.currentTime,g=f.volume,v=f.muted,m=f.playbackRate,d=f.loop;n({type:c,id:r.getId(f),currentTime:p,volume:g,muted:v,playbackRate:m,loop:d})}}),s.media||500)}),u=[Te("play",a(wr.Play),o),Te("pause",a(wr.Pause),o),Te("seeked",a(wr.Seeked),o),Te("volumechange",a(wr.VolumeChange),o),Te("ratechange",a(wr.RateChange),o)];return H(function(){u.forEach(function(c){return c()})})}function g_(t){var n=t.fontCb,i=t.doc,e=i.defaultView;if(!e)return function(){};var r=[],s=new WeakMap,o=e.FontFace;e.FontFace=function(c,l,f){var p=new o(c,l,f);return s.set(p,{family:c,buffer:typeof l!="string",descriptors:f,fontSource:typeof l=="string"?l:JSON.stringify(Array.from(new Uint8Array(l)))}),p};var a=Vt(i.fonts,"add",function(u){return function(c){return setTimeout(H(function(){var l=s.get(c);l&&(n(l),s.delete(c))}),0),u.apply(this,[c])}});return r.push(function(){e.FontFace=o}),r.push(a),H(function(){r.forEach(function(u){return u()})})}function m_(t){var n=t.doc,i=t.mirror,e=t.blockClass,r=t.blockSelector,s=t.selectionCb,o=!0,a=H(function(){var u=n.getSelection();if(!(!u||o&&(u!=null&&u.isCollapsed))){o=u.isCollapsed||!1;for(var c=[],l=u.rangeCount||0,f=0;f0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))},n.handleMessage=function(e){var r=e;if(!(r.data.type!=="rrweb"||r.origin!==r.data.origin)){var s=e.source;if(s){var o=this.crossOriginIframeMap.get(e.source);if(o){var a=this.transformCrossOriginEvent(o,r.data.event);a&&this.wrappedEmit(a,r.data.isCheckout)}}}},n.transformCrossOriginEvent=function(e,r){var s=this,o;switch(r.type){case j.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(r.data.node,e);var a=r.data.node.id;return this.crossOriginIframeRootIdMap.set(e,a),this.patchRootIdOnNode(r.data.node,a),{timestamp:r.timestamp,type:j.IncrementalSnapshot,data:{source:F.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:r.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case j.Meta:case j.Load:case j.DomContentLoaded:return!1;case j.Plugin:return r;case j.Custom:return this.replaceIds(r.data.payload,e,["id","parentId","previousId","nextId"]),r;case j.IncrementalSnapshot:switch(r.data.source){case F.Mutation:return r.data.adds.forEach(function(u){s.replaceIds(u,e,["parentId","nextId","previousId"]),s.replaceIdOnNode(u.node,e);var c=s.crossOriginIframeRootIdMap.get(e);c&&s.patchRootIdOnNode(u.node,c)}),r.data.removes.forEach(function(u){s.replaceIds(u,e,["parentId","id"])}),r.data.attributes.forEach(function(u){s.replaceIds(u,e,["id"])}),r.data.texts.forEach(function(u){s.replaceIds(u,e,["id"])}),r;case F.Drag:case F.TouchMove:case F.MouseMove:return r.data.positions.forEach(function(u){s.replaceIds(u,e,["id"])}),r;case F.ViewportResize:return!1;case F.MediaInteraction:case F.MouseInteraction:case F.Scroll:case F.CanvasMutation:case F.Input:return this.replaceIds(r.data,e,["id"]),r;case F.StyleSheetRule:case F.StyleDeclaration:return this.replaceIds(r.data,e,["id"]),this.replaceStyleIds(r.data,e,["styleId"]),r;case F.Font:return r;case F.Selection:return r.data.ranges.forEach(function(u){s.replaceIds(u,e,["start","end"])}),r;case F.AdoptedStyleSheet:return this.replaceIds(r.data,e,["id"]),this.replaceStyleIds(r.data,e,["styleIds"]),(o=r.data.styles)==null||o.forEach(function(u){s.replaceStyleIds(u,e,["styleId"])}),r}}return!1},n.replace=function(e,r,s,o){for(var a=E(o),u;!(u=a()).done;){var c=u.value;!Array.isArray(r[c])&&typeof r[c]!="number"||(Array.isArray(r[c])?r[c]=e.getIds(s,r[c]):r[c]=e.getId(s,r[c]))}return r},n.replaceIds=function(e,r,s){return this.replace(this.crossOriginIframeMirror,e,r,s)},n.replaceStyleIds=function(e,r,s){return this.replace(this.crossOriginIframeStyleMirror,e,r,s)},n.replaceIdOnNode=function(e,r){var s=this;this.replaceIds(e,r,["id","rootId"]),"childNodes"in e&&e.childNodes.forEach(function(o){s.replaceIdOnNode(o,r)})},n.patchRootIdOnNode=function(e,r){var s=this;e.type!==rf.Document&&!e.rootId&&(e.rootId=r),"childNodes"in e&&e.childNodes.forEach(function(o){s.patchRootIdOnNode(o,r)})},t})(),S_=(function(){function t(i){x(this,"shadowDoms",new WeakSet),x(this,"mutationCb"),x(this,"scrollCb"),x(this,"bypassOptions"),x(this,"mirror"),x(this,"restoreHandlers",[]),this.mutationCb=i.mutationCb,this.scrollCb=i.scrollCb,this.bypassOptions=i.bypassOptions,this.mirror=i.mirror,this.init()}var n=t.prototype;return n.init=function(){this.reset(),this.patchAttachShadow(Element,document)},n.addShadowRoot=function(e,r){var s=this;if(Wr(e)&&!this.shadowDoms.has(e)){this.shadowDoms.add(e);var o=cf(z({},this.bypassOptions,{doc:r,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(function(){return o.disconnect()}),this.restoreHandlers.push(lf(z({},this.bypassOptions,{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(function(){e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&s.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,s.mirror.getId(V.host(e))),s.restoreHandlers.push(hf({mirror:s.mirror,stylesheetManager:s.bypassOptions.stylesheetManager},e))},0)}},n.observeAttachShadow=function(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)},n.patchAttachShadow=function(e,r){var s=this;this.restoreHandlers.push(Vt(e.prototype,"attachShadow",function(o){return function(a){var u=o.call(this,a),c=V.shadowRoot(this);return c&&tf(this)&&s.addShadowRoot(c,r),u}}))},n.reset=function(){this.restoreHandlers.forEach(function(e){try{e()}catch(r){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet},t})(),br="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",C_=typeof Uint8Array=="undefined"?[]:new Uint8Array(256),ki=0;ki>2],s+=br[(i[e]&3)<<4|i[e+1]>>4],s+=br[(i[e+1]&15)<<2|i[e+2]>>6],s+=br[i[e+2]&63];return r%3===2?s=s.substring(0,s.length-1)+"=":r%3===1&&(s=s.substring(0,s.length-2)+"=="),s},df=new Map;function I_(t,n){var i=df.get(t);return i||(i=new Map,df.set(t,i)),i.has(n)||i.set(n,[]),i.get(n)}var vf=function(t,n,i){if(!(!t||!(mf(t,n)||(typeof t=="undefined"?"undefined":P(t))==="object"))){var e=t.constructor.name,r=I_(i,e),s=r.indexOf(t);return s===-1&&(s=r.length,r.push(t)),s}};function Ri(t,n,i){if(T(t,Array))return t.map(function(v){return Ri(v,n,i)});if(t===null)return t;if(T(t,Float32Array)||T(t,Float64Array)||T(t,Int32Array)||T(t,Uint32Array)||T(t,Uint8Array)||T(t,Uint16Array)||T(t,Int16Array)||T(t,Int8Array)||T(t,Uint8ClampedArray)){var e=t.constructor.name;return{rr_type:e,args:[Object.values(t)]}}else if(T(t,ArrayBuffer)){var r=t.constructor.name,s=E_(t);return{rr_type:r,base64:s}}else if(T(t,DataView)){var o=t.constructor.name;return{rr_type:o,args:[Ri(t.buffer,n,i),t.byteOffset,t.byteLength]}}else if(T(t,HTMLImageElement)){var a=t.constructor.name,u=t.src;return{rr_type:a,src:u}}else if(T(t,HTMLCanvasElement)){var c="HTMLImageElement",l=t.toDataURL();return{rr_type:c,src:l}}else if(T(t,ImageData)){var f=t.constructor.name;return{rr_type:f,args:[Ri(t.data,n,i),t.width,t.height]}}else if(mf(t,n)||(typeof t=="undefined"?"undefined":P(t))==="object"){var p=t.constructor.name,g=vf(t,n,i);return{rr_type:p,index:g}}return t}var gf=function(t,n,i){return t.map(function(e){return Ri(e,n,i)})},mf=function(t,n){var i=["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"],e=i.filter(function(r){return typeof n[r]=="function"});return!!e.find(function(r){return T(t,n[r])})};function O_(t,n,i,e){for(var r=function(){var c=u.value;try{if(typeof n.CanvasRenderingContext2D.prototype[c]!="function")return"continue";var l=Vt(n.CanvasRenderingContext2D.prototype,c,function(p){return function(){for(var g=this,v=arguments.length,m=new Array(v),d=0;d1?u-1:0),l=1;l0&&(a.styles=u),this.adoptedStyleSheetCb(a)}},n.reset=function(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet},n.cleanupStylesheetsForRemovedNode=function(e){var r=this;try{if(e.nodeType===Node.DOCUMENT_NODE){var s=e;if(s.adoptedStyleSheets)for(var o=E(s.adoptedStyleSheets),a;!(a=o()).done;){var u=a.value;this.styleMirror.remove(u)}}if(e.nodeName==="STYLE"){var c=e;c.sheet&&this.styleMirror.remove(c.sheet)}if(e.nodeName==="LINK"&&e.rel==="stylesheet"){var l=e;l.sheet&&this.styleMirror.remove(l.sheet)}e.childNodes&&e.childNodes.forEach(function(f){r.cleanupStylesheetsForRemovedNode(f)})}catch(f){}},n.trackStylesheetInLinkElement=function(e){},t})(),P_=(function(){function t(){x(this,"nodeMap",new WeakMap),x(this,"active",!1)}var n=t.prototype;return n.inOtherBuffer=function(e,r){var s=this.nodeMap.get(e);return s&&Array.from(s).some(function(o){return o!==r})},n.add=function(e,r){var s=this;this.active||(this.active=!0,requestAnimationFrame(function(){s.nodeMap=new WeakMap,s.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(r))},n.destroy=function(){},t})();function $_(t){try{var n=new URL(t).origin;return n!=="null"?n:null}catch(i){return null}}function N_(t){if(!Array.isArray(t)||t.length===0)throw new Error("[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.");for(var n=new Set,i=0;i0&&(tr=N_(ke),tr.size===0&&(tr=void 0));var rr=pe?window.parent===window:!0,nr=!1;if(!rr)try{window.parent.document&&(nr=!1)}catch(Y){nr=!0}if(rr&&!n)throw new Error("emit function is required");if(!rr&&!nr)return function(){};G!==void 0&&W.mousemove===void 0&&(W.mousemove=G),Ge.reset();var ir=_===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:w!==void 0?w:{password:!0},sr=S===!0||S==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:S==="all",headMetaDescKeywords:S==="all",headTitleMutations:S==="all"}:S||{};Xy();var gt,Ur=0,Jp=function(Y){for(var $e=E(Ut||[]),$;!($=$e()).done;){var ne=$.value;ne.eventProcessor&&(Y=ne.eventProcessor(Y))}return R&&!nr&&(Y=R(Y)),Y};ve=function(Y,$e){var $,ne=Y;if(ne.timestamp=Ei(),($=Je[0])!=null&&$.isFrozen()&&ne.type!==j.FullSnapshot&&!(ne.type===j.IncrementalSnapshot&&ne.data.source===F.Mutation)&&Je.forEach(function(WC){return WC.unfreeze()}),rr)n==null||n(Jp(ne),$e);else if(nr){var ur={type:"rrweb",event:Jp(ne),origin:window.location.origin,isCheckout:$e};if(tr)for(var Ou=E(tr),rd;!(rd=Ou()).done;){var BC=rd.value;window.parent.postMessage(ur,BC)}else window.parent.postMessage(ur,"*")}if(ne.type===j.FullSnapshot)gt=ne,Ur=0;else if(ne.type===j.IncrementalSnapshot){if(ne.data.source===F.Mutation&&ne.data.isAttachIframe)return;Ur++;var zC=e&&Ur>=e,qC=i&&ne.timestamp-gt.timestamp>i;(zC||qC)&&Ai(!0)}};for(var xs=function(Y){ve({type:j.IncrementalSnapshot,data:z({source:F.Mutation},Y)})},Xp=function(Y){return ve({type:j.IncrementalSnapshot,data:z({source:F.Scroll},Y)})},Zp=function(Y){return ve({type:j.IncrementalSnapshot,data:z({source:F.CanvasMutation},Y)})},FC=function(Y){return ve({type:j.IncrementalSnapshot,data:z({source:F.AdoptedStyleSheet},Y)})},or=new T_({mutationCb:xs,adoptedStyleSheetCb:FC}),mt=new b_({mirror:Ge,mutationCb:xs,stylesheetManager:or,recordCrossOriginIframes:pe,wrappedEmit:ve}),UC=E(Ut||[]),Qp;!(Qp=UC()).done;){var ed=Qp.value;ed.getMirror&&ed.getMirror({nodeMirror:Ge,crossOriginIframeMirror:mt.crossOriginIframeMirror,crossOriginIframeStyleMirror:mt.crossOriginIframeStyleMirror})}var Eu=new P_;Yo=new M_({recordCanvas:De,mutationCb:Zp,win:window,blockClass:s,blockSelector:a,mirror:Ge,sampling:W.canvas,dataURLOptions:D});var ks=new S_({mutationCb:xs,scrollCb:Xp,bypassOptions:{blockClass:s,blockSelector:a,maskTextClass:g,maskTextSelector:m,inlineStylesheet:y,maskInputOptions:ir,dataURLOptions:D,maskTextFn:O,maskInputFn:b,recordCanvas:De,inlineImages:Dr,sampling:W,slimDOMOptions:sr,iframeManager:mt,stylesheetManager:or,canvasManager:Yo,keepIframeSrcFn:Fr,processedNodeManager:Eu},mirror:Ge});Ai=function(Y){if(Y===void 0&&(Y=!1),!!K){ve({type:j.Meta,data:{href:window.location.href,width:Yl(),height:Kl()}},Y),or.reset(),ks.init(),Je.forEach(function($){return $.lock()});var $e=ev(document,{mirror:Ge,blockClass:s,blockSelector:a,maskTextClass:g,maskTextSelector:m,inlineStylesheet:y,maskAllInputs:ir,maskTextFn:O,maskInputFn:b,slimDOM:sr,dataURLOptions:D,recordCanvas:De,inlineImages:Dr,onSerialize:function($){Zl($,Ge)&&mt.addIframe($),Ql($,Ge)&&or.trackLinkElement($),Ho($)&&ks.addShadowRoot(V.shadowRoot($),document)},onIframeLoad:function($,ne){mt.attachIframe($,ne),ks.observeAttachShadow($)},onStylesheetLoad:function($,ne){or.attachLinkElement($,ne)},keepIframeSrcFn:Fr});if(!$e)return console.warn("Failed to snapshot the document");ve({type:j.FullSnapshot,data:{node:$e,initialOffset:Hl(window)}},Y),Je.forEach(function($){return $.unlock()}),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&or.adoptStyleSheets(document.adoptedStyleSheets,Ge.getId(document))}};try{var ar=[],td=function(Y){var $e;return H(w_)({mutationCb:xs,mousemoveCb:function($,ne){return ve({type:j.IncrementalSnapshot,data:{source:ne,positions:$}})},mouseInteractionCb:function($){return ve({type:j.IncrementalSnapshot,data:z({source:F.MouseInteraction},$)})},scrollCb:Xp,viewportResizeCb:function($){return ve({type:j.IncrementalSnapshot,data:z({source:F.ViewportResize},$)})},inputCb:function($){return ve({type:j.IncrementalSnapshot,data:z({source:F.Input},$)})},mediaInteractionCb:function($){return ve({type:j.IncrementalSnapshot,data:z({source:F.MediaInteraction},$)})},styleSheetRuleCb:function($){return ve({type:j.IncrementalSnapshot,data:z({source:F.StyleSheetRule},$)})},styleDeclarationCb:function($){return ve({type:j.IncrementalSnapshot,data:z({source:F.StyleDeclaration},$)})},canvasMutationCb:Zp,fontCb:function($){return ve({type:j.IncrementalSnapshot,data:z({source:F.Font},$)})},selectionCb:function($){ve({type:j.IncrementalSnapshot,data:z({source:F.Selection},$)})},customElementCb:function($){ve({type:j.IncrementalSnapshot,data:z({source:F.CustomElement},$)})},blockClass:s,ignoreClass:c,ignoreSelector:f,maskTextClass:g,maskTextSelector:m,maskInputOptions:ir,inlineStylesheet:y,sampling:W,recordDOM:K,recordCanvas:De,inlineImages:Dr,userTriggeredOnInput:We,collectFonts:X,doc:Y,maskInputFn:b,maskTextFn:O,keepIframeSrcFn:Fr,blockSelector:a,slimDOMOptions:sr,dataURLOptions:D,mirror:Ge,iframeManager:mt,stylesheetManager:or,shadowDomManager:ks,processedNodeManager:Eu,canvasManager:Yo,ignoreCSSAttributes:Os,plugins:(($e=Ut==null?void 0:Ut.filter(function($){return $.observer}))==null?void 0:$e.map(function($){return{observer:$.observer,options:$.options,callback:function(ne){return ve({type:j.Plugin,data:{plugin:$.name,payload:ne}})}}}))||[]},M)};mt.addLoadListener(function(Y){try{var $e=Y.contentDocument,$=td($e);ar.push($);var ne=mt.getObserverCleanup(Y);mt.setObserverCleanup(Y,function(){if(ne)try{ne()}catch(Ou){}try{$();var ur=ar.indexOf($);ur!==-1&&ar.splice(ur,1),a_($e)}catch(Ou){}})}catch(ur){console.warn(ur)}});var Iu=function(){Ai(),ar.push(td(document)),Mi=!0};return document.readyState==="interactive"||document.readyState==="complete"?Iu():(ar.push(Te("DOMContentLoaded",function(){ve({type:j.DomContentLoaded,data:{}}),ot==="DOMContentLoaded"&&Iu()})),ar.push(Te("load",function(){ve({type:j.Load,data:{}}),ot==="load"&&Iu()},window))),function(){ar.forEach(function(Y){try{Y()}catch($){var $e=String($).toLowerCase();$e.includes("cross-origin")||console.warn($)}}),Eu.destroy(),Mi=!1,o_()}}catch(Y){console.warn(Y)}}Ct.addCustomEvent=function(t,n){if(!Mi)throw new Error("please add custom event after start recording");ve({type:j.Custom,data:{tag:t,payload:n}})},Ct.freezePage=function(){Je.forEach(function(t){return t.freeze()})},Ct.takeFullSnapshot=function(t){if(!Mi)throw new Error("please take full snapshot after start recording");Ai(t)},Ct.mirror=Ge;var Sf;(function(t){t[t.NotStarted=0]="NotStarted",t[t.Running=1]="Running",t[t.Stopped=2]="Stopped"})(Sf||(Sf={})),Ct.addCustomEvent,Ct.freezePage,Ct.takeFullSnapshot;var Cf={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Ef={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},Ti={},L_=function(){return!!globalThis.Zone};function Xo(t){if(Ti[t])return Ti[t];var n=globalThis[t],i=n.prototype,e=t in Cf?Cf[t]:void 0,r=!!(e&&e.every(function(l){var f,p;return!!((p=(f=Object.getOwnPropertyDescriptor(i,l))==null?void 0:f.get)!=null&&p.toString().includes("[native code]"))})),s=t in Ef?Ef[t]:void 0,o=!!(s&&s.every(function(l){var f;return typeof i[l]=="function"&&((f=i[l])==null?void 0:f.toString().includes("[native code]"))}));if(r&&o&&!L_())return Ti[t]=n.prototype,n.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return n.prototype;var c=u[t].prototype;return document.body.removeChild(a),c?Ti[t]=c:i}catch(l){return i}}var Zo={};function Et(t,n,i){var e,r=t+"."+String(i);if(Zo[r])return Zo[r].call(n);var s=Xo(t),o=(e=Object.getOwnPropertyDescriptor(s,i))==null?void 0:e.get;return o?(Zo[r]=o,o.call(n)):n[i]}var Qo={};function If(t,n,i){var e=t+"."+String(i);if(Qo[e])return Qo[e].bind(n);var r=Xo(t),s=r[i];return typeof s!="function"?n[i]:(Qo[e]=s,s.bind(n))}function D_(t){return Et("Node",t,"childNodes")}function F_(t){return Et("Node",t,"parentNode")}function U_(t){return Et("Node",t,"parentElement")}function B_(t){return Et("Node",t,"textContent")}function z_(t,n){return If("Node",t,"contains")(n)}function q_(t){return If("Node",t,"getRootNode")()}function W_(t){return!t||!("host"in t)?null:Et("ShadowRoot",t,"host")}function G_(t){return t.styleSheets}function V_(t){return!t||!("shadowRoot"in t)?null:Et("Element",t,"shadowRoot")}function j_(t,n){return Et("Element",t,"querySelector")(n)}function H_(t,n){return Et("Element",t,"querySelectorAll")(n)}function K_(){return Xo("MutationObserver").constructor}function Y_(t,n,i){try{if(!(n in t))return function(){};var e=t[n],r=i(e);return typeof r=="function"&&(r.prototype=r.prototype||{},Object.defineProperties(r,{__rrweb_original__:{enumerable:!1,value:e}})),t[n]=r,function(){t[n]=e}}catch(s){return function(){}}}var Of={childNodes:D_,parentNode:F_,parentElement:U_,textContent:B_,contains:z_,getRootNode:q_,host:W_,styleSheets:G_,shadowRoot:V_,querySelector:j_,querySelectorAll:H_,mutationObserver:K_,patch:Y_};function ea(t,n,i){if(!t)return!1;if(t.nodeType!==t.ELEMENT_NODE)return ea(Of.parentNode(t),n);for(var e=t.classList.length;e--;){var r=t.classList[e];if(n.test(r))return!0}return ea(Of.parentNode(t),n)}function J_(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function X_(t){if(t.__esModule)return t;var n=t.default;if(typeof n=="function"){var i=function e(){return T(this,e)?Reflect.construct(n,arguments,this.constructor):n.apply(this,arguments)};i.prototype=n.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})}),i}var ta={exports:{}},ae=String,xf=function(){return{isColorSupported:!1,reset:ae,bold:ae,dim:ae,italic:ae,underline:ae,inverse:ae,hidden:ae,strikethrough:ae,black:ae,red:ae,green:ae,yellow:ae,blue:ae,magenta:ae,cyan:ae,white:ae,gray:ae,bgBlack:ae,bgRed:ae,bgGreen:ae,bgYellow:ae,bgBlue:ae,bgMagenta:ae,bgCyan:ae,bgWhite:ae}};ta.exports=xf(),ta.exports.createColors=xf;var Z_=ta.exports,Q_={},ew=Object.freeze(Object.defineProperty({__proto__:null,default:Q_},Symbol.toStringTag,{value:"Module"})),_e=X_(ew),kf=Z_,Rf=_e,ra=(function(t){ue(n,t);function n(e,r,s,o,a,u){var c;return c=t.call(this,e)||this,c.name="CssSyntaxError",c.reason=e,a&&(c.file=a),o&&(c.source=o),u&&(c.plugin=u),typeof r!="undefined"&&typeof s!="undefined"&&(typeof r=="number"?(c.line=r,c.column=s):(c.line=r.line,c.column=r.column,c.endLine=s.line,c.endColumn=s.column)),c.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(c,n),c}var i=n.prototype;return i.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},i.showSourceCode=function(r){var s=this;if(!this.source)return"";var o=this.source;r==null&&(r=kf.isColorSupported),Rf&&r&&(o=Rf(o));var a=o.split(/\r?\n/),u=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),l=String(c).length,f,p;if(r){var g=kf.createColors(!0),v=g.bold,m=g.gray,d=g.red;f=function(y){return v(d(y))},p=function(y){return m(y)}}else f=p=function(y){return y};return a.slice(u,c).map(function(y,_){var w=u+1+_,S=" "+(" "+w).slice(-l)+" | ";if(w===s.line){var b=p(S.replace(/\d/g," "))+y.slice(0,s.column-1).replace(/[^\t]/g," ");return f(">")+p(S)+y+"\n "+b+f("^")}return" "+p(S)+y}).join("\n")},i.toString=function(){var r=this.showSourceCode();return r&&(r="\n\n"+r+"\n"),this.name+": "+this.message+r},n})(zr(Error)),na=ra;ra.default=ra;var It={};It.isClean=Symbol("isClean"),It.my=Symbol("my");var Af={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function tw(t){return t[0].toUpperCase()+t.slice(1)}var ia=(function(){function t(i){this.builder=i}var n=t.prototype;return n.atrule=function(e,r){var s="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?s+=e.raws.afterName:o&&(s+=" "),e.nodes)this.block(e,s+o);else{var a=(e.raws.between||"")+(r?";":"");this.builder(s+o+a,e)}},n.beforeAfter=function(e,r){var s;e.type==="decl"?s=this.raw(e,null,"beforeDecl"):e.type==="comment"?s=this.raw(e,null,"beforeComment"):r==="before"?s=this.raw(e,null,"beforeRule"):s=this.raw(e,null,"beforeClose");for(var o=e.parent,a=0;o&&o.type!=="root";)a+=1,o=o.parent;if(s.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var c=0;c0&&e.nodes[r].type==="comment";)r-=1;for(var s=this.raw(e,"semicolon"),o=0;o0&&typeof s.raws.after!="undefined")return r=s.raws.after,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawBeforeComment=function(e,r){var s;return e.walkComments(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeDecl"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeDecl=function(e,r){var s;return e.walkDecls(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeRule"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeOpen=function(e){var r;return e.walk(function(s){if(s.type!=="decl"&&(r=s.raws.between,typeof r!="undefined"))return!1}),r},n.rawBeforeRule=function(e){var r;return e.walk(function(s){if(s.nodes&&(s.parent!==e||e.first!==s)&&typeof s.raws.before!="undefined")return r=s.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawColon=function(e){var r;return e.walkDecls(function(s){if(typeof s.raws.between!="undefined")return r=s.raws.between.replace(/[^\s:]/g,""),!1}),r},n.rawEmptyBody=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length===0&&(r=s.raws.after,typeof r!="undefined"))return!1}),r},n.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var r;return e.walk(function(s){var o=s.parent;if(o&&o!==e&&o.parent&&o.parent===e&&typeof s.raws.before!="undefined"){var a=s.raws.before.split("\n");return r=a[a.length-1],r=r.replace(/\S/g,""),!1}}),r},n.rawSemicolon=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length&&s.last.type==="decl"&&(r=s.raws.semicolon,typeof r!="undefined"))return!1}),r},n.rawValue=function(e,r){var s=e[r],o=e.raws[r];return o&&o.value===s?o.raw:s},n.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},n.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},n.stringify=function(e,r){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,r)},t})(),Mf=ia;ia.default=ia;var rw=Mf;function sa(t,n){var i=new rw(n);i.stringify(t)}var Pi=sa;sa.default=sa;var $i=It.isClean,nw=It.my,iw=na,sw=Mf,ow=Pi;function oa(t,n){var i=new t.constructor;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&e!=="proxyCache"){var r=t[e],s=typeof r=="undefined"?"undefined":P(r);e==="parent"&&s==="object"?n&&(i[e]=n):e==="source"?i[e]=r:Array.isArray(r)?i[e]=r.map(function(o){return oa(o,i)}):(s==="object"&&r!==null&&(r=oa(r)),i[e]=r)}return i}var aa=(function(){function t(i){i===void 0&&(i={}),this.raws={},this[$i]=!1,this[nw]=!0;for(var e in i)if(e==="nodes"){this.nodes=[];for(var r=E(i[e]),s;!(s=r()).done;){var o=s.value;typeof o.clone=="function"?this.append(o.clone()):this.append(o)}}else this[e]=i[e]}var n=t.prototype;return n.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var r=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+r.input.from+":"+r.start.line+":"+r.start.column+"$&")}return e},n.after=function(e){return this.parent.insertAfter(this,e),this},n.assign=function(e){e===void 0&&(e={});for(var r in e)this[r]=e[r];return this},n.before=function(e){return this.parent.insertBefore(this,e),this},n.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},n.clone=function(e){e===void 0&&(e={});var r=oa(this);for(var s in e)r[s]=e[s];return r},n.cloneAfter=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertAfter(this,r),r},n.cloneBefore=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertBefore(this,r),r},n.error=function(e,r){if(r===void 0&&(r={}),this.source){var s=this.rangeBy(r),o=s.end,a=s.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:o.column,line:o.line},r)}return new iw(e)},n.getProxyProcessor=function(){return{get:function(r,s){return s==="proxyOf"?r:s==="root"?function(){return r.root().toProxy()}:r[s]},set:function(r,s,o){return r[s]===o||(r[s]=o,(s==="prop"||s==="value"||s==="name"||s==="params"||s==="important"||s==="text")&&r.markDirty()),!0}}},n.markDirty=function(){if(this[$i]){this[$i]=!1;for(var e=this;e=e.parent;)e[$i]=!1}},n.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},n.positionBy=function(e,r){var s=this.source.start;if(e.index)s=this.positionInside(e.index,r);else if(e.word){r=this.toString();var o=r.indexOf(e.word);o!==-1&&(s=this.positionInside(o,r))}return s},n.positionInside=function(e,r){for(var s=r||this.toString(),o=this.source.start.column,a=this.source.start.line,u=0;u-1&&o>-1&&(this.annotation=this.getAnnotationURL(e.substring(s,o)))}},n.loadFile=function(e){if(this.root=ca(e),fw(e))return this.mapFile=e,hw(e,"utf-8").toString().trim()},n.loadMap=function(e,r){if(r===!1)return!1;if(r){if(typeof r=="string")return r;if(typeof r=="function"){var s=r(e);if(s){var o=this.loadFile(s);if(!o)throw new Error("Unable to load previous source map: "+s.toString());return o}}else{if(T(r,Tf))return Pf.fromSourceMap(r).toString();if(T(r,Pf))return r.toString();if(this.isMap(r))return JSON.stringify(r);throw new Error("Unsupported previous source map format: "+r.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=pw(ca(e),a)),this.loadFile(a)}}},n.startWith=function(e,r){return e?e.substr(0,r.length)===r:!1},n.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},t})(),$f=la;la.default=la;var vw=_e.SourceMapConsumer,gw=_e.SourceMapGenerator,Nf=_e.fileURLToPath,Di=_e.pathToFileURL,fa=_e.isAbsolute,ha=_e.resolve,mw=lw.nanoid,pa=_e,Lf=na,yw=$f,da=Symbol("fromOffsetCache"),_w=!!(vw&&gw),Df=!!(ha&&fa),Fi=(function(){function t(i,e){if(e===void 0&&(e={}),i===null||typeof i=="undefined"||(typeof i=="undefined"?"undefined":P(i))==="object"&&!i.toString)throw new Error("PostCSS received "+i+" instead of CSS string");if(this.css=i.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!Df||/^\w+:\/\//.test(e.from)||fa(e.from)?this.file=e.from:this.file=ha(e.from)),Df&&_w){var r=new yw(this.css,e);if(r.text){this.map=r;var s=r.consumer().file;!this.file&&s&&(this.file=this.mapResolve(s))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var n=t.prototype;return n.error=function(e,r,s,o){o===void 0&&(o={});var a,u,c;if(r&&(typeof r=="undefined"?"undefined":P(r))==="object"){var l=r,f=s;if(typeof l.offset=="number"){var p=this.fromOffset(l.offset);r=p.line,s=p.col}else r=l.line,s=l.column;if(typeof f.offset=="number"){var g=this.fromOffset(f.offset);u=g.line,c=g.col}else u=f.line,c=f.column}else if(!s){var v=this.fromOffset(r);r=v.line,s=v.col}var m=this.origin(r,s,u,c);return m?a=new Lf(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,o.plugin):a=new Lf(e,u===void 0?r:{column:s,line:r},u===void 0?s:{column:c,line:u},this.css,this.file,o.plugin),a.input={column:s,endColumn:c,endLine:u,line:r,source:this.css},this.file&&(Di&&(a.input.url=Di(this.file).toString()),a.input.file=this.file),a},n.fromOffset=function(e){var r,s;if(this[da])s=this[da];else{var o=this.css.split("\n");s=new Array(o.length);for(var a=0,u=0,c=o.length;u=r)l=s.length-1;else for(var f=s.length-2,p;l>1),e=s[p+1])l=p+1;else{l=p;break}return{col:e-s[l]+1,line:l+1}},n.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:ha(this.map.consumer().sourceRoot||this.map.root||".",e)},n.origin=function(e,r,s,o){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:r,line:e});if(!u.source)return!1;var c;typeof s=="number"&&(c=a.originalPositionFor({column:o,line:s}));var l;fa(u.source)?l=Di(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Di(this.map.mapFile));var f={column:u.column,endColumn:c&&c.column,endLine:c&&c.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(Nf)f.file=Nf(l);else throw new Error("file: protocol is not available in this PostCSS build");var p=a.sourceContentFor(u.source);return p&&(f.source=p),f},n.toJSON=function(){for(var e={},r=0,s=["hasBOM","css","file","id"];r=0;r--)e=this.root.nodes[r],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(r);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},n.generate=function(){if(this.clearAnnotation(),Sw&&bw&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(r){e+=r}),[e]},n.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Bi.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Bi({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},n.generateString=function(){var e=this;this.css="",this.map=new Bi({file:this.outputFile(),ignoreInvalidMapping:!0});var r=1,s=1,o="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,c;this.stringify(this.root,function(l,f,p){if(e.css+=l,f&&p!=="end"&&(a.generated.line=r,a.generated.column=s-1,f.source&&f.source.start?(a.source=e.sourcePath(f),a.original.line=f.source.start.line,a.original.column=f.source.start.column-1,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(r+=u.length,c=l.lastIndexOf("\n"),s=l.length-c):s+=l.length,f&&p!=="start"){var g=f.parent||{raws:{}},v=f.type==="decl"||f.type==="atrule"&&!f.nodes;(!v||f!==g.last||g.raws.semicolon)&&(f.source&&f.source.end?(a.source=e.sourcePath(f),a.original.line=f.source.end.line,a.original.column=f.source.end.column-1,a.generated.line=r,a.generated.column=s-2,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,a.generated.line=r,a.generated.column=s-1,e.map.addMapping(a)))}})},n.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},n.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(r){return r.inline}):!0},n.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},n.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},n.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},n.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var r=this.memoizedPaths.get(e);if(r)return r;var s=this.opts.to?zi(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(s=zi(Bf(s,this.mapOpts.annotation)));var o=Uf(s,e);return this.memoizedPaths.set(e,o),o},n.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(s){if(s.source&&s.source.input.map){var o=s.source.input.map;e.previousMaps.includes(o)||e.previousMaps.push(o)}});else{var r=new ww(this.originalCSS,this.opts);r.map&&this.previousMaps.push(r.map)}return this.previousMaps},n.setSourcesContent=function(){var e=this,r={};if(this.root)this.root.walk(function(o){if(o.source){var a=o.source.input.from;if(a&&!r[a]){r[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,o.source.input.css)}}});else if(this.css){var s=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(s,this.css)}},n.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},n.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},n.toFileUrl=function(e){var r=this.memoizedFileURLs.get(e);if(r)return r;if(qf){var s=qf(e).toString();return this.memoizedFileURLs.set(e,s),s}else throw new Error("`map.absolute` option is not available in this PostCSS build")},n.toUrl=function(e){var r=this.memoizedURLs.get(e);if(r)return r;zf==="\\"&&(e=e.replace(/\\/g,"/"));var s=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,s),s},t})(),Wf=Cw,Ew=Ni,va=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="comment",e}return n})(Ew),qi=va;va.default=va;var Gf=It.isClean,Vf=It.my,jf=Li,Hf=qi,Iw=Ni,Kf,ga,ma,Yf;function Jf(t){return t.map(function(n){return n.nodes&&(n.nodes=Jf(n.nodes)),delete n.source,n})}function Xf(t){if(t[Gf]=!1,t.proxyOf.nodes)for(var n=E(t.proxyOf.nodes),i;!(i=n()).done;){var e=i.value;Xf(e)}}var lt=(function(t){ue(n,t);function n(){return t.apply(this,arguments)||this}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?c-1:0),f=1;f=r&&(this.indexes[o]=s-1);return this.markDirty(),this},i.replaceValues=function(r,s,o){return o||(o=s,s={}),this.walkDecls(function(a){s.props&&!s.props.includes(a.prop)||s.fast&&!a.value.includes(s.fast)||(a.value=a.value.replace(r,o))}),this.markDirty(),this},i.some=function(r){return this.nodes.some(r)},i.walk=function(r){return this.each(function(s,o){var a;try{a=r(s,o)}catch(u){throw s.addToError(u)}return a!==!1&&s.walk&&(a=s.walk(r)),a})},i.walkAtRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="atrule"&&r.test(o.name))return s(o,a)}):this.walk(function(o,a){if(o.type==="atrule"&&o.name===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="atrule")return s(o,a)}))},i.walkComments=function(r){return this.walk(function(s,o){if(s.type==="comment")return r(s,o)})},i.walkDecls=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="decl"&&r.test(o.prop))return s(o,a)}):this.walk(function(o,a){if(o.type==="decl"&&o.prop===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="decl")return s(o,a)}))},i.walkRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="rule"&&r.test(o.selector))return s(o,a)}):this.walk(function(o,a){if(o.type==="rule"&&o.selector===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="rule")return s(o,a)}))},ie(n,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),n})(Iw);lt.registerParse=function(t){Kf=t},lt.registerRule=function(t){ga=t},lt.registerAtRule=function(t){ma=t},lt.registerRoot=function(t){Yf=t};var jt=lt;lt.default=lt,lt.rebuild=function(t){t.type==="atrule"?Object.setPrototypeOf(t,ma.prototype):t.type==="rule"?Object.setPrototypeOf(t,ga.prototype):t.type==="decl"?Object.setPrototypeOf(t,jf.prototype):t.type==="comment"?Object.setPrototypeOf(t,Hf.prototype):t.type==="root"&&Object.setPrototypeOf(t,Yf.prototype),t[Vf]=!0,t.nodes&&t.nodes.forEach(function(n){lt.rebuild(n)})};var Ow=jt,Zf,Qf,fn=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,z({type:"document"},e))||this,r.nodes||(r.nodes=[]),r}var i=n.prototype;return i.toResult=function(r){r===void 0&&(r={});var s=new Zf(new Qf,this,r);return s.stringify()},n})(Ow);fn.registerLazyResult=function(t){Zf=t},fn.registerProcessor=function(t){Qf=t};var ya=fn;fn.default=fn;var eh={},th=function(n){eh[n]||(eh[n]=!0,typeof console!="undefined"&&console.warn&&console.warn(n))},_a=(function(){function t(i,e){if(e===void 0&&(e={}),this.type="warning",this.text=i,e.node&&e.node.source){var r=e.node.rangeBy(e);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(var s in e)this[s]=e[s]}var n=t.prototype;return n.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},t})(),rh=_a;_a.default=_a;var xw=rh,wa=(function(){function t(i,e,r){this.processor=i,this.messages=[],this.root=e,this.opts=r,this.css=void 0,this.map=void 0}var n=t.prototype;return n.toString=function(){return this.css},n.warn=function(e,r){r===void 0&&(r={}),r.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(r.plugin=this.lastPlugin.postcssPlugin);var s=new xw(e,r);return this.messages.push(s),s},n.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},ie(t,[{key:"content",get:function(){return this.css}}]),t})(),ba=wa;wa.default=wa;var Sa=39,nh=34,Wi=92,ih=47,Gi=10,hn=32,Vi=12,ji=9,Hi=13,kw=91,Rw=93,Aw=40,Mw=41,Tw=123,Pw=125,$w=59,Nw=42,Lw=58,Dw=64,Ki=/[\t\n\f\r "#'()/;[\\\]{}]/g,Yi=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,Fw=/.[\r\n"'(/\\]/,sh=/[\da-f]/i,Uw=function(n,i){i===void 0&&(i={});var e=n.css.valueOf(),r=i.ignoreErrors,s,o,a,u,c,l,f,p,g,v,m=e.length,d=0,y=[],_=[];function w(){return d}function S(R){throw n.error("Unclosed "+R,d)}function b(){return _.length===0&&d>=m}function O(R){if(_.length)return _.pop();if(!(d>=m)){var N=R?R.ignoreUnclosed:!1;switch(s=e.charCodeAt(d),s){case Gi:case hn:case ji:case Hi:case Vi:{o=d;do o+=1,s=e.charCodeAt(o);while(s===hn||s===Gi||s===ji||s===Hi||s===Vi);v=["space",e.slice(d,o)],d=o-1;break}case kw:case Rw:case Tw:case Pw:case Lw:case $w:case Mw:{var W=String.fromCharCode(s);v=[W,W,d];break}case Aw:{if(p=y.length?y.pop()[1]:"",g=e.charCodeAt(d+1),p==="url"&&g!==Sa&&g!==nh&&g!==hn&&g!==Gi&&g!==ji&&g!==Vi&&g!==Hi){o=d;do{if(l=!1,o=e.indexOf(")",o+1),o===-1)if(r||N){o=d;break}else S("bracket");for(f=o;e.charCodeAt(f-1)===Wi;)f-=1,l=!l}while(l);v=["brackets",e.slice(d,o+1),d,o],d=o}else o=e.indexOf(")",d+1),u=e.slice(d,o+1),o===-1||Fw.test(u)?v=["(","(",d]:(v=["brackets",u,d,o],d=o);break}case Sa:case nh:{a=s===Sa?"'":'"',o=d;do{if(l=!1,o=e.indexOf(a,o+1),o===-1)if(r||N){o=d+1;break}else S("string");for(f=o;e.charCodeAt(f-1)===Wi;)f-=1,l=!l}while(l);v=["string",e.slice(d,o+1),d,o],d=o;break}case Dw:{Ki.lastIndex=d+1,Ki.test(e),Ki.lastIndex===0?o=e.length-1:o=Ki.lastIndex-2,v=["at-word",e.slice(d,o+1),d,o],d=o;break}case Wi:{for(o=d,c=!0;e.charCodeAt(o+1)===Wi;)o+=1,c=!c;if(s=e.charCodeAt(o+1),c&&s!==ih&&s!==hn&&s!==Gi&&s!==ji&&s!==Hi&&s!==Vi&&(o+=1,sh.test(e.charAt(o)))){for(;sh.test(e.charAt(o+1));)o+=1;e.charCodeAt(o+1)===hn&&(o+=1)}v=["word",e.slice(d,o+1),d,o],d=o;break}default:{s===ih&&e.charCodeAt(d+1)===Nw?(o=e.indexOf("*/",d+2)+1,o===0&&(r||N?o=e.length:S("comment")),v=["comment",e.slice(d,o+1),d,o],d=o):(Yi.lastIndex=d+1,Yi.test(e),Yi.lastIndex===0?o=e.length-1:o=Yi.lastIndex-2,v=["word",e.slice(d,o+1),d,o],y.push(v),d=o);break}}return d++,v}}function M(R){_.push(R)}return{back:M,endOfFile:b,nextToken:O,position:w}},oh=jt,Ji=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,e)||this,r.type="atrule",r}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?s.raws.before=this.nodes[1].raws.before:delete s.raws.before;else if(this.first!==s)for(var u=E(a),c;!(c=u()).done;){var l=c.value;l.raws.before=s.raws.before}}return a},i.removeChild=function(r,s){var o=this.index(r);return!s&&o===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[o].raws.before),t.prototype.removeChild.call(this,r)},i.toResult=function(r){r===void 0&&(r={});var s=new uh(new ch,this,r);return s.stringify()},n})(ah);Sr.registerLazyResult=function(t){uh=t},Sr.registerProcessor=function(t){ch=t};var pn=Sr;Sr.default=Sr,ah.registerRoot(Sr);var dn={comma:function(n){return dn.split(n,[","],!0)},space:function(n){var i=[" ","\n"," "];return dn.split(n,i)},split:function(n,i,e){for(var r=[],s="",o=!1,a=0,u=!1,c="",l=!1,f=E(n),p;!(p=f()).done;){var g=p.value;l?l=!1:g==="\\"?l=!0:u?g===c&&(u=!1):g==='"'||g==="'"?(u=!0,c=g):g==="("?a+=1:g===")"?a>0&&(a-=1):a===0&&i.includes(g)&&(o=!0),o?(s!==""&&r.push(s.trim()),s="",o=!1):s+=g}return(e||s!=="")&&r.push(s.trim()),r}},lh=dn;dn.default=dn;var fh=jt,Bw=lh,Xi=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return ie(n,[{key:"selectors",get:function(){return Bw.comma(this.selector)},set:function(e){var r=this.selector?this.selector.match(/,\s*/):null,s=r?r[0]:","+this.raw("between","beforeOpen");this.selector=e.join(s)}}]),n})(fh),Ea=Xi;Xi.default=Xi,fh.registerRule(Xi);var zw=Li,qw=Uw,Ww=qi,Gw=Ca,Vw=pn,hh=Ea,ph={empty:!0,space:!0};function jw(t){for(var n=t.length-1;n>=0;n--){var i=t[n],e=i[3]||i[2];if(e)return e}}var Hw=(function(){function t(i){this.input=i,this.root=new Vw,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:i,start:{column:1,line:1,offset:0}}}var n=t.prototype;return n.atrule=function(e){var r=new Gw;r.name=e[1].slice(1),r.name===""&&this.unnamedAtrule(r,e),this.init(r,e[2]);for(var s,o,a,u=!1,c=!1,l=[],f=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),s=e[0],s==="("||s==="["?f.push(s==="("?")":"]"):s==="{"&&f.length>0?f.push("}"):s===f[f.length-1]&&f.pop(),f.length===0)if(s===";"){r.source.end=this.getPosition(e[2]),r.source.end.offset++,this.semicolon=!0;break}else if(s==="{"){c=!0;break}else if(s==="}"){if(l.length>0){for(a=l.length-1,o=l[a];o&&o[0]==="space";)o=l[--a];o&&(r.source.end=this.getPosition(o[3]||o[2]),r.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}r.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(r.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(r,"params",l),u&&(e=l[l.length-1],r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++,this.spaces=r.raws.between,r.raws.between="")):(r.raws.afterName="",r.params=""),c&&(r.nodes=[],this.current=r)},n.checkMissedSemicolon=function(e){var r=this.colon(e);if(r!==!1){for(var s=0,o,a=r-1;a>=0&&(o=e[a],!(o[0]!=="space"&&(s+=1,s===2)));a--);throw this.input.error("Missed semicolon",o[0]==="word"?o[3]+1:o[2])}},n.colon=function(e){for(var r=0,s,o,a,u=E(e.entries()),c;!(c=u()).done;){var l=c.value,f=l[0],p=l[1];if(s=p,o=s[0],o==="("&&(r+=1),o===")"&&(r-=1),r===0&&o===":")if(!a)this.doubleColon(s);else{if(a[0]==="word"&&a[1]==="progid")continue;return f}a=s}return!1},n.comment=function(e){var r=new Ww;this.init(r,e[2]),r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++;var s=e[1].slice(2,-2);if(/^\s*$/.test(s))r.text="",r.raws.left=s,r.raws.right="";else{var o=s.match(/^(\s*)([^]*\S)(\s*)$/);r.text=o[2],r.raws.left=o[1],r.raws.right=o[3]}},n.createTokenizer=function(){this.tokenizer=qw(this.input)},n.decl=function(e,r){var s=new zw;this.init(s,e[0][2]);var o=e[e.length-1];for(o[0]===";"&&(this.semicolon=!0,e.pop()),s.source.end=this.getPosition(o[3]||o[2]||jw(e)),s.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),s.raws.before+=e.shift()[1];for(s.source.start=this.getPosition(e[0][2]),s.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;s.prop+=e.shift()[1]}s.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){s.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),s.raws.between+=u[1];(s.prop[0]==="_"||s.prop[0]==="*")&&(s.raws.before+=s.prop[0],s.prop=s.prop.slice(1));for(var c=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)c.push(e.shift());this.precheckMissedSemicolon(e);for(var f=e.length-1;f>=0;f--){if(u=e[f],u[1].toLowerCase()==="!important"){s.important=!0;var p=this.stringFrom(e,f);p=this.spacesFromEnd(e)+p,p!==" !important"&&(s.raws.important=p);break}else if(u[1].toLowerCase()==="important"){for(var g=e.slice(0),v="",m=f;m>0;m--){var d=g[m][0];if(v.trim().indexOf("!")===0&&d!=="space")break;v=g.pop()[1]+v}v.trim().indexOf("!")===0&&(s.important=!0,s.raws.important=v,e=g)}if(u[0]!=="space"&&u[0]!=="comment")break}var y=e.some(function(_){return _[0]!=="space"&&_[0]!=="comment"});y&&(s.raws.between+=c.map(function(_){return _[1]}).join(""),c=[]),this.raw(s,"value",c.concat(e),r),s.value.includes(":")&&!r&&this.checkMissedSemicolon(e)},n.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},n.emptyRule=function(e){var r=new hh;this.init(r,e[2]),r.selector="",r.raws.between="",this.current=r},n.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},n.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},n.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var r=this.current.nodes[this.current.nodes.length-1];r&&r.type==="rule"&&!r.raws.ownSemicolon&&(r.raws.ownSemicolon=this.spaces,this.spaces="")}},n.getPosition=function(e){var r=this.input.fromOffset(e);return{column:r.col,line:r.line,offset:e}},n.init=function(e,r){this.current.push(e),e.source={input:this.input,start:this.getPosition(r)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},n.other=function(e){for(var r=!1,s=null,o=!1,a=null,u=[],c=e[1].startsWith("--"),l=[],f=e;f;){if(s=f[0],l.push(f),s==="("||s==="[")a||(a=f),u.push(s==="("?")":"]");else if(c&&o&&s==="{")a||(a=f),u.push("}");else if(u.length===0)if(s===";")if(o){this.decl(l,c);return}else break;else if(s==="{"){this.rule(l);return}else if(s==="}"){this.tokenizer.back(l.pop()),r=!0;break}else s===":"&&(o=!0);else s===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));f=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(r=!0),u.length>0&&this.unclosedBracket(a),r&&o){if(!c)for(;l.length&&(f=l[l.length-1][0],!(f!=="space"&&f!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,c)}else this.unknownWord(l)},n.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},n.precheckMissedSemicolon=function(){},n.raw=function(e,r,s,o){for(var a,u,c=s.length,l="",f=!0,p,g,v=0;vparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+o+" uses "+a+". Perhaps this is the source of the error below.")}}catch(f){console&&console.error&&console.error(f)}return e},n.prepareVisitors=function(){var e=this;this.listeners={};for(var r=function(l,f,p){e.listeners[f]||(e.listeners[f]=[]),e.listeners[f].push([l,p])},s=E(this.plugins),o;!(o=s()).done;){var a=o.value;if((typeof a=="undefined"?"undefined":P(a))==="object")for(var u in a){if(!ab[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!ub[u])if(P(a[u])==="object")for(var c in a[u])c==="*"?r(a,u,a[u][c]):r(a,u+"-"+c.toLowerCase(),a[u][c]);else typeof a[u]=="function"&&r(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},n.runAsync=function(){var e=this;return An(function(){var r,s,o,a,u,c,l,f,p,g,v,m;return zt(this,function(d){switch(d.label){case 0:e.plugin=0,r=0,d.label=1;case 1:if(!(r0))return[3,13];if(l=e.visitTick(c),!vn(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw f=d.sent(),p=c[c.length-1].node,e.handleError(f,p);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];g=function(){var y,_,w,S,b;return zt(this,function(O){switch(O.label){case 0:y=m.value,_=y[0],w=y[1],e.result.lastPlugin=_,O.label=1;case 1:return O.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(M){return w(M,e.helpers)}),[4,Promise.all(S)]);case 2:return O.sent(),[3,5];case 3:return[4,w(u,e.helpers)];case 4:O.sent(),O.label=5;case 5:return[3,7];case 6:throw b=O.sent(),e.handleError(b);case 7:return[2]}})},v=E(e.listeners.OnceExit),d.label=15;case 15:return(m=v()).done?[3,18]:[5,Ms(g())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},n.runOnRoot=function(e){var r=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":P(e))==="object"&&e.Once){if(this.result.root.type==="document"){var s=this.result.root.nodes.map(function(o){return e.Once(o,r.helpers)});return vn(s[0])?Promise.all(s):s}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(o){throw this.handleError(o)}},n.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,r=eb;e.syntax&&(r=e.syntax.stringify),e.stringifier&&(r=e.stringifier),r.stringify&&(r=r.stringify);var s=new Qw(r,this.result.root,this.result.opts),o=s.generate();return this.result.css=o[0],this.result.map=o[1],this.result},n.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=E(this.plugins),r;!(r=e()).done;){var s=r.value,o=this.runOnRoot(s);if(vn(o))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Xe];)a[Xe]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=E(a.nodes),c;!(c=u()).done;){var l=c.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},n.then=function(e,r){return process.env.NODE_ENV!=="production"&&("from"in this.opts||nb("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,r)},n.toString=function(){return this.css},n.visitSync=function(e,r){for(var s=E(e),o;!(o=s()).done;){var a=o.value,u=a[0],c=a[1];this.result.lastPlugin=u;var l=void 0;try{l=c(r,this.helpers)}catch(f){throw this.handleError(f,r.proxyOf)}if(r.type!=="root"&&r.type!=="document"&&!r.parent)return!0;if(vn(l))throw this.getAsyncError()}},n.visitTick=function(e){var r=e[e.length-1],s=r.node,o=r.visitors;if(s.type!=="root"&&s.type!=="document"&&!s.parent){e.pop();return}if(o.length>0&&r.visitorIndex-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"("),s=r.match(/ (\((.+):(\d+):(\d+)\)$)/);r=s?r.replace(s[0],""):r;var o=r.split(/\s+/).slice(1),a=this.extractLocation(s?s[1]:o.pop()),u=o.join(" ")||void 0,c=["eval",""].indexOf(a[0])>-1?void 0:a[0];return new Ir({functionName:u,fileName:c,lineNumber:a[1],columnNumber:a[2]})},this)},parseFFOrSafari:function(n){var i=n.stack.split("\n").filter(function(e){return!e.match(Gb)},this);return i.map(function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new Ir({functionName:e});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,s=e.match(r),o=s&&s[1]?s[1]:void 0,a=this.extractLocation(e.replace(r,""));return new Ir({functionName:o,fileName:a[0],lineNumber:a[1],columnNumber:a[2]})},this)},parseOpera:function(n){return!n.stacktrace||n.message.indexOf("\n")>-1&&n.message.split("\n").length>n.stacktrace.split("\n").length?this.parseOpera9(n):n.stack?this.parseOpera11(n):this.parseOpera10(n)},parseOpera9:function(n){for(var i=/Line (\d+).*script (?:in )?(\S+)/i,e=n.message.split("\n"),r=[],s=2,o=e.length;s/,"$2").replace(/\([^)]*\)/g,"")||void 0;return new Ir({functionName:a,fileName:s[0],lineNumber:s[1],columnNumber:s[2]})},this)}};function Vb(t){if(!t||!t.outerHTML)return"";for(var n="";t.parentElement;){var i=t.localName;if(!i)break;i=i.toLowerCase();var e=t.parentElement,r=[];if(e.children&&e.children.length>0)for(var s=0;s1&&(i+=":eq("+r.indexOf(t)+")"),n=i+(n?">"+n:""),t=e}return n}function Ma(t){return Object.prototype.toString.call(t)==="[object Object]"}function Ih(t,n){if(n===0)return!0;for(var i=Object.keys(t),e=E(i),r;!(r=e()).done;){var s=r.value;if(Ma(t[s])&&Ih(t[s],n-1))return!0}return!1}function Or(t,n){var i={numOfKeysLimit:50,depthOfLimit:4};Object.assign(i,n);var e=[],r=[];return JSON.stringify(t,function(a,u){if(e.length>0){var c=e.indexOf(this);~c?e.splice(c+1):e.push(this),~c?r.splice(c,1/0,a):r.push(a),~e.indexOf(u)&&(e[0]===u?u="[Circular ~]":u="[Circular ~."+r.slice(0,e.indexOf(u)).join(".")+"]")}else e.push(u);if(u===null)return u;if(u===void 0)return"undefined";if(s(u))return o(u);if((typeof u=="undefined"?"undefined":P(u))==="bigint")return u.toString()+"n";if(T(u,Event)){var l={};for(var f in u){var p=u[f];Array.isArray(p)?l[f]=Vb(p.length?p[0]:null):l[f]=p}return l}else{if(T(u,Node))return T(u,HTMLElement)?u?u.outerHTML:"":u.nodeName;if(T(u,Error))return u.stack?u.stack+"\nEnd of stack for Error object":u.name+": "+u.message}return u});function s(a){return!!(Ma(a)&&Object.keys(a).length>i.numOfKeysLimit||typeof a=="function"||Ma(a)&&Ih(a,i.depthOfLimit))}function o(a){var u=a.toString();return i.stringLengthLimit&&u.length>i.stringLengthLimit&&(u=""+u.slice(0,i.stringLengthLimit)+"..."),u}}var Oh={level:["assert","clear","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],lengthThreshold:1e3,logger:"console"};function jb(t,n,i){var e=i?Object.assign({},Oh,i):Oh,r=e.logger;if(!r)return function(){};var s;typeof r=="string"?s=n[r]:s=r;var o=0,a=!1,u=[];if(e.level.includes("error")){var c=function(m){var d=m.message,y=m.error,_=Aa.parse(y).map(function(S){return S.toString()}),w=[Or(d,e.stringifyOptions)];t({level:"error",trace:_,payload:w})};n.addEventListener("error",c),u.push(function(){n.removeEventListener("error",c)});var l=function(m){var d,y;T(m.reason,Error)?(d=m.reason,y=[Or("Uncaught (in promise) "+d.name+": "+d.message,e.stringifyOptions)]):(d=new Error,y=[Or("Uncaught (in promise)",e.stringifyOptions),Or(m.reason,e.stringifyOptions)]);var _=Aa.parse(d).map(function(w){return w.toString()});t({level:"error",trace:_,payload:y})};n.addEventListener("unhandledrejection",l),u.push(function(){n.removeEventListener("unhandledrejection",l)})}for(var f=E(e.level),p;!(p=f()).done;){var g=p.value;u.push(v(s,g))}return function(){u.forEach(function(m){return m()})};function v(m,d){var y=this;return m[d]?qb(m,d,function(_){var w=y;return function(){for(var S=arguments.length,b=new Array(S),O=0;O0&&es($a,i))}catch(e){yn.call(new Th(i),e)}}}function yn(t){var n=this;n.triggered||(n.triggered=!0,n.def&&(n=n.def),n.msg=t,n.state=2,n.chain.length>0&&es($a,n))}function Mh(t,n,i,e){for(var r=0;r0&&(n[e]=i)}),n},h.truncate=function(t,n){var i;return typeof t=="string"?i=t.slice(0,n):h.isArray(t)?(i=[],h.each(t,function(e){i.push(h.truncate(e,n))})):h.isObject(t)?(i={},h.each(t,function(e,r){i[r]=h.truncate(e,n)})):i=t,i},h.JSONEncode=(function(){return function(t){var n=t,i=function(r){var s=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,o={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return s.lastIndex=0,s.test(r)?'"'+r.replace(s,function(a){var u=o[a];return typeof u=="string"?u:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+r+'"'},e=function(r,s){var o="",a=" ",u=0,c="",l="",f=0,p=o,g=[],v=s[r];switch(v&&typeof v=="object"&&typeof v.toJSON=="function"&&(v=v.toJSON(r)),typeof v){case"string":return i(v);case"number":return isFinite(v)?String(v):"null";case"boolean":case"null":return String(v);case"object":if(!v)return"null";if(o+=a,g=[],wn.apply(v)==="[object Array]"){for(f=v.length,u=0;u="0"&&n<="9";)v+=n,s();if(n===".")for(v+=".";s()&&n>="0"&&n<="9";)v+=n;if(n==="e"||n==="E")for(v+=n,s(),(n==="-"||n==="+")&&(v+=n,s());n>="0"&&n<="9";)v+=n,s();if(g=+v,!isFinite(g))r("Bad number");else return g},a=function(){var g,v,m="",d;if(n==='"')for(;s();){if(n==='"')return s(),m;if(n==="\\")if(s(),n==="u"){for(d=0,v=0;v<4&&(g=parseInt(s(),16),!!isFinite(g));v+=1)d=d*16+g;m+=String.fromCharCode(d)}else if(typeof i[n]=="string")m+=i[n];else break;else m+=n}r("Bad string")},u=function(){for(;n&&n<=" ";)s()},c=function(){switch(n){case"t":return s("t"),s("r"),s("u"),s("e"),!0;case"f":return s("f"),s("a"),s("l"),s("s"),s("e"),!1;case"n":return s("n"),s("u"),s("l"),s("l"),null}r('Unexpected "'+n+'"')},l,f=function(){var g=[];if(n==="["){if(s("["),u(),n==="]")return s("]"),g;for(;n;){if(g.push(l()),u(),n==="]")return s("]"),g;s(","),u()}}r("Bad array")},p=function(){var g,v={};if(n==="{"){if(s("{"),u(),n==="}")return s("}"),v;for(;n;){if(g=a(),u(),s(":"),Object.hasOwnProperty.call(v,g)&&r('Duplicate key "'+g+'"'),v[g]=l(),u(),n==="}")return s("}"),v;s(","),u()}}r("Bad object")};return l=function(){switch(u(),n){case"{":return p();case"[":return f();case'"':return a();case"-":return o();default:return n>="0"&&n<="9"?o():c()}},function(g){var v;return e=g,t=0,n=" ",v=l(),u(),n&&r("Syntax error"),v}})(),h.base64Encode=function(t){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i,e,r,s,o,a,u,c,l=0,f=0,p="",g=[];if(!t)return t;t=h.utf8Encode(t);do i=t.charCodeAt(l++),e=t.charCodeAt(l++),r=t.charCodeAt(l++),c=i<<16|e<<8|r,s=c>>18&63,o=c>>12&63,a=c>>6&63,u=c&63,g[f++]=n.charAt(s)+n.charAt(o)+n.charAt(a)+n.charAt(u);while(l127&&o<2048?a=String.fromCharCode(o>>6|192,o&63|128):a=String.fromCharCode(o>>12|224,o>>6&63|128,o&63|128),a!==null&&(e>i&&(n+=t.substring(i,e)),n+=a,i=e=s+1)}return e>i&&(n+=t.substring(i,t.length)),n},h.UUID=function(){try{return C.crypto.randomUUID()}catch(i){for(var t=new Array(36),n=0;n<36;n++)t[n]=Math.floor(Math.random()*16);return t[14]=4,t[19]=t[19]&=-5,t[19]=t[19]|=8,t[8]=t[13]=t[18]=t[23]="-",h.map(t,function(e){return e.toString(16)}).join("")}};var Uh=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];h.isBlockedUA=function(t){var n;for(t=t.toLowerCase(),n=0;n=0}function e(r){if(!B.getElementsByTagName)return[];var s=r.split(" "),o,a,u,c,l,f,p,g,v,m,d=[B];for(f=0;f-1){a=o.split("#"),u=a[0];var y=a[1],_=B.getElementById(y);if(!_||u&&_.nodeName.toLowerCase()!=u)return[];d=[_];continue}if(o.indexOf(".")>-1){a=o.split("."),u=a[0];var w=a[1];for(u||(u="*"),c=[],l=0,p=0;p-1};break;default:R=function(N){return N.getAttribute(b)}}for(d=[],m=0,p=0;p=3?n[2]:""},currentUrl:function(){return C.location.href},properties:function(t){return typeof t!="object"&&(t={}),h.extend(h.strip_empty_properties({$os:h.info.os(),$browser:h.info.browser(Ze,ft.vendor,bn),$referrer:B.referrer,$referring_domain:h.info.referringDomain(B.referrer),$device:h.info.device(Ze)}),{$current_url:h.info.currentUrl(),$browser_version:h.info.browserVersion(Ze,ft.vendor,bn),$screen_height:Nh.height,$screen_width:Nh.width,mp_lib:"web",$lib_version:Ne.LIB_VERSION,$insert_id:za(),time:h.timestamp()/1e3},h.strip_empty_properties(t))},people_properties:function(){return h.extend(h.strip_empty_properties({$os:h.info.os(),$browser:h.info.browser(Ze,ft.vendor,bn)}),{$browser_version:h.info.browserVersion(Ze,ft.vendor,bn)})},mpPageViewProperties:function(){return h.strip_empty_properties({current_page_title:B.title,current_domain:C.location.hostname,current_url_path:C.location.pathname,current_url_protocol:C.location.protocol,current_url_search:C.location.search})}};var sS=function(t,n){var i=null,e=[];return function(r){var s=this;return e.push(r),i||(i=new U(function(o){setTimeout(function(){var a=t.apply(s,[e]);i=null,e=[],o(a)},n)})),i}},za=function(t){var n=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return t?n.substring(0,t):n},qh=function(){var t=h.UUID().replace(/-/g,""),n=h.UUID().replace(/-/g,"").substring(0,16),i="01";return"00-"+t+"-"+n+"-"+i},oS=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,aS=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,Wh=function(t){var n=aS,i=t.split("."),e=i[i.length-1];(e.length>4||e==="com"||e==="org")&&(n=oS);var r=t.match(n);return r?r[0]:""},uS=function(){var t=C.navigator.onLine;return h.isUndefined(t)||t},Rt=function(){},is=function(t,n){for(var i=!1,e=0;e=16.4&&r<16.6)};h.info=h.info,h.info.browser=h.info.browser,h.info.browserVersion=h.info.browserVersion,h.info.device=h.info.device,h.info.properties=h.info.properties,h.isBlockedUA=h.isBlockedUA,h.isEmptyObject=h.isEmptyObject,h.isObject=h.isObject,h.JSONDecode=h.JSONDecode,h.JSONEncode=h.JSONEncode,h.toArray=h.toArray,h.NPO=xt;var ze=function(t,n,i){this.dbName=t,this.storeName=n,this.version=i.version,this.storeNamesInDb=i.storeNames,this.dbPromise=null};ze.prototype._openDb=function(){var t=this.dbName,n=this.version,i=this.storeNamesInDb;return new U(function(e,r){var s=C.indexedDB.open(t,n);s.onerror=function(){r(s.error)},s.onsuccess=function(){e(s.result)},s.onupgradeneeded=function(o){var a=o.target.result;i.forEach(function(u){a.objectStoreNames.contains(u)||a.createObjectStore(u)})}})},ze.prototype.init=function(){return C.indexedDB?(this.dbPromise||(this.dbPromise=this._openDb()),this.dbPromise.then(function(t){return t instanceof C.IDBDatabase?U.resolve():U.reject(t)})):U.reject("indexedDB is not supported in this browser")},ze.prototype.isInitialized=function(){return!!this.dbPromise},ze.prototype.makeTransaction=function(t,n){var i=this.storeName,e=function(r){return new U(function(s,o){var a=r.transaction(i,t);a.oncomplete=function(){s(a)},a.onabort=a.onerror=function(){o(a.error)},n(a.objectStore(i))})};return this.dbPromise.then(e).catch(function(r){return r&&r.name==="InvalidStateError"?(this.dbPromise=this._openDb(),this.dbPromise.then(e)):U.reject(r)}.bind(this))},ze.prototype.setItem=function(t,n){return this.makeTransaction("readwrite",function(i){i.put(n,t)})},ze.prototype.getItem=function(t){var n;return this.makeTransaction("readonly",function(i){n=i.get(t)}).then(function(){return n.result})},ze.prototype.removeItem=function(t){return this.makeTransaction("readwrite",function(n){n.delete(t)})},ze.prototype.getAll=function(){var t;return this.makeTransaction("readonly",function(n){t=n.getAll()}).then(function(){return t.result})};var qa="mixpanelBrowserDb",Gh="mixpanelRecordingEvents",Wa="mixpanelRecordingRegistry",Ga={version:1,storeNames:[Gh,Wa]},lS="__mp_opt_in_out_";function fS(t,n){jh(!0,t,n)}function hS(t,n){jh(!1,t,n)}function pS(t,n){return Ha(t,n)==="1"}function Vh(t,n){if(gS(n))return L.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'),!0;var i=Ha(t,n)==="0";return i&&L.warn("You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data."),i}function At(t){return Ka(t,function(n){return this.get_config(n)})}function Mt(t){return Ka(t,function(n){return this._get_config(n)})}function Rr(t){return Ka(t,function(n){return this._get_config(n)})}function dS(t,n){n=n||{},Va(n).remove(ja(t,n),!!n.crossSubdomainCookie,n.cookieDomain)}function Va(t){return t=t||{},t.persistenceType==="localStorage"?h.localStorage:h.cookie}function ja(t,n){return n=n||{},(n.persistencePrefix||lS)+t}function Ha(t,n){return Va(n).get(ja(t,n))}function vS(t,n,i){if(n!=="localStorage")return n;var e=xr(Sn())?"localStorage":"cookie",r=Ha(t,{persistenceType:e,persistencePrefix:i})!==null;return r?e:e==="localStorage"?"cookie":"localStorage"}function gS(t){if(t&&t.ignoreDnt)return!1;var n=t&&t.window||C,i=n.navigator||{},e=!1;return h.each([i.doNotTrack,i.msDoNotTrack,n.doNotTrack],function(r){h.includes([!0,1,"1","yes"],r)&&(e=!0)}),e}function jh(t,n,i){if(!h.isString(n)||!n.length){L.error("gdpr."+(t?"optIn":"optOut")+" called with an invalid token");return}i=i||{},Va(i).set(ja(n,i),t?1:0,h.isNumber(i.cookieExpiration)?i.cookieExpiration:null,!!i.crossSubdomainCookie,!!i.secureCookie,!!i.crossSiteCookie,i.cookieDomain),i.track&&t&&i.track(i.trackEventName||"$opt_in",i.trackProperties,{send_immediately:!0})}function Ka(t,n){return function(){var i=!1;try{var e=n.call(this,"token"),r=n.call(this,"ignore_dnt"),s=n.call(this,"opt_out_tracking_persistence_type"),o=n.call(this,"opt_out_tracking_cookie_prefix"),a=n.call(this,"window");e&&(i=Vh(e,{ignoreDnt:r,persistenceType:vS(e,s,o),persistencePrefix:o,window:a}))}catch(c){L.error("Unexpected error when checking tracking opt-out status: "+c)}if(!i)return t.apply(this,arguments);var u=arguments[arguments.length-1];typeof u=="function"&&u(0)}}var mS=Qe("lock"),Hh=function(t,n){n=n||{},this.storageKey=t,this.storage=n.storage||Sn(),this.pollIntervalMS=n.pollIntervalMS||100,this.timeoutMS=n.timeoutMS||2e3,this.promiseImpl=n.promiseImpl||U};Hh.prototype.withLock=function(t,n){var i=this.promiseImpl;return new i(h.bind(function(e,r){var s=n||new Date().getTime()+"|"+Math.random(),o=new Date().getTime(),a=this.storageKey,u=this.pollIntervalMS,c=this.timeoutMS,l=this.storage,f=a+":X",p=a+":Y",g=a+":Z",v=function(w){if(new Date().getTime()-o>c){mS.error("Timeout waiting for mutex on "+a+"; clearing lock. ["+s+"]"),l.removeItem(g),l.removeItem(p),y();return}setTimeout(function(){try{w()}catch(S){r(S)}},u*(Math.random()+.1))},m=function(w,S){w()?S():v(function(){m(w,S)})},d=function(){var w=l.getItem(p);return w&&w!==s?!1:(l.setItem(p,s),l.getItem(p)===s?!0:(xr(l,!0)||r(new Error("localStorage support dropped while acquiring lock")),!1))},y=function(){l.setItem(f,s),m(d,function(){if(l.getItem(f)===s){_();return}v(function(){if(l.getItem(p)!==s){y();return}m(function(){return!l.getItem(g)},_)})})},_=function(){l.setItem(g,"1");var w=function(){l.removeItem(g),l.getItem(p)===s&&l.removeItem(p),l.getItem(f)===s&&l.removeItem(f)};t().then(function(S){w(),e(S)}).catch(function(S){w(),r(S)})};try{if(xr(l,!0))y();else throw new Error("localStorage support check failed")}catch(w){r(w)}},this))};var Ar=function(t){this.storage=t||Sn()};Ar.prototype.init=function(){return this.storage?U.resolve():U.reject(new Error("localStorage is not available"))},Ar.prototype.isInitialized=function(){return!0},Ar.prototype.setItem=function(t,n){return new U(h.bind(function(i,e){try{this.storage.setItem(t,kr(n))}catch(r){e(r)}i()},this))},Ar.prototype.getItem=function(t){return new U(h.bind(function(n,i){var e;try{e=ss(this.storage.getItem(t))}catch(r){i(r)}n(e)},this))},Ar.prototype.removeItem=function(t){return new U(h.bind(function(n,i){try{this.storage.removeItem(t)}catch(e){i(e)}n()},this))};var Kh=Qe("batch"),et=function(t,n){n=n||{},this.storageKey=t,this.usePersistence=n.usePersistence,this.usePersistence&&(this.queueStorage=n.queueStorage||new Ar,this.lock=new Hh(t,{storage:n.sharedLockStorage,timeoutMS:n.sharedLockTimeoutMS})),this.reportError=n.errorReporter||h.bind(Kh.error,Kh),this.pid=n.pid||null,this.memQueue=[],this.initialized=!1,n.enqueueThrottleMs?this.enqueuePersisted=sS(h.bind(this._enqueuePersisted,this),n.enqueueThrottleMs):this.enqueuePersisted=h.bind(function(i){return this._enqueuePersisted([i])},this)};et.prototype.ensureInit=function(){return this.initialized||!this.usePersistence?U.resolve():this.queueStorage.init().then(h.bind(function(){this.initialized=!0},this)).catch(h.bind(function(t){this.reportError("Error initializing queue persistence. Disabling persistence",t),this.initialized=!0,this.usePersistence=!1},this))},et.prototype.enqueue=function(t,n){var i={id:za(),flushAfter:new Date().getTime()+n*2,payload:t};return this.usePersistence?this.enqueuePersisted(i):(this.memQueue.push(i),U.resolve(!0))},et.prototype._enqueuePersisted=function(t){var n=h.bind(function(){return this.ensureInit().then(h.bind(function(){return this.readFromStorage()},this)).then(h.bind(function(i){return this.saveToStorage(i.concat(t))},this)).then(h.bind(function(i){return i&&(this.memQueue=this.memQueue.concat(t)),i},this)).catch(h.bind(function(i){return this.reportError("Error enqueueing items",i,t),!1},this))},this);return this.lock.withLock(n,this.pid).catch(h.bind(function(i){return this.reportError("Error acquiring storage lock",i),!1},this))},et.prototype.fillBatch=function(t){var n=this.memQueue.slice(0,t);return this.usePersistence&&n.lengths.flushAfter&&!e[s.id]&&(s.orphaned=!0,n.push(s),n.length>=t))break}}return n},this)):U.resolve(n)};var Yh=function(t,n){var i=[];return h.each(t,function(e){e.id&&!n[e.id]&&i.push(e)}),i};et.prototype.removeItemsByID=function(t){var n={};if(h.each(t,function(e){n[e]=!0}),this.memQueue=Yh(this.memQueue,n),this.usePersistence){var i=h.bind(function(){return this.ensureInit().then(h.bind(function(){return this.readFromStorage()},this)).then(h.bind(function(e){return e=Yh(e,n),this.saveToStorage(e)},this)).then(h.bind(function(){return this.readFromStorage()},this)).then(h.bind(function(e){for(var r=0;r5&&(this.reportError("[dupe] item ID sent too many times, not sending",{item:f,batchSize:r.length,timesSent:this.itemIdsSentSuccessfully[v]}),g=!1):this.reportError("[dupe] found item with no ID",{item:f}),g&&o.push(p)}a[f.id]=p},this),o.length<1)return this.requestInProgress=!1,this.resetFlush(),U.resolve();var u=h.bind(function(){return this.queue.removeItemsByID(h.map(r,function(f){return f.id})).then(h.bind(function(f){return h.each(r,h.bind(function(p){var g=p.id;g?(this.itemIdsSentSuccessfully[g]=this.itemIdsSentSuccessfully[g]||0,this.itemIdsSentSuccessfully[g]++,this.itemIdsSentSuccessfully[g]>5&&this.reportError("[dupe] item ID sent too many times",{item:p,batchSize:r.length,timesSent:this.itemIdsSentSuccessfully[g]})):this.reportError("[dupe] found item with no ID while removing",{item:p})},this)),f?(this.consecutiveRemovalFailures=0,this.flushOnlyOnInterval&&!s?(this.resetFlush(),U.resolve()):this.flush()):(++this.consecutiveRemovalFailures>5?(this.reportError("Too many queue failures; disabling batching system."),this.stopAllBatching()):this.resetFlush(),U.resolve())},this))},this),c=h.bind(function(f){this.requestInProgress=!1;try{if(t.unloading)return this.queue.updatePayloads(a);if(h.isObject(f)&&f.error==="timeout"&&new Date().getTime()-i>=n)return this.reportError("Network timeout; retrying"),this.flush();if(h.isObject(f)&&(f.httpStatusCode>=500||f.httpStatusCode===429||f.httpStatusCode<=0&&!uS()||f.error==="timeout")){var p=this.flushInterval*2;return f.retryAfter&&(p=parseInt(f.retryAfter,10)*1e3||p),p=Math.min(yS,p),this.reportError("Error; retry in "+p+" ms"),this.scheduleFlush(p),U.resolve()}else if(h.isObject(f)&&f.httpStatusCode===413)if(r.length>1){var g=Math.max(1,Math.floor(e/2));return this.batchSize=Math.min(this.batchSize,g,r.length-1),this.reportError("413 response; reducing batch size to "+this.batchSize),this.resetFlush(),U.resolve()}else return this.reportError("Single-event request too large; dropping",r),this.resetBatchSize(),u();else return u()}catch(v){this.reportError("Error handling API response",v),this.resetFlush()}},this),l={method:"POST",verbose:!0,ignore_json_errors:!0,timeout_ms:n};return t.unloading&&(l.transport="sendBeacon"),Cn.log("MIXPANEL REQUEST:",o),this.sendRequestPromise(o,l).then(c)},this)).catch(h.bind(function(r){this.reportError("Error flushing request queue",r),this.resetFlush()},this))},qe.prototype.reportError=function(t,n){if(Cn.error.apply(Cn.error,arguments),this.errorReporter)try{n instanceof Error||(n=new Error(t)),this.errorReporter(t,n)}catch(i){Cn.error(i)}};var Ya=function(t){var n=Date.now();return!t||n>t.maxExpires||n>t.idleExpires},_S=250,Xh=function(t,n){if(!h.isArray(t))return t&&n.critical("record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled."),[];for(var i=[],e=0;e0?n[0]:t.target||t.srcElement}var dp=".mp-mask, .fs-mask, .amp-mask, .rr-mask, .ph-mask",DS="data-rr-is-password",FS=["password","email","tel","hidden"];function cs(t){return t?Array.isArray(t)?t:[t]:[]}function US(t){var n={input:{maskingSelector:"",unmaskingSelector:"",maskAll:!0},text:{maskingSelector:"",unmaskingSelector:"",maskAll:!0}},i=t.get_config("record_mask_input_selector"),e=t.get_config("record_unmask_input_selector"),r=t.get_config("record_mask_all_inputs");n.input.maskingSelector=cs(i).join(","),n.input.unmaskingSelector=cs(e).join(","),r!==void 0&&(n.input.maskAll=r);var s=t.get_config("record_mask_text_selector"),o=t.get_config("record_unmask_text_selector"),a=t.get_config("record_mask_all_text"),u=t.get_config("record_mask_text_class"),c=cs(s);if(u)if(u instanceof RegExp)n.text._legacyClassRegex=u;else{var l="."+u;c.indexOf(l)===-1&&c.push(l)}return n.text.maskingSelector=c.join(","),n.text.unmaskingSelector=cs(o).join(","),a===void 0&&s!==void 0?n.text.maskAll=!1:a!==void 0&&(n.text.maskAll=a),n}function Mr(t,n){return n?!!t.closest(n):!1}function BS(t,n){var i=(t.getAttribute("type")||"").toLowerCase();if(FS.indexOf(i)!==-1)return!0;var e=(t.getAttribute("autocomplete")||"").toLowerCase();return e&&e!==""&&e!=="off"||t.hasAttribute(DS)||cp(t)?!0:n.input.maskAll?!Mr(t,n.input.unmaskingSelector):!!(Mr(t,n.input.maskingSelector)||Mr(t,dp))}function zS(t,n){return t?n.text._legacyClassRegex&&ea(t,n.text._legacyClassRegex)?!0:n.text.maskAll?!Mr(t,n.text.unmaskingSelector):!!(Mr(t,n.text.maskingSelector)||Mr(t,dp)):!1}var Kt=Qe("network-plugin");function ls(t){return Math.round(Date.now()-t.performance.now())}var iu={initiatorTypes:["audio","beacon","body","css","early-hint","embed","fetch","frame","iframe","icon","image","img","input","link","navigation","object","ping","script","track","video","xmlhttprequest"],ignoreRequestFn:function(){return!1},recordHeaders:{request:[],response:[]},recordBodyUrls:{request:[],response:[]},recordInitialRequests:!1};function qS(t){return t.entryType==="navigation"}function su(t){return t.entryType==="resource"}function WS(t,n){for(var i=t.length,e=i-1;e>=0;e-=1)if(n(t[e]))return t[e]}function vp(t,n,i){if(!(n in t)||typeof t[n]!="function")return function(){};var e=t[n],r=i(e);return t[n]=r,function(){t[n]=e}}var ou=1024*1024;function gp(t){return!t||typeof t!="string"?t:t.length>ou?(Kt.error("Body truncated from "+t.length+" to "+ou+" characters"),t.substring(0,ou)+"... [truncated]"):t}function GS(t,n,i){if(!n.PerformanceObserver)return Kt.error("PerformanceObserver not supported"),function(){};if(i.recordInitialRequests){var e=n.performance.getEntries().filter(function(s){return qS(s)||su(s)&&i.initiatorTypes.includes(s.initiatorType)});t({requests:e.map(function(s){return{url:s.name,initiatorType:s.initiatorType,status:"responseStatus"in s?s.responseStatus:void 0,startTime:Math.round(s.startTime),endTime:Math.round(s.responseEnd),timeOrigin:ls(n)}}),isInitial:!0})}var r=new n.PerformanceObserver(function(s){var o=s.getEntries().filter(function(a){return su(a)&&i.initiatorTypes.includes(a.initiatorType)&&a.initiatorType!=="xmlhttprequest"&&a.initiatorType!=="fetch"});t({requests:o.map(function(a){return{url:a.name,initiatorType:a.initiatorType,status:"responseStatus"in a?a.responseStatus:void 0,startTime:Math.round(a.startTime),endTime:Math.round(a.responseEnd),timeOrigin:ls(n)}})})});return r.observe({entryTypes:["navigation","resource"]}),function(){r.disconnect()}}function fs(t,n,i){return!n[t]||n[t].length===0?!1:n[t].includes(i.toLowerCase())}function hs(t,n,i){return!n[t]||n[t].length===0?!1:is(i,n[t])}function mp(t){if(t==null)return null;var n;if(typeof t=="string")n=t;else if(t instanceof Document)n=t.textContent;else if(t instanceof FormData)n=h.HTTPBuildQuery(t);else if(h.isObject(t))try{n=JSON.stringify(t)}catch(i){return"Failed to stringify response object"}else return"Cannot read body of type "+typeof t;return gp(n)}function yp(t){return new Promise(function(n){var i=setTimeout(function(){n("Timeout while trying to read body")},500);try{t.clone().text().then(function(e){clearTimeout(i),n(gp(e))},function(e){clearTimeout(i),n("Failed to read body: "+String(e))})}catch(e){clearTimeout(i),n("Failed to read body: "+String(e))}})}function au(t,n,i,e,r,s){if(s===void 0&&(s=0),s>10)return Kt.error("Cannot find performance entry"),Promise.resolve(null);var o=t.performance.getEntriesByName(i),a=WS(o,function(u){return su(u)&&u.initiatorType===n&&(!e||u.startTime>=e)&&(!r||u.startTime<=r)});return a?Promise.resolve(a):new Promise(function(u){setTimeout(u,50*s)}).then(function(){return au(t,n,i,e,r,s+1)})}function VS(t,n,i){if(!i.initiatorTypes.includes("xmlhttprequest"))return function(){};var e=vp(n.XMLHttpRequest.prototype,"open",function(r){return function(s,o,a,u,c){a===void 0&&(a=!0);var l=this,f=new Request(o,{method:s}),p={},g,v,m={},d=l.setRequestHeader.bind(l);l.setRequestHeader=function(_,w){return fs("request",i.recordHeaders,_)&&(m[_]=w),d(_,w)},p.requestHeaders=m;var y=l.send.bind(l);l.send=function(_){return hs("request",i.recordBodyUrls,f.url)&&(p.requestBody=mp(_)),g=n.performance.now(),y(_)},l.addEventListener("readystatechange",function(){if(l.readyState===l.DONE){v=n.performance.now();var _={},w=l.getAllResponseHeaders();if(w){var S=w.trim().split(/[\r\n]+/);S.forEach(function(b){if(b){var O=b.indexOf(": ");if(O!==-1){var M=b.substring(0,O),R=b.substring(O+2);M&&fs("response",i.recordHeaders,M)&&(_[M]=R)}}})}p.responseHeaders=_,hs("response",i.recordBodyUrls,f.url)&&(p.responseBody=mp(l.response)),au(n,"xmlhttprequest",f.url,g,v).then(function(b){if(!b){Kt.error("Failed to get performance entry for XHR request to "+f.url);return}var O={url:b.name,method:f.method,initiatorType:b.initiatorType,status:l.status,startTime:Math.round(b.startTime),endTime:Math.round(b.responseEnd),timeOrigin:ls(n),requestHeaders:p.requestHeaders,requestBody:p.requestBody,responseHeaders:p.responseHeaders,responseBody:p.responseBody};t({requests:[O]})}).catch(function(b){Kt.error("Error recording XHR request to "+f.url+": "+String(b))})}}),r.call(l,s,o,a,u,c)}});return function(){e()}}function jS(t,n){if(typeof Request!="undefined"&&t instanceof Request){var i=t.clone();return n?new Request(i,n):i}return new Request(t,n)}function HS(t,n,i){if(!i.initiatorTypes.includes("fetch"))return function(){};var e=vp(n,"fetch",function(r){return function(){var s=jS(arguments[0],arguments[1]),o,a={},u,c,l,f=Promise.resolve(void 0),p,g=new Promise(function(m){p=m});try{var v={};s.headers.forEach(function(m,d){fs("request",i.recordHeaders,d)&&(v[d]=m)}),a.requestHeaders=v,hs("request",i.recordBodyUrls,s.url)&&(f=yp(s).then(function(m){a.requestBody=m})),u=n.performance.now(),l=r.apply(n,arguments).then(function(m){o=m,c=n.performance.now();var d={};return o.headers.forEach(function(y,_){fs("response",i.recordHeaders,_)&&(d[_]=y)}),a.responseHeaders=d,hs("response",i.recordBodyUrls,s.url)?yp(o).then(function(y){a.responseBody=y,p()}):p(),o})}catch(m){l=Promise.reject(m)}return Promise.all([f,g,l]).then(function(){return au(n,"fetch",s.url,u,c)}).then(function(m){if(!m){Kt.error("Failed to get performance entry for fetch request to "+s.url);return}var d={url:m.name,method:s.method,initiatorType:m.initiatorType,status:o?o.status:void 0,startTime:Math.round(m.startTime),endTime:Math.round(m.responseEnd),timeOrigin:ls(n),requestHeaders:a.requestHeaders,requestBody:a.requestBody,responseHeaders:a.responseHeaders,responseBody:a.responseBody};t({requests:[d]})}).catch(function(m){Kt.error("Error recording fetch request to "+s.url+": "+String(m))}),l}});return function(){e()}}function KS(t,n,i){if(!("performance"in n))return function(){};var e=Object.assign({},iu.recordHeaders,i.recordHeaders||{}),r=Object.assign({},iu.recordBodyUrls,i.recordBodyUrls||{});i=Object.assign({},i,{recordHeaders:e,recordBodyUrls:r});var s=Object.assign({},iu,i),o=function(l){var f=l.requests.filter(function(p){var g=is(p.url,s.ignoreRequestUrls||[]);return!g&&!s.ignoreRequestFn(p)});(f.length>0||l.isInitial)&&t(Object.assign({},l,{requests:f}))},a=GS(o,n,s),u=VS(o,n,s),c=HS(o,n,s);return function(){a(),u(),c()}}var YS="rrweb/network@1.mp",JS=function(t){return{name:YS,observer:KS,options:t}},Yt=Qe("recorder"),XS=C.CompressionStream,ZS={batch_size:1e3,batch_flush_interval_ms:10*1e3,batch_request_timeout_ms:90*1e3,batch_autostart:!0},QS=new Set([F.MouseMove,F.MouseInteraction,F.Scroll,F.ViewportResize,F.Input,F.TouchMove,F.MediaInteraction,F.Drag,F.Selection]);function eC(t){return t.type===j.IncrementalSnapshot&&QS.has(t.data.source)}var we=function(t){this._mixpanel=t.mixpanelInstance,this._onIdleTimeout=t.onIdleTimeout||Rt,this._onMaxLengthReached=t.onMaxLengthReached||Rt,this._onBatchSent=t.onBatchSent||Rt,this._rrwebRecord=t.rrwebRecord||null,this._stopRecording=null,this.replayId=t.replayId,this.batchStartUrl=t.batchStartUrl||null,this.replayStartUrl=t.replayStartUrl||null,this.idleExpires=t.idleExpires||null,this.maxExpires=t.maxExpires||null,this.replayStartTime=t.replayStartTime||null,this.lastEventTimestamp=t.lastEventTimestamp||null,this.seqNo=t.seqNo||0,this.idleTimeoutId=null,this.maxTimeoutId=null,this.recordMaxMs=_n,this.recordMinMs=0,this._recordMinMsCheckStart=null;var n=xr(t.sharedLockStorage||Sn(),!0)&&!this.getConfig("disable_persistence");this.batcherKey="__mprec_"+this.getConfig("name")+"_"+this.getConfig("token")+"_"+this.replayId,this.queueStorage=new ze(qa,Gh,Ga),this.batcher=new qe(this.batcherKey,{errorReporter:this.reportError.bind(this),flushOnlyOnInterval:!0,libConfig:ZS,sendRequestFunc:this.flushEventsWithOptOut.bind(this),queueStorage:this.queueStorage,sharedLockStorage:t.sharedLockStorage,usePersistence:n,stopAllBatchingFunc:this.stopRecording.bind(this),enqueueThrottleMs:_S,sharedLockTimeoutMS:10*1e3})};we.prototype.getUserIdInfo=function(){if(this.finalFlushUserIdInfo)return this.finalFlushUserIdInfo;var t={distinct_id:String(this._mixpanel.get_distinct_id())},n=this._mixpanel.get_property("$device_id");n&&(t.$device_id=n);var i=this._mixpanel.get_property("$user_id");return i&&(t.$user_id=i),t},we.prototype.unloadPersistedData=function(){return this.batcher.stop(),this.queueStorage.init().catch(function(){this.reportError("Error initializing IndexedDB storage for unloading persisted data.")}.bind(this)).then(function(){return this.getDurationMs()_n&&(this.recordMaxMs=_n,Yt.critical("record_max_ms cannot be greater than "+_n+"ms. Capping value.")),this.maxExpires||(this.maxExpires=new Date().getTime()+this.recordMaxMs),this.recordMinMs=this._getRecordMinMs(),this.replayStartTime||(this.replayStartTime=new Date().getTime(),this.batchStartUrl=h.info.currentUrl(),this.replayStartUrl=h.info.currentUrl()),t||this.recordMinMs>0?(this.batcher.stop(),this._recordMinMsCheckStart=null):this.batcher.start();var n=function(){clearTimeout(this.idleTimeoutId);var c=this.getConfig("record_idle_timeout_ms");this.idleTimeoutId=setTimeout(this._onIdleTimeout,c),this.idleExpires=new Date().getTime()+c}.bind(this);n();var i=this.getConfig("record_block_selector");(i===""||i===null)&&(i=void 0);var e=US(this._mixpanel),r=[];if(this.getConfig("record_network")){var s=this.getConfig("record_network_options")||{},o=(s.ignoreRequestUrls||[]).slice();o.push(this._getApiRoute()),s.ignoreRequestUrls=o,r.push(JS(s))}this.getConfig("record_console")&&r.push(Kb({stringifyOptions:{stringLengthLimit:1e3,numOfKeysLimit:50,depthOfLimit:2}}));var a=Xh(this.getConfig("record_allowed_iframe_origins"),Yt);try{this._stopRecording=this._rrwebRecord({emit:function(c){if(this.idleExpires&&this.idleExpires=this.recordMinMs&&this.batcher.start(),n()),this.__enqueuePromise=this.batcher.enqueue(c),(this.lastEventTimestamp===null||c.timestamp>this.lastEventTimestamp)&&(this.lastEventTimestamp=c.timestamp)}.bind(this),blockClass:this.getConfig("record_block_class"),blockSelector:i,collectFonts:this.getConfig("record_collect_fonts"),dataURLOptions:{type:"image/webp",quality:.6},maskAllInputs:!0,maskTextSelector:"*",maskInputFn:this._getMaskFn(BS,e),maskTextFn:this._getMaskFn(zS,e),recordCrossOriginIframes:a.length>0,allowedIframeOrigins:a,recordCanvas:this.getConfig("record_canvas"),sampling:{canvas:15},plugins:r})}catch(c){this.reportError("Unexpected error when starting rrweb recording.",c)}if(typeof this._stopRecording!="function"){this.reportError("rrweb failed to start, skipping this recording."),this._stopRecording=null,this.stopRecording();return}var u=this.maxExpires-new Date().getTime();this.maxTimeoutId=setTimeout(this._onMaxLengthReached.bind(this),u)},we.prototype.stopRecording=function(t){if(this.finalFlushUserIdInfo=this.getUserIdInfo(),!this.isRrwebStopped()){try{this._stopRecording()}catch(i){this.reportError("Error with rrweb stopRecording",i)}this._stopRecording=null}var n;return this.batcher.stopped?n=this.batcher.clear():t||(n=this.batcher.flush()),this.batcher.stop(),clearTimeout(this.idleTimeoutId),clearTimeout(this.maxTimeoutId),n},we.prototype.isRrwebStopped=function(){return this._stopRecording===null},we.prototype.flushEventsWithOptOut=function(t,n,i){var e=function(r){r===0&&(this.stopRecording(),i({error:"Tracking has been opted out, stopping recording."}))}.bind(this);this._flushEvents(t,n,i,e)},we.prototype.serialize=function(){var t;try{t=this._mixpanel.get_tab_id()}catch(n){this.reportError("Error getting tab ID for serialization ",n),t=null}return{replayId:this.replayId,seqNo:this.seqNo,replayStartTime:this.replayStartTime,batchStartUrl:this.batchStartUrl,replayStartUrl:this.replayStartUrl,lastEventTimestamp:this.lastEventTimestamp,idleExpires:this.idleExpires,maxExpires:this.maxExpires,tabId:t}},we.deserialize=function(t,n){var i=new we(h.extend({},n,{replayId:t.replayId,batchStartUrl:t.batchStartUrl,replayStartUrl:t.replayStartUrl,idleExpires:t.idleExpires,maxExpires:t.maxExpires,replayStartTime:t.replayStartTime,lastEventTimestamp:t.lastEventTimestamp,seqNo:t.seqNo,sharedLockStorage:n.sharedLockStorage}));return i},we.prototype._getApiRoute=function(){return this.getConfig("api_routes").record},we.prototype._sendRequest=function(t,n,i,e){var r=function(o,a){o.status===200&&this.replayId===t&&(this.seqNo++,this.batchStartUrl=h.info.currentUrl()),this._onBatchSent(),e({status:0,httpStatusCode:o.status,responseBody:a,retryAfter:o.headers.get("Retry-After")})}.bind(this),s=this._mixpanel.get_api_host&&this._mixpanel.get_api_host("record")||this.getConfig("api_host");C.fetch(s+"/"+this._getApiRoute()+"?"+new URLSearchParams(n),{method:"POST",headers:{Authorization:"Basic "+btoa(this.getConfig("token")+":"),"Content-Type":"application/octet-stream"},body:i}).then(function(o){o.json().then(function(a){r(o,a)}).catch(function(a){e({error:a})})}).catch(function(o){e({error:o,httpStatusCode:0})})},we.prototype._flushEvents=At(function(t,n,i){var e=t.length;if(e>0){for(var r=this.replayId,s=1/0,o=-1/0,a=!1,u=0;uNa?(Yt.critical("record_min_ms cannot be greater than "+Na+"ms. Capping value."),Na):t},we.prototype._getMaskFn=function(t,n){return function(i,e){if(!i.trim().length)return"";var r=!0;try{r=t(e,n)}catch(o){this.reportError("Error checking if text should be masked, defaulting to masked",o)}if(r){var s=Math.min(i.length,1e4);return"*".repeat(s)}else return i}.bind(this)};var pt=function(t){this.idb=new ze(qa,Wa,Ga),this.errorReporter=t.errorReporter,this.mixpanelInstance=t.mixpanelInstance,this.sharedLockStorage=t.sharedLockStorage};pt.prototype.isPersistenceEnabled=function(){return!this.mixpanelInstance.get_config("disable_persistence")},pt.prototype.handleError=function(t){this.errorReporter("IndexedDB error: ",t)},pt.prototype.setActiveRecording=function(t){if(!this.isPersistenceEnabled())return U.resolve();var n=t.tabId;return n?this.idb.init().then(function(){return this.idb.setItem(n,t)}.bind(this)).catch(this.handleError.bind(this)):(console.warn("No tab ID is set, cannot persist recording metadata."),U.resolve())},pt.prototype.getActiveRecording=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getItem(this.mixpanelInstance.get_tab_id())}.bind(this)).then(function(t){return Ya(t)?null:t}.bind(this)).catch(this.handleError.bind(this)):U.resolve(null)},pt.prototype.clearActiveRecording=function(){return this.isPersistenceEnabled()?this.markActiveRecordingExpired():this.deleteActiveRecording()},pt.prototype.markActiveRecordingExpired=function(){return this.getActiveRecording().then(function(t){if(t)return t.maxExpires=0,this.setActiveRecording(t)}.bind(this)).catch(this.handleError.bind(this))},pt.prototype.deleteActiveRecording=function(){return this.idb.isInitialized()?this.idb.removeItem(this.mixpanelInstance.get_tab_id()).catch(this.handleError.bind(this)):U.resolve()},pt.prototype.flushInactiveRecordings=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getAll()}.bind(this)).then(function(t){var n=t.filter(function(i){return Ya(i)}).map(function(i){var e=we.deserialize(i,{mixpanelInstance:this.mixpanelInstance,sharedLockStorage:this.sharedLockStorage});return e.unloadPersistedData().then(function(){return this.idb.removeItem(i.tabId)}.bind(this)).catch(this.handleError.bind(this))}.bind(this));return U.all(n)}.bind(this)).catch(this.handleError.bind(this)):U.resolve([])};var In=Qe("recorder"),rt=function(t,n,i){this.mixpanelInstance=t,this.rrwebRecord=n||Ct,this.sharedLockStorage=i,this.recordingRegistry=new pt({mixpanelInstance:this.mixpanelInstance,errorReporter:In.error,sharedLockStorage:i}),this._flushInactivePromise=this.recordingRegistry.flushInactiveRecordings(),this.activeRecording=null,this.stopRecordingInProgress=!1};rt.prototype.startRecording=function(t){if(t=t||{},this.activeRecording&&!this.activeRecording.isRrwebStopped()){In.log("Recording already in progress, skipping startRecording.");return}var n=function(){In.log("Idle timeout reached, restarting recording."),this.resetRecording()}.bind(this),i=function(){In.log("Max recording length reached, stopping recording."),this.resetRecording()}.bind(this),e=function(){this.recordingRegistry.setActiveRecording(this.activeRecording.serialize()),this.__flushPromise=this.activeRecording.batcher._flushPromise}.bind(this),r={mixpanelInstance:this.mixpanelInstance,onBatchSent:e,onIdleTimeout:n,onMaxLengthReached:i,replayId:h.UUID(),rrwebRecord:this.rrwebRecord,sharedLockStorage:this.sharedLockStorage};return t.activeSerializedRecording?this.activeRecording=we.deserialize(t.activeSerializedRecording,r):this.activeRecording=new we(r),this.activeRecording.startRecording(t.shouldStopBatcher),this.recordingRegistry.setActiveRecording(this.activeRecording.serialize())},rt.prototype.stopRecording=function(){return this.stopRecordingInProgress=!0,this._stopCurrentRecording(!1,!0).then(function(){return this.recordingRegistry.clearActiveRecording()}.bind(this)).then(function(){this.stopRecordingInProgress=!1}.bind(this))},rt.prototype.pauseRecording=function(){return this._stopCurrentRecording(!1)},rt.prototype._stopCurrentRecording=function(t,n){if(this.activeRecording){var i=this.activeRecording.stopRecording(t);return n&&(this.activeRecording=null),i}return U.resolve()},rt.prototype.resumeRecording=function(t){return this.activeRecording&&this.activeRecording.isRrwebStopped()?(this.activeRecording.startRecording(!1),U.resolve(null)):this.recordingRegistry.getActiveRecording().then(function(n){return n&&!this.stopRecordingInProgress?this.startRecording({activeSerializedRecording:n}):t?this.startRecording({shouldStopBatcher:!1}):(In.log("No resumable recording found."),null)}.bind(this))},rt.prototype.resetRecording=function(){this.stopRecording(),this.startRecording({shouldStopBatcher:!0})},rt.prototype.isRecording=function(){return this.activeRecording&&!this.activeRecording.isRrwebStopped()},rt.prototype.getActiveReplayId=function(){return this.isRecording()?this.activeRecording.replayId:null},Object.defineProperty(rt.prototype,"replayId",{get:function(){return this.getActiveReplayId()}}),C[Rs]=rt;var tC=30,rC=1e3,nC=4,iC=!1;function _p(){this.clicks=[]}_p.prototype.isRageClick=function(t,n){n=n||{};var i=n.threshold_px||tC,e=n.timeout_ms||rC,r=n.click_count||nC,s=n.interactive_elements_only||iC;if(s){var o=pp(t);if(!o||fp(o))return!1}var a=Date.now(),u=t.pageX,c=t.pageY,l=this.clicks[this.clicks.length-1];if(l&&a-l.timestamp=r)return this.clicks=[],!0}else this.clicks=[{x:u,y:c,timestamp:a}];return!1};function Tr(t,n){this.changeCallback=t||function(){},this.observerConfig=n,this.observedShadowRoots=null,this.shadowObservers=[]}Tr.prototype.getEventTarget=function(t){if(this.observedShadowRoots)return pp(t)},Tr.prototype.observeFromEvent=function(t){if(this.observedShadowRoots)for(var n=hp(t),i=0;i=n?this.hasChangesAfter(o.timestamp)||r.push(o):this.pendingClicks.push(o)}return r},nt.prototype.hasChangesAfter=function(t){return this.lastChangeEventTimestamp>=t-100},nt.prototype.recordChangeEvent=function(){this.lastChangeEventTimestamp=Date.now()},nt.prototype.triggerProcessing=function(t){this.processingActive||(this.processingActive=!0,this.processRecursively(t))},nt.prototype.processRecursively=function(t){if(!this.isTracking||!this.onDeadClickCallback){this.processingActive=!1;return}var n=t.timeout_ms,i=this;this.processingTimeout=setTimeout(function(){if(i.processingActive){for(var e=i.getDeadClicks(t),r=0;r0?i.processRecursively(t):i.processingActive=!1}},n)},nt.prototype.startTracking=function(){if(!this.isTracking){this.isTracking=!0;var t=this;oC.forEach(function(i){var e=function(){t.recordChangeEvent()};document.addEventListener(i,e,{capture:!0,passive:!0}),t.eventListeners.push({target:document,event:i,handler:e,options:{capture:!0,passive:!0}})}),uC.forEach(function(i){var e=function(){t.recordChangeEvent()};window.addEventListener(i,e),t.eventListeners.push({target:window,event:i,handler:e})}),aC.forEach(function(i){var e=function(){t.recordChangeEvent()};window.addEventListener(i,e,{passive:!0}),t.eventListeners.push({target:window,event:i,handler:e,options:{passive:!0}})});var n=function(){t.recordChangeEvent()};if(document.addEventListener("selectionchange",n),t.eventListeners.push({target:document,event:"selectionchange",handler:n}),window.MutationObserver)try{this.mutationObserver=new window.MutationObserver(function(){t.recordChangeEvent()}),this.mutationObserver.observe(document.body||document.documentElement,wp)}catch(i){re.critical("Error while setting up mutation observer",i)}if(window.customElements)try{this.shadowDOMObserver=new Tr(function(){t.recordChangeEvent()},wp),this.shadowDOMObserver.start()}catch(i){re.critical("Error while setting up shadow DOM observer",i),this.shadowDOMObserver=null}}},nt.prototype.stopTracking=function(){if(this.isTracking){this.isTracking=!1,this.pendingClicks=[],this.lastChangeEventTimestamp=0,this.processingActive=!1,this.processingTimeout&&(clearTimeout(this.processingTimeout),this.processingTimeout=null);for(var t=0;tthis.maxScrollViewDepth&&(this.maxScrollViewDepth=i),this.previousScrollHeight=B.body.scrollHeight}}.bind(this),n=lp(t);this.listenerScrollDepth=n.listener,C.addEventListener(n.eventType,this.listenerScrollDepth)}},be.prototype.initClickTracking=function(){C.removeEventListener(ht,this.listenerClick,!0),!(!this.getConfig(ps)&&!this.mp.get_config("record_heatmap_data"))&&(re.log("Initializing click tracking"),this.listenerClick=function(t){!this.getConfig(ps)&&!this.mp.is_recording_heatmap_data()||this.trackDomEvent(t,Pp)}.bind(this),C.addEventListener(ht,this.listenerClick,!0))},be.prototype.initDeadClickTracking=function(){var t=this._getClickTrackingConfig(ds);if(!t&&!this.mp.get_config("record_heatmap_data")){this.stopDeadClickTracking();return}re.log("Initializing dead click tracking"),this._deadClickTracker||(this._deadClickTracker=new nt(function(n){this.trackDomEvent(n,$p)}.bind(this)),this._deadClickTracker.startTracking()),this.listenerDeadClick||(this.listenerDeadClick=function(n){var i=this._getClickTrackingConfig(ds);if(!(!i&&!this.mp.is_recording_heatmap_data())&&!this.currentUrlBlocked()){var e=i||{};e.timeout_ms||(e.timeout_ms=sC),this._deadClickTracker.trackClick(n,e)}}.bind(this),C.addEventListener(ht,this.listenerDeadClick,!0))},be.prototype.initInputTracking=function(){C.removeEventListener(En,this.listenerChange,!0),this.getConfig(cu)&&(re.log("Initializing input tracking"),this.listenerChange=function(t){this.getConfig(cu)&&this.trackDomEvent(t,pC)}.bind(this),C.addEventListener(En,this.listenerChange,!0))},be.prototype.initPageviewTracking=function(){if(C.removeEventListener(Tt,this.listenerLocationchange),!(!this.pageviewTrackingConfig()&&!this.mp.get_config("record_heatmap_data"))){re.log("Initializing pageview tracking");var t="",n=!1;(this.pageviewTrackingConfig()||this.mp.is_recording_heatmap_data())&&!this.currentUrlBlocked()&&(n=this.mp.track_pageview(On)),n&&(t=h.info.currentUrl()),this.listenerLocationchange=Ht(function(){if(!this.currentUrlBlocked()){var i=h.info.currentUrl(),e=!1,r=i.split("#")[0].split("?")[0]!==t.split("#")[0].split("?")[0],s=this.pageviewTrackingConfig();if(!s&&this.mp.is_recording_heatmap_data()&&(s=uu),s===uu?e=i!==t:s===lC?e=i.split("#")[0]!==t.split("#")[0]:s===fC&&(e=r),e){var o=this.mp.track_pageview(On);o&&(t=i),r&&(this.lastScrollCheckpoint=0,re.log("Path change: re-initializing scroll depth checkpoints"))}}}.bind(this)),C.addEventListener(Tt,this.listenerLocationchange)}},be.prototype.initRageClickTracking=function(){C.removeEventListener(ht,this.listenerRageClick,!0);var t=this._getClickTrackingConfig(vs);!t&&!this.mp.get_config("record_heatmap_data")||(re.log("Initializing rage click tracking"),this._rageClickTracker||(this._rageClickTracker=new _p),this.listenerRageClick=function(n){var i=this._getClickTrackingConfig(vs);!i&&!this.mp.is_recording_heatmap_data()||this.currentUrlBlocked()||this._rageClickTracker.isRageClick(n,i)&&this.trackDomEvent(n,Np)}.bind(this),C.addEventListener(ht,this.listenerRageClick,!0))},be.prototype.initScrollTracking=function(){if(C.removeEventListener(os,this.listenerScroll),C.removeEventListener(Xa,this.listenerScroll),!!this.getConfig(lu)){re.log("Initializing scroll tracking"),this.lastScrollCheckpoint=0;var t=function(){if(this.getConfig(lu)&&!this.currentUrlBlocked()){var i=this.getConfig(Ap),e=(this.getConfig(Mp)||[]).slice().sort(function(l,f){return l-f}),r=C.scrollY,s=h.extend({$scroll_top:r},On);try{var o=B.body.scrollHeight,a=Math.round(r/(o-C.innerHeight)*100);if(s.$scroll_height=o,s.$scroll_percentage=a,a>this.lastScrollCheckpoint)for(var u=0;u=c&&this.lastScrollCheckpoint=i)return Ve.log("Persisted variants are expiring"),null;if(!t||e.distinctId!==t.distinct_id)return Ve.log("Persisted variants found, but for a different distinct_id so clearing."),n();var r=new Map;return h.each(e.flagVariants,function(s,o){r.set(o,{key:s.variant_key,value:s.variant_value,experiment_id:s.experiment_id,is_experiment_active:s.is_experiment_active,is_qa_tester:s.is_qa_tester,variant_source:"persistence",persisted_at_in_ms:e.persistedAt,ttl_in_ms:i})}),Ve.log("Loaded",r.size,"variants from IndexedDB for distinct_id",e.distinctId),{flags:r,pendingFirstTimeEvents:e.pendingFirstTimeEvents||{},persistedAtMs:e.persistedAt,ttlMs:i}},this)).catch(h.bind(function(e){return Ve.error("Failed to load persisted variants from IndexedDB, so clearing",e),n()},this))},Jt.prototype.save=function(t,n,i){if(this.getPolicy()===Pt.NETWORK_ONLY)return Promise.resolve();var e={};n.forEach(function(s,o){e[o]={variant_key:s.key,variant_value:s.value,experiment_id:s.experiment_id,is_experiment_active:s.is_experiment_active,is_qa_tester:s.is_qa_tester}});var r={persistedAt:Date.now(),distinctId:t&&t.distinct_id,context:t,flagVariants:e,pendingFirstTimeEvents:i||{}};return this.idb.init().then(h.bind(function(){return this.idb.setItem(this.persistedVariantsKey,r)},this)).then(function(){Ve.log("Saved",n.size,"variants to IndexedDB for distinct_id",r.distinctId)}).catch(function(s){Ve.error("Failed to persist variants to IndexedDB:",s)})},Jt.prototype.clear=function(){return this.isGloballyDisabled()?Promise.resolve():this.idb.init().then(h.bind(function(){return this.idb.removeItem(this.persistedVariantsKey)},this)).then(function(){Ve.log("Cleared persisted variants from IndexedDB")}).catch(function(t){Ve.error("Failed to clear persisted variants from IndexedDB:",t)})};var J=Qe("flags"),ms="flags",ys="context",bC="persistence",hu={};hu[ys]={};var SC=function(t,n){return t+":"+n},CC=function(t){return t.split(":")[0]},EC="FLAG_NOT_FOUND",xn="NOT_READY",Up="BACKEND_ERROR",$t=function(t,n){var i={variant_source:"fallback"};return n&&(i.fallback_reason=n),h.isObject(t)?h.extend({},t,i):h.extend({value:t},i)},A=function(t){this.fetch=C.fetch,this.getFullApiRoute=t.getFullApiRoute,this.getMpConfig=t.getConfigFunc,this.setMpConfig=t.setConfigFunc,this.getMpProperty=t.getPropertyFunc,this.track=t.trackingFunc,this.loadExtraBundle=t.loadExtraBundle||function(){},this.targetingSrc=t.targetingSrc||""};A.prototype.init=function(){if(!this.minApisSupported()){J.critical("Feature Flags unavailable: missing minimum required APIs");return}return this.flags=null,this.trackedFeatures=new Set,this.pendingFirstTimeEvents={},this.activatedFirstTimeEvents={},this._loadedPersistedAtMs=null,this._loadedTtlMs=null,this.persistence=new Jt(this.getConfig(bC),this.getMpConfig("token"),h.bind(function(){return this.getMpConfig("disable_persistence")},this)),this.persistenceLoadedPromise=this.persistence.loadFlagsFromStorage(this._buildContext()).then(h.bind(function(t){t&&(this.flags=t.flags,this.pendingFirstTimeEvents=t.pendingFirstTimeEvents,this._loadedPersistedAtMs=t.persistedAtMs,this._loadedTtlMs=t.ttlMs)},this)),this.persistenceLoadedPromise.then(h.bind(function(){return this.fetchFlags()},this)).catch(function(){J.error("Error initializing feature flags")})},A.prototype._buildContext=function(){return h.extend({distinct_id:this.getMpProperty("distinct_id"),device_id:this.getMpProperty("$device_id")},this.getConfig(ys))},A.prototype.reset=function(){return this.persistence?(this.flags=null,this.pendingFirstTimeEvents={},this.activatedFirstTimeEvents={},this.trackedFeatures=new Set,this.fetchPromise=null,this._fetchInProgressStartTime=null,this._loadedPersistedAtMs=null,this._loadedTtlMs=null,this.persistence.clear().then(h.bind(function(){return this.fetchFlags()},this)).catch(function(){J.error("Error during flags reset")})):Promise.resolve()},A.prototype.getFullConfig=function(){var t=this.getMpConfig(ms);return t?h.isObject(t)?h.extend({},hu,t):hu:{}},A.prototype.getConfig=function(t){return this.getFullConfig()[t]},A.prototype.isSystemEnabled=function(){return!!this.getMpConfig(ms)},A.prototype.updateContext=function(t,n){if(!this.isSystemEnabled())return J.critical("Feature Flags not enabled, cannot update context"),Promise.resolve();var i=this.getMpConfig(ms);h.isObject(i)||(i={});var e=n&&n.replace?{}:this.getConfig(ys);i[ys]=h.extend({},e,t);var r={};return r[ms]=i,this.setMpConfig(r),this.fetchFlags().catch(function(){J.error("Error fetching flags during updateContext")})},A.prototype.areFlagsReady=function(){return this.isSystemEnabled()||J.error("Feature Flags not enabled"),!!this.flags},A.prototype.fetchFlags=function(){if(!this.isSystemEnabled())return Promise.resolve();var t=this._buildContext(),n=t.distinct_id,i=qh();J.log("Fetching flags for distinct ID: "+n);var e=new URLSearchParams;e.set("context",JSON.stringify(t)),e.set("token",this.getMpConfig("token")),e.set("mp_lib","web"),e.set("$lib_version",Ne.LIB_VERSION);var r=this.getFullApiRoute()+"?"+e.toString();return this._fetchInProgressStartTime=Date.now(),this.fetchPromise=this.fetch.call(C,r,{method:"GET",headers:{Authorization:"Basic "+btoa(this.getMpConfig("token")+":"),traceparent:i}}).then(function(s){return this.markFetchComplete(),s.json()}.bind(this)).then(function(s){var o=s.flags;if(!o)throw new Error("No flags in API response");var a=new Map,u={};h.each(o,function(l,f){var p=!1,g=f+":";if(h.each(this.activatedFirstTimeEvents,function(m,d){d.startsWith(g)&&(p=!0)}),p){var v=this.flags&&this.flags.get(f);v&&a.set(f,v)}else a.set(f,{key:l.variant_key,value:l.variant_value,experiment_id:l.experiment_id,is_experiment_active:l.is_experiment_active,is_qa_tester:l.is_qa_tester,variant_source:"network"})},this);var c=s.pending_first_time_events;c&&c.length>0&&h.each(c,function(l){var f=l.flag_key,p=SC(f,l.first_time_event_hash);this.activatedFirstTimeEvents[p]||(u[p]={flag_key:f,flag_id:l.flag_id,project_id:l.project_id,first_time_event_hash:l.first_time_event_hash,event_name:l.event_name,property_filters:l.property_filters,pending_variant:l.pending_variant})},this),this.activatedFirstTimeEvents&&h.each(this.activatedFirstTimeEvents,function(l,f){var p=CC(f);l&&!a.has(p)&&this.flags&&this.flags.has(p)&&a.set(p,this.flags.get(p))},this),this.flags=a,this.trackedFeatures=new Set,this.pendingFirstTimeEvents=u,this._loadedPersistedAtMs=null,this._loadedTtlMs=null,this._traceparent=i,this._loadTargetingIfNeeded(),this.persistence.save(t,this.flags,this.pendingFirstTimeEvents)}.bind(this)).catch(function(s){throw this._fetchInProgressStartTime&&this.markFetchComplete(),J.error(s),s}.bind(this)),this.fetchPromise},A.prototype.loadFlags=function(){return this.isSystemEnabled()?this.trackedFeatures?this._fetchInProgressStartTime?this.fetchPromise:this.fetchFlags():(J.error("loadFlags called before init"),Promise.resolve()):Promise.resolve()},A.prototype.markFetchComplete=function(){if(!this._fetchInProgressStartTime){J.error("Fetch in progress started time not set, cannot mark fetch complete");return}this._fetchStartTime=this._fetchInProgressStartTime,this._fetchCompleteTime=Date.now(),this._fetchLatency=this._fetchCompleteTime-this._fetchStartTime,this._fetchInProgressStartTime=null},A.prototype._loadTargetingIfNeeded=function(){var t=!1;h.each(this.pendingFirstTimeEvents,function(n){n.property_filters&&!h.isEmptyObject(n.property_filters)&&(t=!0)}),t&&this.getTargeting().then(function(){J.log("targeting loaded for property filter evaluation")})},A.prototype.getTargeting=function(){return Lp(this.loadExtraBundle.bind(this),this.targetingSrc).catch(function(t){J.error("Failed to load targeting: "+t)}.bind(this))},A.prototype.checkFirstTimeEvents=function(t,n){return!this.pendingFirstTimeEvents||h.isEmptyObject(this.pendingFirstTimeEvents)?Promise.resolve():C[He]&&h.isFunction(C[He].then)?C[He].then(function(i){return this._processFirstTimeEventCheck(t,n,i)}.bind(this)).catch(function(){return this._processFirstTimeEventCheck(t,n,null)}.bind(this)):this._processFirstTimeEventCheck(t,n,null)},A.prototype._processFirstTimeEventCheck=function(t,n,i){var e=[];return h.each(this.pendingFirstTimeEvents,function(r,s){if(!this.activatedFirstTimeEvents[s]){var o=r.flag_key,a;if(!i&&r.property_filters&&!h.isEmptyObject(r.property_filters)){J.warn('Skipping event check for "'+o+'" - property filters require targeting library');return}if(!i)a={matches:t===r.event_name,error:null};else{var u={event_name:r.event_name,property_filters:r.property_filters};a=i.eventMatchesCriteria(t,n,u)}if(a.error){J.error('Error checking first-time event for flag "'+o+'": '+a.error);return}if(a.matches){J.log('First-time event matched for flag "'+o+'": '+t);var c={key:r.pending_variant.variant_key,value:r.pending_variant.variant_value,experiment_id:r.pending_variant.experiment_id,is_experiment_active:r.pending_variant.is_experiment_active};this.flags.set(o,c),this.trackedFeatures.delete(o),this.activatedFirstTimeEvents[s]=!0,e.push(this.recordFirstTimeEvent(r.flag_id,r.project_id,r.first_time_event_hash))}}},this),Promise.all(e)},A.prototype.getFirstTimeEventApiRoute=function(t){var n=this.getFullApiRoute().replace(/\/$/,"");return n+"/"+t+"/first-time-events"},A.prototype.recordFirstTimeEvent=function(t,n,i){var e=this.getMpProperty("distinct_id"),r=qh(),s=new URLSearchParams;s.set("mp_lib","web"),s.set("$lib_version",Ne.LIB_VERSION);var o=this.getFirstTimeEventApiRoute(t)+"?"+s.toString(),a={distinct_id:e,project_id:n,first_time_event_hash:i};return J.log("Recording first-time event for flag: "+t),this.fetch.call(C,o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Basic "+btoa(this.getMpConfig("token")+":"),traceparent:r},body:JSON.stringify(a)}).catch(function(u){J.error("Failed to record first-time event for flag "+t+": "+u)})},A.prototype.getVariant=function(t,n){if(!this.persistenceLoadedPromise)return new Promise(function(e){J.critical("Feature Flags not initialized"),e($t(n,xn))});var i=this.persistence.getPolicy();return this.persistenceLoadedPromise.then(h.bind(function(){if(i===Pt.PERSISTENCE_UNTIL_NETWORK_SUCCESS)return this.areFlagsReady()&&!this._loadedPersistenceIsStale()?this.getVariantSync(t,n):this.fetchPromise?this.fetchPromise.then(h.bind(function(){return this.getVariantSync(t,n)},this)).catch(function(r){return J.error(r),$t(n,Up)}):$t(n,xn);var e=h.bind(function(){return this.getVariantSync(t,n)},this);return this.fetchPromise?this.fetchPromise.then(e).catch(h.bind(function(r){return J.error(r),this.areFlagsReady()?e():$t(n,Up)},this)):$t(n,xn)},this))},A.prototype._loadedPersistenceIsStale=function(){return!this._loadedPersistedAtMs||!this._loadedTtlMs?!1:Date.now()-this._loadedPersistedAtMs>=this._loadedTtlMs},A.prototype.getVariantSync=function(t,n){if(this._loadedPersistenceIsStale())return J.log('Loaded persisted variants are past TTL so returning fallback for "'+t+'"'),$t(n,xn);if(!this.areFlagsReady())return J.log("Flags not loaded yet"),$t(n,xn);var i=this.flags.get(t);return i?(this.trackFeatureCheck(t,i),i):(J.log('No flag found: "'+t+'"'),$t(n,EC))},A.prototype.getAllVariants=function(){if(!this.persistenceLoadedPromise)return J.critical("Feature Flags not initialized"),Promise.resolve(new Map);var t=this.persistence.getPolicy();return this.persistenceLoadedPromise.then(h.bind(function(){if(t===Pt.PERSISTENCE_UNTIL_NETWORK_SUCCESS)return this.areFlagsReady()&&!this._loadedPersistenceIsStale()?this.getAllVariantsSync():this.fetchPromise?this.fetchPromise.then(h.bind(function(){return this.getAllVariantsSync()},this)).catch(function(i){return J.error(i),new Map}):new Map;var n=h.bind(this.getAllVariantsSync,this);return this.fetchPromise?this.fetchPromise.then(n).catch(n):new Map},this))},A.prototype.getAllVariantsSync=function(){return this._loadedPersistenceIsStale()?(J.log("Loaded persisted variants are past TTL so returning empty Map"),new Map):this.flags||new Map},A.prototype.getVariantValue=function(t,n){return this.getVariant(t,{value:n}).then(function(i){return i.value}).catch(function(i){return J.error(i),n})},A.prototype.getFeatureData=function(t,n){return J.critical("mixpanel.flags.get_feature_data() is deprecated and will be removed in a future release. Use mixpanel.flags.get_variant_value() instead."),this.getVariantValue(t,n)},A.prototype.getVariantValueSync=function(t,n){return this.getVariantSync(t,{value:n}).value},A.prototype.isEnabled=function(t,n){return this.getVariantValue(t).then(function(){return this.isEnabledSync(t,n)}.bind(this)).catch(function(i){return J.error(i),n})},A.prototype.isEnabledSync=function(t,n){n=n||!1;var i=this.getVariantValueSync(t,n);return i!==!0&&i!==!1&&(J.error('Feature flag "'+t+'" value: '+i+" is not a boolean; returning fallback value: "+n),i=n),i};function Nt(t){return t!=null}A.prototype.trackFeatureCheck=function(t,n){if(!this.trackedFeatures.has(t)){this.trackedFeatures.add(t);var i={"Experiment name":t,"Variant name":n.key,$experiment_type:"feature_flag","Variant fetch start time":Nt(this._fetchStartTime)?new Date(this._fetchStartTime).toISOString():null,"Variant fetch complete time":Nt(this._fetchCompleteTime)?new Date(this._fetchCompleteTime).toISOString():null,"Variant fetch latency (ms)":this._fetchLatency,"Variant fetch traceparent":this._traceparent};Nt(n.experiment_id)&&(i.$experiment_id=n.experiment_id),Nt(n.is_experiment_active)&&(i.$is_experiment_active=n.is_experiment_active),Nt(n.is_qa_tester)&&(i.$is_qa_tester=n.is_qa_tester),Nt(n.variant_source)&&(i.$variant_source=n.variant_source),Nt(n.persisted_at_in_ms)&&(i.$persisted_at_in_ms=n.persisted_at_in_ms),Nt(n.ttl_in_ms)&&(i.$ttl_in_ms=n.ttl_in_ms),this.track("$experiment_started",i)}},A.prototype.whenReady=function(){return this.fetchPromise?this.fetchPromise:Promise.resolve()},A.prototype.minApisSupported=function(){return!!this.fetch&&typeof Promise!="undefined"&&typeof Map!="undefined"&&typeof Set!="undefined"},Fa(A),A.prototype.are_flags_ready=A.prototype.areFlagsReady,A.prototype.get_variant=A.prototype.getVariant,A.prototype.get_variant_sync=A.prototype.getVariantSync,A.prototype.get_all_variants=A.prototype.getAllVariants,A.prototype.get_all_variants_sync=A.prototype.getAllVariantsSync,A.prototype.get_variant_value=A.prototype.getVariantValue,A.prototype.get_variant_value_sync=A.prototype.getVariantValueSync,A.prototype.is_enabled=A.prototype.isEnabled,A.prototype.is_enabled_sync=A.prototype.isEnabledSync,A.prototype.load_flags=A.prototype.loadFlags,A.prototype.update_context=A.prototype.updateContext,A.prototype.when_ready=A.prototype.whenReady,A.prototype.get_feature_data=A.prototype.getFeatureData,A.prototype.getTargeting=A.prototype.getTargeting;var IC=Qe("recorder"),Bp="mp_iframe_handshake_request",zp="mp_iframe_handshake_response",xe=function(t){this.mixpanelInstance=t.mixpanelInstance,this.getMpConfig=t.getConfigFunc,this.getTabId=t.getTabIdFunc,this.reportError=t.reportErrorFunc,this.getDistinctId=t.getDistinctIdFunc,this.loadExtraBundle=t.loadExtraBundle,this.recorderSrc=t.recorderSrc,this.targetingSrc=t.targetingSrc,this.libBasePath=t.libBasePath,this._recorder=null,this._parentReplayId=null,this._parentFrameRetryInterval=null};xe.prototype.shouldLoadRecorder=function(){if(this.getMpConfig("disable_persistence"))return L.log("Load recorder check skipped due to disable_persistence config"),U.resolve(!1);var t=new ze(qa,Wa,Ga),n=this.getTabId();return t.init().then(function(){return t.getAll()}).then(function(i){for(var e=0;e0;if(r&&(this._setupParentFrameListener(e),C.parent!==C))return this._setupChildFrameListener(e,i),this._sendParentFrameRequestWithRetry(e),U.resolve();var s=h.isUndefined(n)?this.getMpConfig("record_sessions_percent"):n,o=s>0&&Math.random()*100<=s;return t||o?i(!0):this.shouldLoadRecorder().then(h.bind(function(a){return a?i(!1):U.resolve()},this))},xe.prototype.isRecording=function(){if(!this._recorder||!h.isFunction(this._recorder.isRecording))return!1;try{return this._recorder.isRecording()}catch(t){return this.reportError("Error checking if recording is active",t),!1}},xe.prototype.startRecordingOnEvent=function(t,n){var i=this.isRecording(),e=this.getMpConfig("recording_event_triggers");if(!i&&e){var r=e[t];if(r&&typeof r.percentage=="number"){var s=r.percentage,o=r.property_filters;if(o&&!h.isEmptyObject(o)){var a=this.targetingSrc||this.libBasePath+ku;Lp(this.loadExtraBundle,a).then(function(u){try{var c=u.eventMatchesCriteria(t,n,{event_name:t,property_filters:o});c.matches&&this.checkAndStartSessionRecording(!1,s)}catch(l){L.critical("Could not parse recording event trigger properties logic:",l)}}.bind(this)).catch(function(u){L.critical("Failed to load targeting library:",u)})}else this.checkAndStartSessionRecording(!1,s)}}},xe.prototype.stopSessionRecording=function(){return this._recorder?this._recorder.stopRecording():U.resolve()},xe.prototype.pauseSessionRecording=function(){return this._recorder?this._recorder.pauseRecording():U.resolve()},xe.prototype.resumeSessionRecording=function(){return this._recorder?this._recorder.resumeRecording():U.resolve()},xe.prototype.isRecordingHeatmapData=function(){return this.getSessionReplayId()&&this.getMpConfig("record_heatmap_data")},xe.prototype.getSessionRecordingProperties=function(){var t={},n=this.getSessionReplayId();return n&&(t.$mp_replay_id=n),t},xe.prototype.getSessionReplayUrl=function(){var t=null,n=this.getSessionReplayId();if(n){var i=h.HTTPBuildQuery({replay_id:n,distinct_id:this.getDistinctId(),token:this.getMpConfig("token")});t="https://mixpanel.com/projects/replay-redirect?"+i}return t},xe.prototype.getSessionReplayId=function(){if(this._parentReplayId)return this._parentReplayId;var t=null;return this._recorder&&(t=this._recorder.replayId),t||null},xe.prototype.getRecorder=function(){return this._recorder},xe.prototype._setupChildFrameListener=function(t,n){if(!this._childFrameMessageHandler){var i=this;this._childFrameMessageHandler=function(e){if(t.indexOf(e.origin)!==-1){var r=e.data;r&&r.type===zp&&r.token===i.getMpConfig("token")&&r.replayId&&(i._parentReplayId=r.replayId,r.distinctId&&i.mixpanelInstance.identify(r.distinctId),i._parentFrameRetryActive=!1,C.removeEventListener("message",i._childFrameMessageHandler),i._childFrameMessageHandler=null,n(!0))}},C.addEventListener("message",this._childFrameMessageHandler)}},xe.prototype._sendParentFrameRequest=function(t){var n={};n.type=Bp,n.token=this.getMpConfig("token");for(var i=0;i=i||(n._sendParentFrameRequest(t),r*=2,s())},r)}s()},xe.prototype._setupParentFrameListener=function(t){if(!this._parentFrameMessageHandler){var n=this;this._parentFrameMessageHandler=function(i){if(t.indexOf(i.origin)!==-1){var e=i.data;if(e&&e.type===Bp&&e.token===n.getMpConfig("token")){var r=n.getSessionReplayId();if(r){var s={};s.type=zp,s.token=n.getMpConfig("token"),s.replayId=r,s.distinctId=n.getDistinctId(),i.source.postMessage(s,i.origin)}}}},C.addEventListener("message",this._parentFrameMessageHandler)}},Fa(xe);var dt=function(){};dt.prototype.create_properties=function(){},dt.prototype.event_handler=function(){},dt.prototype.after_track_handler=function(){},dt.prototype.init=function(t){return this.mp=t,this},dt.prototype.track=function(t,n,i,e){var r=this,s=h.dom_query(t);if(s.length===0){L.error("The DOM query ("+t+") returned 0 elements");return}return h.each(s,function(o){h.register_event(o,this.override_event,function(a){var u={},c=r.create_properties(i,this),l=r.mp.get_config("track_links_timeout");r.event_handler(a,this,u),C.setTimeout(r.track_callback(e,c,u,!0),l),r.mp.track(n,c,r.track_callback(e,c,u))})},this),!0},dt.prototype.track_callback=function(t,n,i,e){e=e||!1;var r=this;return function(){i.callback_fired||(i.callback_fired=!0,!(t&&t(e,n)===!1)&&r.after_track_handler(n,i,e))}},dt.prototype.create_properties=function(t,n){var i;return typeof t=="function"?i=t(n):i=h.extend({},t),i};var Pr=function(){this.override_event="click"};h.inherit(Pr,dt),Pr.prototype.create_properties=function(t,n){var i=Pr.superclass.create_properties.apply(this,arguments);return n.href&&(i.url=n.href),i},Pr.prototype.event_handler=function(t,n,i){i.new_tab=t.which===2||t.metaKey||t.ctrlKey||n.target==="_blank",i.href=n.href,i.new_tab||t.preventDefault()},Pr.prototype.after_track_handler=function(t,n){n.new_tab||!n.href||setTimeout(function(){C.location=n.href},0)};var _s=function(){this.override_event="submit"};h.inherit(_s,dt),_s.prototype.event_handler=function(t,n,i){i.element=n,t.preventDefault()},_s.prototype.after_track_handler=function(t,n){setTimeout(function(){n.element.submit()},0)};var Lt="$set",$r="$set_once",je="$unset",Xt="$add",it="$append",Zt="$union",vt="$remove",OC="$delete",qp={set_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[Lt]=e,i},unset_action:function(t){var n={},i=[];return h.isArray(t)||(t=[t]),h.each(t,function(e){this._is_reserved_property(e)||i.push(e)},this),n[je]=i,n},set_once_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[$r]=e,i},union_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=h.isArray(r)?r:[r])},this):e[t]=h.isArray(n)?n:[n],i[Zt]=e,i},append_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[it]=e,i},remove_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[vt]=e,i},delete_action:function(){var t={};return t[OC]="",t}};function Me(){}h.extend(Me.prototype,qp),Me.prototype._init=function(t,n,i){this._mixpanel=t,this._group_key=n,this._group_id=i},Me.prototype.set=Rr(function(t,n,i){var e=this.set_action(t,n);return h.isObject(t)&&(i=n),this._send_request(e,i)}),Me.prototype.set_once=Rr(function(t,n,i){var e=this.set_once_action(t,n);return h.isObject(t)&&(i=n),this._send_request(e,i)}),Me.prototype.unset=Rr(function(t,n){var i=this.unset_action(t);return this._send_request(i,n)}),Me.prototype.union=Rr(function(t,n,i){h.isObject(t)&&(i=n);var e=this.union_action(t,n);return this._send_request(e,i)}),Me.prototype.delete=Rr(function(t){var n=this.delete_action();return this._send_request(n,t)}),Me.prototype.remove=Rr(function(t,n,i){var e=this.remove_action(t,n);return this._send_request(e,i)}),Me.prototype._send_request=function(t,n){t.$group_key=this._group_key,t.$group_id=this._group_id,t.$token=this._get_config("token");var i=h.encodeDates(t);return this._mixpanel._track_or_batch({type:"groups",data:i,endpoint:this._mixpanel.get_api_host("groups")+"/"+this._get_config("api_routes").groups,batcher:this._mixpanel.request_batchers.groups},n)},Me.prototype._is_reserved_property=function(t){return t==="$group_key"||t==="$group_id"},Me.prototype._get_config=function(t){return this._mixpanel.get_config(t)},Me.prototype.toString=function(){return this._mixpanel.toString()+".group."+this._group_key+"."+this._group_id};var st=Me.prototype;st.remove=st.remove,st.set=st.set,st.set_once=st.set_once,st.union=st.union,st.unset=st.unset,Me.prototype.toString=Me.prototype.toString;function he(){}h.extend(he.prototype,qp),he.prototype._init=function(t){this._mixpanel=t},he.prototype.set=Mt(function(t,n,i){var e=this.set_action(t,n);return h.isObject(t)&&(i=n),this._get_config("save_referrer")&&this._mixpanel.persistence.update_referrer_info(document.referrer),e[Lt]=h.extend({},h.info.people_properties(),e[Lt]),this._send_request(e,i)}),he.prototype.set_once=Mt(function(t,n,i){var e=this.set_once_action(t,n);return h.isObject(t)&&(i=n),this._send_request(e,i)}),he.prototype.unset=Mt(function(t,n){var i=this.unset_action(t);return this._send_request(i,n)}),he.prototype.increment=Mt(function(t,n,i){var e={},r={};return h.isObject(t)?(h.each(t,function(s,o){if(!this._is_reserved_property(o))if(isNaN(parseFloat(s))){L.error("Invalid increment value passed to mixpanel.people.increment - must be a number");return}else r[o]=s},this),i=n):(h.isUndefined(n)&&(n=1),r[t]=n),e[Xt]=r,this._send_request(e,i)}),he.prototype.append=Mt(function(t,n,i){h.isObject(t)&&(i=n);var e=this.append_action(t,n);return this._send_request(e,i)}),he.prototype.remove=Mt(function(t,n,i){h.isObject(t)&&(i=n);var e=this.remove_action(t,n);return this._send_request(e,i)}),he.prototype.union=Mt(function(t,n,i){h.isObject(t)&&(i=n);var e=this.union_action(t,n);return this._send_request(e,i)}),he.prototype.track_charge=Mt(function(t,n,i){L.error("mixpanel.people.track_charge() is deprecated and no longer has any effect.")}),he.prototype.clear_charges=function(t){return this.set("$transactions",[],t)},he.prototype.delete_user=function(){if(!this._identify_called()){L.error("mixpanel.people.delete_user() requires you to call identify() first");return}var t={$delete:this._mixpanel.get_distinct_id()};return this._send_request(t)},he.prototype.toString=function(){return this._mixpanel.toString()+".people"},he.prototype._send_request=function(t,n){t.$token=this._get_config("token"),t.$distinct_id=this._mixpanel.get_distinct_id();var i=this._mixpanel.get_property("$device_id"),e=this._mixpanel.get_property("$user_id"),r=this._mixpanel.get_property("$had_persisted_distinct_id");i&&(t.$device_id=i),e&&(t.$user_id=e),r&&(t.$had_persisted_distinct_id=r);var s=h.encodeDates(t);return this._identify_called()?this._mixpanel._track_or_batch({type:"people",data:s,endpoint:this._mixpanel.get_api_host("people")+"/"+this._get_config("api_routes").engage,batcher:this._mixpanel.request_batchers.people},n):(this._enqueue(s),h.isUndefined(n)||(this._get_config("verbose")?n({status:-1,error:null}):n(-1)),h.truncate(s,255))},he.prototype._get_config=function(t){return this._mixpanel.get_config(t)},he.prototype._identify_called=function(){return this._mixpanel._flags.identify_called===!0},he.prototype._enqueue=function(t){Lt in t?this._mixpanel.persistence._add_to_people_queue(Lt,t):$r in t?this._mixpanel.persistence._add_to_people_queue($r,t):je in t?this._mixpanel.persistence._add_to_people_queue(je,t):Xt in t?this._mixpanel.persistence._add_to_people_queue(Xt,t):it in t?this._mixpanel.persistence._add_to_people_queue(it,t):vt in t?this._mixpanel.persistence._add_to_people_queue(vt,t):Zt in t?this._mixpanel.persistence._add_to_people_queue(Zt,t):L.error("Invalid call to _enqueue():",t)},he.prototype._flush_one_queue=function(t,n,i,e){var r=this,s=h.extend({},this._mixpanel.persistence.load_queue(t)),o=s;!h.isUndefined(s)&&h.isObject(s)&&!h.isEmptyObject(s)&&(r._mixpanel.persistence._pop_from_people_queue(t,s),r._mixpanel.persistence.save(),e&&(o=e(s)),n.call(r,o,function(a,u){a===0&&r._mixpanel.persistence._add_to_people_queue(t,s),h.isUndefined(i)||i(a,u)}))},he.prototype._flush=function(t,n,i,e,r,s,o){var a=this;this._flush_one_queue(Lt,this.set,t),this._flush_one_queue($r,this.set_once,e),this._flush_one_queue(je,this.unset,s,function(d){return h.keys(d)}),this._flush_one_queue(Xt,this.increment,n),this._flush_one_queue(Zt,this.union,r);var u=this._mixpanel.persistence.load_queue(it);if(!h.isUndefined(u)&&h.isArray(u)&&u.length)for(var c,l=function(d,y){d===0&&a._mixpanel.persistence._add_to_people_queue(it,c),h.isUndefined(i)||i(d,y)},f=u.length-1;f>=0;f--)u=this._mixpanel.persistence.load_queue(it),c=u.pop(),a._mixpanel.persistence.save(),h.isEmptyObject(c)||a.append(c,l);var p=this._mixpanel.persistence.load_queue(vt);if(!h.isUndefined(p)&&h.isArray(p)&&p.length)for(var g,v=function(d,y){d===0&&a._mixpanel.persistence._add_to_people_queue(vt,g),h.isUndefined(o)||o(d,y)},m=p.length-1;m>=0;m--)p=this._mixpanel.persistence.load_queue(vt),g=p.pop(),a._mixpanel.persistence.save(),h.isEmptyObject(g)||a.remove(g,v)},he.prototype._is_reserved_property=function(t){return t==="$distinct_id"||t==="$token"||t==="$device_id"||t==="$user_id"||t==="$had_persisted_distinct_id"};var Ie=he.prototype;Ie.set=Ie.set,Ie.set_once=Ie.set_once,Ie.unset=Ie.unset,Ie.increment=Ie.increment,Ie.append=Ie.append,Ie.remove=Ie.remove,Ie.union=Ie.union,Ie.track_charge=Ie.track_charge,Ie.clear_charges=Ie.clear_charges,Ie.delete_user=Ie.delete_user,he.prototype.toString=he.prototype.toString;var pu="__mps",du="__mpso",vu="__mpus",gu="__mpa",mu="__mpap",yu="__mpr",_u="__mpu",Wp="$people_distinct_id",ws="__alias",kn="__timers",xC=[pu,du,vu,gu,mu,yu,_u,Wp,ws,kn],q=function(t){this.props={},this.campaign_params_saved=!1,t.persistence_name?this.name="mp_"+t.persistence_name:this.name="mp_"+t.token+"_mixpanel";var n=t.persistence;n!=="cookie"&&n!=="localStorage"&&(L.critical("Unknown persistence type "+n+"; falling back to cookie"),n=t.persistence="cookie"),n==="localStorage"&&h.localStorage.is_supported()?this.storage=h.localStorage:this.storage=h.cookie,this.load(),this.update_config(t),this.upgrade(),this.save()};q.prototype.properties=function(){var t={};return this.load(),h.each(this.props,function(n,i){h.include(xC,i)||(t[i]=n)}),t},q.prototype.load=function(){if(!this.disabled){var t=this.storage.parse(this.name);t&&(this.props=h.extend({},t))}},q.prototype.upgrade=function(){var t,n;this.storage===h.localStorage?(t=h.cookie.parse(this.name),h.cookie.remove(this.name),h.cookie.remove(this.name,!0),t&&this.register_once(t)):this.storage===h.cookie&&(n=h.localStorage.parse(this.name),h.localStorage.remove(this.name),n&&this.register_once(n))},q.prototype.save=function(){this.disabled||this.storage.set(this.name,kr(this.props),this.expire_days,this.cross_subdomain,this.secure,this.cross_site,this.cookie_domain)},q.prototype.load_prop=function(t){return this.load(),this.props[t]},q.prototype.remove=function(){this.storage.remove(this.name,!1,this.cookie_domain),this.storage.remove(this.name,!0,this.cookie_domain)},q.prototype.clear=function(){this.remove(),this.props={}},q.prototype.register_once=function(t,n,i){return h.isObject(t)?(typeof n=="undefined"&&(n="None"),this.expire_days=typeof i=="undefined"?this.default_expiry:i,this.load(),h.each(t,function(e,r){(!this.props.hasOwnProperty(r)||this.props[r]===n)&&(this.props[r]=e)},this),this.save(),!0):!1},q.prototype.register=function(t,n){return h.isObject(t)?(this.expire_days=typeof n=="undefined"?this.default_expiry:n,this.load(),h.extend(this.props,t),this.save(),!0):!1},q.prototype.unregister=function(t){this.load(),t in this.props&&(delete this.props[t],this.save())},q.prototype.update_search_keyword=function(t){this.register(h.info.searchInfo(t))},q.prototype.update_referrer_info=function(t){this.register_once({$initial_referrer:t||"$direct",$initial_referring_domain:h.info.referringDomain(t)||"$direct"},"")},q.prototype.get_referrer_info=function(){return h.strip_empty_properties({$initial_referrer:this.props.$initial_referrer,$initial_referring_domain:this.props.$initial_referring_domain})},q.prototype.update_config=function(t){this.default_expiry=this.expire_days=t.cookie_expiration,this.set_disabled(t.disable_persistence),this.set_cookie_domain(t.cookie_domain),this.set_cross_site(t.cross_site_cookie),this.set_cross_subdomain(t.cross_subdomain_cookie),this.set_secure(t.secure_cookie)},q.prototype.set_disabled=function(t){this.disabled=t,this.disabled?this.remove():this.save()},q.prototype.set_cookie_domain=function(t){t!==this.cookie_domain&&(this.remove(),this.cookie_domain=t,this.save())},q.prototype.set_cross_site=function(t){t!==this.cross_site&&(this.cross_site=t,this.remove(),this.save())},q.prototype.set_cross_subdomain=function(t){t!==this.cross_subdomain&&(this.cross_subdomain=t,this.remove(),this.save())},q.prototype.get_cross_subdomain=function(){return this.cross_subdomain},q.prototype.set_secure=function(t){t!==this.secure&&(this.secure=!!t,this.remove(),this.save())},q.prototype._add_to_people_queue=function(t,n){var i=this._get_queue_key(t),e=n[t],r=this._get_or_create_queue(Lt),s=this._get_or_create_queue($r),o=this._get_or_create_queue(je),a=this._get_or_create_queue(Xt),u=this._get_or_create_queue(Zt),c=this._get_or_create_queue(vt,[]),l=this._get_or_create_queue(it,[]);i===pu?(h.extend(r,e),this._pop_from_people_queue(Xt,e),this._pop_from_people_queue(Zt,e),this._pop_from_people_queue(je,e)):i===du?(h.each(e,function(f,p){p in s||(s[p]=f)}),this._pop_from_people_queue(je,e)):i===vu?h.each(e,function(f){h.each([r,s,a,u],function(p){f in p&&delete p[f]}),h.each(l,function(p){f in p&&delete p[f]}),o[f]=!0}):i===gu?(h.each(e,function(f,p){p in r?r[p]+=f:(p in a||(a[p]=0),a[p]+=f)},this),this._pop_from_people_queue(je,e)):i===_u?(h.each(e,function(f,p){h.isArray(f)&&(p in u||(u[p]=[]),h.each(f,function(g){h.include(u[p],g)||u[p].push(g)}))}),this._pop_from_people_queue(je,e)):i===yu?(c.push(e),this._pop_from_people_queue(it,e)):i===mu&&(l.push(e),this._pop_from_people_queue(je,e)),L.log("MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):"),L.log(n),this.save()},q.prototype._pop_from_people_queue=function(t,n){var i=this.props[this._get_queue_key(t)];h.isUndefined(i)||h.each(n,function(e,r){t===it||t===vt?h.each(i,function(s){s[r]===e&&delete s[r]}):delete i[r]},this)},q.prototype.load_queue=function(t){return this.load_prop(this._get_queue_key(t))},q.prototype._get_queue_key=function(t){if(t===Lt)return pu;if(t===$r)return du;if(t===je)return vu;if(t===Xt)return gu;if(t===it)return mu;if(t===vt)return yu;if(t===Zt)return _u;L.error("Invalid queue:",t)},q.prototype._get_or_create_queue=function(t,n){var i=this._get_queue_key(t);return n=h.isUndefined(n)?{}:n,this.props[i]||(this.props[i]=n)},q.prototype.set_event_timer=function(t,n){var i=this.load_prop(kn)||{};i[t]=n,this.props[kn]=i,this.save()},q.prototype.remove_event_timer=function(t){var n=this.load_prop(kn)||{},i=n[t];return h.isUndefined(i)||(delete this.props[kn][t],this.save()),i};var bs,wu=function(t,n){throw new Error(t+" not available in this build.")},Se,Gp=0,Vp=1,Fe="mixpanel",jp="base64",kC="json",bu="$device:",RC="strict",AC="fallback",MC="disabled",Nr=C.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest,Hp=!Nr&&Ze.indexOf("MSIE")===-1&&Ze.indexOf("Mozilla")===-1,Ss=null;ft.sendBeacon&&(Ss=function(){return ft.sendBeacon.apply(ft,arguments)});var Kp={track:"track/",engage:"engage/",groups:"groups/",record:"record/",flags:"flags/",settings:"settings/"},Su={api_host:"https://api-js.mixpanel.com",api_hosts:{},api_routes:Kp,api_extra_query_params:{},api_method:"POST",api_transport:"XHR",api_payload_format:jp,app_host:"https://mixpanel.com",autocapture:!1,cdn:"https://cdn.mxpnl.com",cross_site_cookie:!1,cross_subdomain_cookie:!0,error_reporter:Rt,flags:!1,persistence:"cookie",persistence_name:"",cookie_domain:"",cookie_name:"",loaded:Rt,mp_loader:null,track_marketing:!0,track_pageview:!1,skip_first_touch_marketing:!1,store_google:!0,stop_utm_persistence:!1,save_referrer:!0,test:!1,verbose:!1,img:!1,debug:!1,track_links_timeout:300,cookie_expiration:365,upgrade:!1,disable_persistence:!1,disable_cookie:!1,secure_cookie:!1,ip:!0,opt_out_tracking_by_default:!1,opt_out_persistence_by_default:!1,opt_out_tracking_persistence_type:"localStorage",opt_out_tracking_cookie_prefix:null,property_blacklist:[],xhr_headers:{},ignore_dnt:!1,batch_requests:!0,batch_size:50,batch_flush_interval_ms:5e3,batch_request_timeout_ms:9e4,batch_autostart:!0,hooks:{},record_allowed_iframe_origins:[],record_block_class:new RegExp("^(mp-block|fs-exclude|amp-block|rr-block|ph-no-capture)$"),record_block_selector:"img, video, audio",record_canvas:!1,record_collect_fonts:!1,record_console:!0,record_heatmap_data:!1,recording_event_triggers:{},record_idle_timeout_ms:1800*1e3,record_mask_inputs:!0,record_max_ms:_n,record_min_ms:0,record_network:!1,record_network_options:{},record_sessions_percent:0,recorder_src:null,targeting_src:null,lib_base_path:"https://cdn.mxpnl.com/libs/",remote_settings_mode:MC},Yp=!1;function k(){}var Cs=function(t,n,i){var e,r=i===Fe?Se:Se[i];if(r&&bs===Gp)e=r;else{if(r&&!h.isArray(r)){L.error("You have already initialized "+i);return}e=new k}if(e._cached_groups={},e._init(t,n,i),e.people=new he,e.people._init(e),!e.get_config("skip_first_touch_marketing")){var s=h.info.campaignParams(null),o={},a=!1;h.each(s,function(c,l){o["initial_"+l]=c,c&&(a=!0)}),a&&e.people.set_once(o)}Ne.DEBUG=Ne.DEBUG||e.get_config("debug");var u=bs===Gp?"module":"snippet";return C.dispatchEvent(new C.CustomEvent("$mp_sdk_to_extension_event",{detail:{instance:e,source:u,token:t,name:i,info:h.info}})),!h.isUndefined(r)&&h.isArray(r)&&(e._execute_array.call(e.people,r.people),e._execute_array(r)),e};k.prototype.init=function(t,n,i){if(h.isUndefined(i)){this.report_error("You must name your new library: init(token, config, name)");return}if(i===Fe){this.report_error("You must initialize the main mixpanel object right after you include the Mixpanel js snippet");return}var e=Cs(t,n,i);return Se[i]=e,e._loaded(),e},k.prototype._init=function(t,n,i){n=n||{},this.__loaded=!0,this.config={};var e={};if(!("api_payload_format"in n)){var r=n.api_host||Su.api_host;r.match(/\.mixpanel\.com/)&&(e.api_payload_format=kC)}if(this.hooks={},this.set_config(h.extend({},Su,e,n,{name:i,token:t,callback_fn:(i===Fe?i:Fe+"."+i)+"._jsc"})),this.recorderManager=new xe({mixpanelInstance:this,getConfigFunc:h.bind(this.get_config,this),setConfigFunc:h.bind(this.set_config,this),getTabIdFunc:h.bind(this.get_tab_id,this),reportErrorFunc:h.bind(this.report_error,this),getDistinctIdFunc:h.bind(this.get_distinct_id,this),recorderSrc:this.get_config("recorder_src"),targetingSrc:this.get_config("targeting_src"),libBasePath:this.get_config("lib_base_path"),loadExtraBundle:wu}),this._jsc=Rt,this.__dom_loaded_queue=[],this.__request_queue=[],this.__disabled_events=[],this._flags={disable_all_events:!1,identify_called:!1},this._remote_settings_strict_disabled=!1,this.request_batchers={},this._batch_requests=this.get_config("batch_requests"),this._batch_requests){if(!h.localStorage.is_supported(!0)||!Nr)this._batch_requests=!1,L.log("Turning off Mixpanel request-queueing; needs XHR and localStorage support"),h.each(this.get_batcher_configs(),function(u){L.log("Clearing batch queue "+u.queue_key),h.localStorage.remove(u.queue_key)});else if(this.init_batchers(),Ss&&C.addEventListener){var s=h.bind(function(){this.request_batchers.events.stopped||this.request_batchers.events.flush({unloading:!0})},this);C.addEventListener("pagehide",function(u){u.persisted&&s()}),C.addEventListener("visibilitychange",function(){B.visibilityState==="hidden"&&s()})}}this.persistence=this.cookie=new q(this.config),this.unpersisted_superprops={},this._gdpr_init();var o=h.UUID();this.get_distinct_id()||this.register_once({distinct_id:bu+o,$device_id:o},""),this.flags=new A({getFullApiRoute:h.bind(function(){return this.get_api_host("flags")+"/"+this.get_config("api_routes").flags},this),getConfigFunc:h.bind(this.get_config,this),setConfigFunc:h.bind(this.set_config,this),getPropertyFunc:h.bind(this.get_property,this),trackingFunc:h.bind(this.track,this),loadExtraBundle:wu,targetingSrc:this.get_config("targeting_src")||this.get_config("lib_base_path")+ku}),this.flags.init(),this.flags=this.flags,this._init_tab_id();var a=this.get_config("remote_settings_mode");a===RC||a===AC?this.__session_recording_init_promise=this._fetch_remote_settings(a).then(h.bind(function(){return this._check_and_start_session_recording()},this)):this.__session_recording_init_promise=this._check_and_start_session_recording(),this.autocapture=new be(this),this.autocapture.init()},k.prototype._init_tab_id=function(){if(this.get_config("disable_persistence"))L.log("Tab ID initialization skipped due to disable_persistence config");else if(h.sessionStorage.is_supported())try{var t=this.get_config("name")+"_"+this.get_config("token"),n="mp_tab_id_"+t,i="mp_gen_new_tab_id_"+t;(h.sessionStorage.get(i)||!h.sessionStorage.get(n))&&h.sessionStorage.set(n,"$tab-"+h.UUID()),h.sessionStorage.set(i,"1"),this.tab_id=h.sessionStorage.get(n),C.addEventListener("beforeunload",function(){h.sessionStorage.remove(i)})}catch(e){this.report_error("Error initializing tab id",e)}else this.report_error("Session storage is not supported, cannot keep track of unique tab ID.")},k.prototype.get_tab_id=function(){return this.tab_id||null},k.prototype._check_and_start_session_recording=At(function(t){return this.recorderManager.checkAndStartSessionRecording(t)}),k.prototype._start_recording_on_event=Ht(function(t,n){this.__session_recording_init_promise&&this.__session_recording_init_promise.then(h.bind(function(){if(!this._remote_settings_strict_disabled)return this.recorderManager.startRecordingOnEvent(t,n)},this))}),k.prototype.start_session_recording=function(){return this._check_and_start_session_recording(!0)},k.prototype.stop_session_recording=function(){return this.recorderManager.stopSessionRecording()},k.prototype.pause_session_recording=function(){return this.recorderManager.pauseSessionRecording()},k.prototype.resume_session_recording=function(){return this.recorderManager.resumeSessionRecording()},k.prototype.is_recording_heatmap_data=function(){return this.recorderManager.isRecordingHeatmapData()},k.prototype.get_session_recording_properties=function(){return this.recorderManager.getSessionRecordingProperties()},k.prototype.get_session_replay_url=function(){return this.recorderManager.getSessionReplayUrl()},k.prototype.__get_recorder=function(){return this.recorderManager.getRecorder()},k.prototype.__get_recording_init_promise=function(){return this.__session_recording_init_promise},k.prototype._loaded=function(){if(this.get_config("loaded")(this),this._set_default_superprops(),this.people.set_once(this.persistence.get_referrer_info()),this.get_config("store_google")&&this.get_config("stop_utm_persistence")){var t=h.info.campaignParams(null);h.each(t,function(n,i){this.unregister(i)}.bind(this))}},k.prototype._set_default_superprops=function(){this.persistence.update_search_keyword(B.referrer),this.get_config("store_google")&&!this.get_config("stop_utm_persistence")&&this.register(h.info.campaignParams()),this.get_config("save_referrer")&&this.persistence.update_referrer_info(B.referrer)},k.prototype._dom_loaded=function(){h.each(this.__dom_loaded_queue,function(t){this._track_dom.apply(this,t)},this),this.has_opted_out_tracking()||h.each(this.__request_queue,function(t){this._send_request.apply(this,t)},this),delete this.__dom_loaded_queue,delete this.__request_queue},k.prototype._track_dom=function(t,n){if(this.get_config("img"))return this.report_error("You can't use DOM tracking functions with img = true."),!1;if(!Yp)return this.__dom_loaded_queue.push([t,n]),!1;var i=new t().init(this);return i.track.apply(i,n)},k.prototype._prepare_callback=function(t,n){if(h.isUndefined(t))return null;if(Nr){var i=function(o){t(o,n)};return i}else{var e=this._jsc,r=""+Math.floor(Math.random()*1e8),s=this.get_config("callback_fn")+"["+r+"]";return e[r]=function(o){delete e[r],t(o,n)},s}},k.prototype._send_request=function(t,n,i,e){var r=!0;if(Hp)return this.__request_queue.push(arguments),r;var s={method:this.get_config("api_method"),transport:this.get_config("api_transport"),verbose:this.get_config("verbose")},o=null;!e&&(h.isFunction(i)||typeof i=="string")&&(e=i,i=null),i=h.extend(s,i||{}),Nr||(i.method="GET");var a=i.method==="POST",u=Ss&&a&&i.transport.toLowerCase()==="sendbeacon",c=i.verbose;n.verbose&&(c=!0),this.get_config("test")&&(n.test=1),c&&(n.verbose=1),this.get_config("img")&&(n.img=1),Nr||(e?n.callback=e:(c||this.get_config("test"))&&(n.callback="(function(){})")),n.ip=this.get_config("ip")?1:0,n._=new Date().getTime().toString(),a&&(o="data="+encodeURIComponent(n.data),delete n.data),h.extend(n,this.get_config("api_extra_query_params")),t+="?"+h.HTTPBuildQuery(n);var l=this;if("img"in n){var f=B.createElement("img");f.src=t,B.body.appendChild(f)}else if(u){try{r=Ss(t,o)}catch(y){l.report_error(y),r=!1}try{e&&e(r?1:0)}catch(y){l.report_error(y)}}else if(Nr)try{var p=new XMLHttpRequest;p.open(i.method,t,!0);var g=this.get_config("xhr_headers");if(a&&(g["Content-Type"]="application/x-www-form-urlencoded"),h.each(g,function(y,_){p.setRequestHeader(_,y)}),i.timeout_ms&&typeof p.timeout!="undefined"){p.timeout=i.timeout_ms;var v=new Date().getTime()}p.withCredentials=!0,p.onreadystatechange=function(){if(p.readyState===4)if(p.status===200){if(e)if(c){var y;try{y=h.JSONDecode(p.responseText)}catch(S){if(l.report_error(S),i.ignore_json_errors)y=p.responseText;else return}e(y)}else e(Number(p.responseText))}else{var _;if(p.timeout&&!p.status&&new Date().getTime()-v>=p.timeout?_="timeout":_="Bad HTTP status: "+p.status+" "+p.statusText,l.report_error(_),e)if(c){var w=p.responseHeaders||{};e({status:0,httpStatusCode:p.status,error:_,retryAfter:w["Retry-After"]})}else e(0)}},p.send(o)}catch(y){l.report_error(y),r=!1}else{var m=B.createElement("script");m.type="text/javascript",m.async=!0,m.defer=!0,m.src=t;var d=B.getElementsByTagName("script")[0];d.parentNode.insertBefore(m,d)}return r},k.prototype._fetch_remote_settings=function(t){var n=this,i=function(){t==="strict"&&(n.set_config({record_sessions_percent:0}),n._remote_settings_strict_disabled=!0)};if(!C.AbortController)return L.critical("Remote settings unavailable: missing minimum required APIs"),i(),Promise.resolve();var e=this.get_api_host("settings")+"/"+this.get_config("api_routes").settings,r={$lib_version:Ne.LIB_VERSION,mp_lib:"web",sdk_config:"1"},s=h.HTTPBuildQuery(r),o=e+"?"+s,a=new AbortController,u=setTimeout(function(){a.abort()},500),c={method:"GET",headers:{Authorization:"Basic "+btoa(n.get_config("token")+":")},signal:a.signal};return C.fetch(o,c).then(function(l){if(clearTimeout(u),!l.ok){L.critical("Network response was not ok"),i();return}return l.json()}).then(function(l){if(l&&l.sdk_config&&l.sdk_config.config){var f=l.sdk_config.config,p={};h.each(f,function(g,v){Su.hasOwnProperty(v)&&(p[v]=g)}),h.isEmptyObject(p)?(L.critical("No valid config keys found in remote settings."),i()):n.set_config(p)}else i()}).catch(function(l){clearTimeout(u),L.critical("Failed to fetch remote settings",l),i()})},k.prototype._execute_array=function(t){var n,i=[],e=[],r=[];h.each(t,function(o){o&&(n=o[0],h.isArray(n)?r.push(o):typeof o=="function"?o.call(this):h.isArray(o)&&n==="alias"?i.push(o):h.isArray(o)&&n.indexOf("track")!==-1&&typeof this[n]=="function"?r.push(o):e.push(o))},this);var s=function(o,a){h.each(o,function(u){if(h.isArray(u[0])){var c=a;h.each(u,function(l){c=c[l[0]].apply(c,l.slice(1))})}else this[u[0]].apply(this,u.slice(1))},a)};s(i,this),s(e,this),s(r,this)},k.prototype.are_batchers_initialized=function(){return!!this.request_batchers.events},k.prototype.get_batcher_configs=function(){var t="__mpq_"+this.get_config("token");return this._batcher_configs=this._batcher_configs||{events:{type:"events",api_name:"track",queue_key:t+"_ev"},people:{type:"people",api_name:"engage",queue_key:t+"_pp"},groups:{type:"groups",api_name:"groups",queue_key:t+"_gr"}},this._batcher_configs},k.prototype.init_batchers=function(){if(!this.are_batchers_initialized()){var t=h.bind(function(i){return new qe(i.queue_key,{libConfig:this.config,errorReporter:this.get_config("error_reporter"),sendRequestFunc:h.bind(function(e,r,s){var o=this.get_config("api_routes");this._send_request(this.get_api_host(i.api_name)+"/"+o[i.api_name],this._encode_data_for_request(e),r,this._prepare_callback(s,e))},this),beforeSendHook:h.bind(function(e){var r=this._run_hook("before_send_"+i.type,e);return r?r[0]:null},this),stopAllBatchingFunc:h.bind(this.stop_batch_senders,this),usePersistence:!0})},this),n=this.get_batcher_configs();this.request_batchers={events:t(n.events),people:t(n.people),groups:t(n.groups)}}this.get_config("batch_autostart")&&this.start_batch_senders()},k.prototype.start_batch_senders=function(){this._batchers_were_started=!0,this.are_batchers_initialized()&&(this._batch_requests=!0,h.each(this.request_batchers,function(t){t.start()}))},k.prototype.stop_batch_senders=function(){this._batch_requests=!1,h.each(this.request_batchers,function(t){t.stop(),t.clear()})},k.prototype.push=function(t){this._execute_array([t])},k.prototype.enable=function(t){var n,i,e,r;if(typeof t=="undefined")this._flags.disable_all_events=!1;else{for(n={},i=[],e=0;e-1&&(e.splice(r,1),this.register({group_key:e})),e.length===0&&this.unregister(t)}return this.people.remove(t,n,i)}),k.prototype.track_with_groups=At(function(t,n,i,e){var r=h.extend({},n||{});return h.each(i,function(s,o){s!=null&&(r[o]=s)}),this.track(t,r,e)}),k.prototype._create_map_key=function(t,n){return t+"_"+JSON.stringify(n)},k.prototype._remove_group_from_cache=function(t,n){delete this._cached_groups[this._create_map_key(t,n)]},k.prototype.get_group=function(t,n){var i=this._create_map_key(t,n),e=this._cached_groups[i];return(e===void 0||e._group_key!==t||e._group_id!==n)&&(e=new Me,e._init(this,t,n),this._cached_groups[i]=e),e},k.prototype.track_pageview=At(function(t,n){typeof t!="object"&&(t={}),n=n||{};var i=n.event_name||"$mp_web_page_view",e=h.extend(h.info.mpPageViewProperties(),h.info.campaignParams(),h.info.clickParams()),r=h.extend({},e,t);return this.is_recording_heatmap_data()&&(r.$captured_for_heatmap=!0),this.track(i,r)}),k.prototype.track_links=function(t,n,i){return this._track_dom.call(this,Pr,arguments)},k.prototype.track_forms=function(t,n,i){return this._track_dom.call(this,_s,arguments)},k.prototype.time_event=function(t){if(h.isUndefined(t)){this.report_error("No event name provided to mixpanel.time_event");return}this._event_is_disabled(t)||this.persistence.set_event_timer(t,new Date().getTime())};var TC={persistent:!0},Cu=function(t){var n;return h.isObject(t)?n=t:h.isUndefined(t)?n={}:n={days:t},h.extend({},TC,n)};k.prototype.register=function(t,n){var i=this._run_hook("before_register",t,n);if(i!==null){t=i[0],n=i[1];var e=Cu(n);e.persistent?this.persistence.register(t,e.days):h.extend(this.unpersisted_superprops,t)}},k.prototype.register_once=function(t,n,i){var e=this._run_hook("before_register_once",t,n,i);if(e!==null){t=e[0],n=e[1],i=e[2];var r=Cu(i);r.persistent?this.persistence.register_once(t,n,r.days):(typeof n=="undefined"&&(n="None"),h.each(t,function(s,o){(!this.unpersisted_superprops.hasOwnProperty(o)||this.unpersisted_superprops[o]===n)&&(this.unpersisted_superprops[o]=s)},this))}},k.prototype.unregister=function(t,n){var i=this._run_hook("before_unregister",t,n);i!==null&&(t=i[0],n=i[1],n=Cu(n),n.persistent?this.persistence.unregister(t):delete this.unpersisted_superprops[t])},k.prototype._register_single=function(t,n){var i={};i[t]=n,this.register(i)},k.prototype.identify=function(t,n,i,e,r,s,o,a){var u=this._run_hook("before_identify",t);if(u===null)return-1;t=u[0];var c=this.get_distinct_id();if(t&&c!==t){if(typeof t=="string"&&t.indexOf(bu)===0)return this.report_error("distinct_id cannot have $device: prefix"),-1;this.register({$user_id:t})}if(!this.get_property("$device_id")){var l=c;this.register_once({$had_persisted_distinct_id:!0,$device_id:l},"")}t!==c&&t!==this.get_property(ws)&&(this.unregister(ws),this.register({distinct_id:t})),this._flags.identify_called=!0,this.people._flush(n,i,e,r,s,o,a),t!==c&&this.track("$identify",{distinct_id:t,$anon_distinct_id:c},{skip_hooks:!0}),t!==c&&this.flags.fetchFlags().catch(function(){L.error("[flags] Error fetching flags during identify")})},k.prototype.reset=function(){this.stop_session_recording(),this.persistence.clear(),this._flags.identify_called=!1;var t=h.UUID();this.register_once({distinct_id:bu+t,$device_id:t},""),this._check_and_start_session_recording(),this.flags.reset()},k.prototype.get_distinct_id=function(){return this.get_property("distinct_id")},k.prototype.alias=function(t,n){if(t===this.get_property(Wp))return this.report_error("Attempting to create alias for existing People user - aborting."),-2;var i=this;return h.isUndefined(n)&&(n=this.get_distinct_id()),t!==n?(this._register_single(ws,t),this.track("$create_alias",{alias:t,distinct_id:n},{skip_hooks:!0},function(){i.identify(t)})):(this.report_error("alias matches current distinct_id - skipping api call."),this.identify(t),-1)},k.prototype.name_tag=function(t){this._register_single("mp_name_tag",t)},k.prototype.set_config=function(t){if(h.isObject(t)){h.extend(this.config,t);var n=t.batch_size;n&&h.each(this.request_batchers,function(i){i.resetBatchSize()}),this.get_config("persistence_name")||(this.config.persistence_name=this.config.cookie_name),this.get_config("disable_persistence")||(this.config.disable_persistence=this.config.disable_cookie),this.persistence&&this.persistence.update_config(this.config),Ne.DEBUG=Ne.DEBUG||this.get_config("debug"),("autocapture"in t||"record_heatmap_data"in t)&&this.autocapture&&this.autocapture.init(),h.isObject(t.hooks)&&(this.hooks={},h.each(t.hooks,function(i,e){if(h.isFunction(i))this.hooks[e]=[i];else if(h.isArray(i)){this.hooks[e]=[];for(var r=0;rt.length)&&(n=t.length);for(var i=0,e=new Array(n);i=0)&&(i[r]=t[r]);return i}function qr(t,n){return qr=Object.setPrototypeOf||function(e,r){return e.__proto__=r,e},qr(t,n)}function P(t){"@swc/helpers - typeof";return t&&typeof Symbol!="undefined"&&t.constructor===Symbol?"symbol":typeof t}function Sd(t,n){if(t){if(typeof t=="string")return Lu(t,n);var i=Object.prototype.toString.call(t).slice(8,-1);if(i==="Object"&&t.constructor&&(i=t.constructor.name),i==="Map"||i==="Set")return Array.from(i);if(i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return Lu(t,n)}}function zr(t){var n=typeof Map=="function"?new Map:void 0;return zr=function(e){if(e===null||!bd(e))return e;if(typeof e!="function")throw new TypeError("Super expression must either be null or a function");if(typeof n!="undefined"){if(n.has(e))return n.get(e);n.set(e,r)}function r(){return Pn(e,arguments,Ns(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),qr(r,e)},zr(t)}function Fu(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(n){}return(Fu=function(){return!!t})()}function E(t,n){var i=typeof Symbol!="undefined"&&t[Symbol.iterator]||t["@@iterator"];if(i)return(i=i.call(t)).next.bind(i);if(Array.isArray(t)||(i=Sd(t))||n){i&&(t=i);var e=0;return function(){return e>=t.length?{done:!0}:{done:!1,value:t[e++]}}}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 Gt(t,n){var i,e,r,s,o={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function a(c){return function(l){return u([c,l])}}function u(c){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,e&&(r=c[0]&2?e.return:c[0]?e.throw||((r=e.return)&&r.call(e),0):e.next)&&!(r=r.call(e,c[1])).done)return r;switch(e=0,r&&(c=[c[0]&2,r.value]),c[0]){case 0:case 1:r=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,e=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(r=o.trys,!(r=r.length>0&&r[r.length-1])&&(c[0]===6||c[0]===2)){o=0;continue}if(c[0]===3&&(!r||c[1]>r[0]&&c[1]=t.length&&(t=void 0),{value:t&&t[e++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}var Cd=Object.defineProperty,Ed=function(t,n,i){return n in t?Cd(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i},k=function(t,n,i){return Ed(t,(typeof n=="undefined"?"undefined":P(n))!=="symbol"?n+"":n,i)},Uu,Id=Object.defineProperty,Od=function(t,n,i){return n in t?Id(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i},Bu=function(t,n,i){return Od(t,(typeof n=="undefined"?"undefined":P(n))!=="symbol"?n+"":n,i)},Oe=(function(t){return t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment",t})(Oe||{}),qu={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},zu={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},$n={},xd=function(){return!!globalThis.Zone};function Ds(t){if($n[t])return $n[t];var n=globalThis[t],i=n.prototype,e=t in qu?qu[t]:void 0,r=!!(e&&e.every(function(l){var f,p;return!!((p=(f=Object.getOwnPropertyDescriptor(i,l))==null?void 0:f.get)!=null&&p.toString().includes("[native code]"))})),s=t in zu?zu[t]:void 0,o=!!(s&&s.every(function(l){var f;return typeof i[l]=="function"&&((f=i[l])==null?void 0:f.toString().includes("[native code]"))}));if(r&&o&&!xd())return $n[t]=n.prototype,n.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return n.prototype;var c=u[t].prototype;return document.body.removeChild(a),c?$n[t]=c:i}catch(l){return i}}var Fs={};function wt(t,n,i){var e,r=t+"."+String(i);if(Fs[r])return Fs[r].call(n);var s=Ds(t),o=(e=Object.getOwnPropertyDescriptor(s,i))==null?void 0:e.get;return o?(Fs[r]=o,o.call(n)):n[i]}var Us={};function Gu(t,n,i){var e=t+"."+String(i);if(Us[e])return Us[e].bind(n);var r=Ds(t),s=r[i];return typeof s!="function"?n[i]:(Us[e]=s,s.bind(n))}function kd(t){return wt("Node",t,"childNodes")}function Rd(t){return wt("Node",t,"parentNode")}function Ad(t){return wt("Node",t,"parentElement")}function Md(t){return wt("Node",t,"textContent")}function Td(t,n){return Gu("Node",t,"contains")(n)}function Pd(t){return Gu("Node",t,"getRootNode")()}function $d(t){return!t||!("host"in t)?null:wt("ShadowRoot",t,"host")}function Nd(t){return t.styleSheets}function Ld(t){return!t||!("shadowRoot"in t)?null:wt("Element",t,"shadowRoot")}function Dd(t,n){return wt("Element",t,"querySelector")(n)}function Fd(t,n){return wt("Element",t,"querySelectorAll")(n)}function Ud(){return Ds("MutationObserver").constructor}function Bd(t,n,i){try{if(!(n in t))return function(){};var e=t[n],r=i(e);return typeof r=="function"&&(r.prototype=r.prototype||{},Object.defineProperties(r,{__rrweb_original__:{enumerable:!1,value:e}})),t[n]=r,function(){t[n]=e}}catch(s){return function(){}}}var Me={childNodes:kd,parentNode:Rd,parentElement:Ad,textContent:Md,contains:Td,getRootNode:Pd,host:$d,styleSheets:Nd,shadowRoot:Ld,querySelector:Dd,querySelectorAll:Fd,mutationObserver:Ud,patch:Bd};function Wu(t){return t.nodeType===t.ELEMENT_NODE}function Gr(t){var n=t&&"host"in t&&"mode"in t&&Me.host(t)||null;return!!(n&&"shadowRoot"in n&&Me.shadowRoot(n)===t)}function Wr(t){return Object.prototype.toString.call(t)==="[object ShadowRoot]"}function qd(t){return t.includes(" background-clip: text;")&&!t.includes(" -webkit-background-clip: text;")&&(t=t.replace(/\sbackground-clip:\s*text;/g," -webkit-background-clip: text; background-clip: text;")),t}function zd(t){var n=t.cssText;if(n.split('"').length<3)return n;var i=["@import","url("+JSON.stringify(t.href)+")"];return t.layerName===""?i.push("layer"):t.layerName&&i.push("layer("+t.layerName+")"),t.supportsText&&i.push("supports("+t.supportsText+")"),t.media.length&&i.push(t.media.mediaText),i.join(" ")+";"}function Bs(t){try{var n=t.rules||t.cssRules;if(!n)return null;var i=t.href;!i&&t.ownerNode&&t.ownerNode.ownerDocument&&(i=t.ownerNode.ownerDocument.location.href);var e=Array.from(n,function(r){return Vu(r,i)}).join("");return qd(e)}catch(r){return null}}function Vu(t,n){if(Wd(t)){var i;try{i=Bs(t.styleSheet)||zd(t)}catch(r){i=t.cssText}return t.styleSheet.href?Nn(i,t.styleSheet.href):i}else{var e=t.cssText;return Vd(t)&&t.selectorText.includes(":")&&(e=Gd(e)),n?Nn(e,n):e}}function Gd(t){var n=/(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;return t.replace(n,"$1\\$2")}function Wd(t){return"styleSheet"in t}function Vd(t){return"selectorText"in t}var ju=(function(){function t(){Bu(this,"idNodeMap",new Map),Bu(this,"nodeMetaMap",new WeakMap)}var n=t.prototype;return n.getId=function(e){var r;if(!e)return-1;var s=(r=this.getMeta(e))==null?void 0:r.id;return s!=null?s:-1},n.getNode=function(e){return this.idNodeMap.get(e)||null},n.getIds=function(){return Array.from(this.idNodeMap.keys())},n.getMeta=function(e){return this.nodeMetaMap.get(e)||null},n.removeNodeFromMap=function(e,r){var s=this;r===void 0&&(r=!1);var o=this.getId(e);this.idNodeMap.delete(o),r&&this.nodeMetaMap.delete(e),e.childNodes&&e.childNodes.forEach(function(a){return s.removeNodeFromMap(a,r)})},n.has=function(e){return this.idNodeMap.has(e)},n.hasNode=function(e){return this.nodeMetaMap.has(e)},n.add=function(e,r){var s=r.id;this.idNodeMap.set(s,e),this.nodeMetaMap.set(e,r)},n.replace=function(e,r){var s=this.getNode(e);if(s){var o=this.nodeMetaMap.get(s);o&&this.nodeMetaMap.set(r,o)}this.idNodeMap.set(e,r)},n.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},t})();function jd(){return new ju}function Vr(t){var n=t.element,i=t.maskInputOptions,e=t.tagName,r=t.type,s=t.value,o=t.maskInputFn,a=s||"",u=r&&Wt(r);return(i[e.toLowerCase()]||u&&i[u])&&(o?a=o(a,n):a="*".repeat(a.length)),a}function Wt(t){return t.toLowerCase()}var Hu="__rrweb_original__";function Hd(t){var n=t.getContext("2d");if(!n)return!0;for(var i=50,e=0;e-1?n=t.split("/").slice(0,3).join("/"):n=t.split("/")[0],n=n.split("?")[0],n}var Yd=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,Jd=/^(?:[a-z+]+:)?\/\//i,Xd=/^www\..*/i,Zd=/^(data:)([^,]*),(.*)/i;function Nn(t,n){return(t||"").replace(Yd,function(i,e,r,s,o,a){var u=r||o||a,c=e||s||"";if(!u)return i;if(Jd.test(u)||Xd.test(u)||Zd.test(u))return"url("+c+u+c+")";if(u[0]==="/")return"url("+c+(Kd(n)+u)+c+")";var l=n.split("/"),f=u.split("/");l.pop();for(var p=E(f),g;!(g=p()).done;){var v=g.value;v!=="."&&(v===".."?l.pop():l.push(v))}return"url("+c+l.join("/")+c+")"})}function Ln(t,n){return n===void 0&&(n=!1),n?t.replace(/(\/\*[^*]*\*\/)|[\s;]/g,""):t.replace(/(\/\*[^*]*\*\/)|[\s;]/g,"").replace(/0px/g,"0")}function Qd(t,n,i){i===void 0&&(i=!1);var e=Array.from(n.childNodes),r=[],s=0;if(e.length>1&&t&&typeof t=="string"){for(var o=Ln(t,i),a=o.length/t.length,u=1;u2&&g[0]===""&&e[u-1].textContent!=="")v=o.indexOf(p,1);else if(g.length===1){if(p=p.substring(0,p.length-1),g=o.split(p),g.length<=1)return r.push(t),r;f=l+1}else f===c.length-1&&(v=o.indexOf(p));if(g.length>=2&&f>l){var m=e[u-1].textContent;if(m&&typeof m=="string"){var d=Ln(m).length;v=o.indexOf(p,d)}v===-1&&(v=g[0].length)}if(v!==-1){for(var y=Math.floor(v/a);y>0&&y50*e.length)return r.push(t),r;var _=Ln(t.substring(0,y),i);if(_.length===v){r.push(t.substring(0,y)),t=t.substring(y),o=o.substring(v);break}else _.length=n.length);){var s=e(iv);if(s.slice(-1)===",")s=fr(t,s.substring(0,s.length-1)),r.push(s);else{var o="";s=fr(t,s);for(var a=!1;;){var u=n.charAt(i);if(u===""){r.push((s+o).trim());break}else if(a)u===")"&&(a=!1);else if(u===","){i+=1,r.push((s+o).trim());break}else u==="("&&(a=!0);o+=u,i+=1}}}return r.join(", ")}var Xu=new WeakMap;function fr(t,n){return!n||n.trim()===""?n:qs(t,n)}function av(t){return!!(t.tagName==="svg"||t.ownerSVGElement)}function qs(t,n){var i=Xu.get(t);if(i||(i=t.createElement("a"),Xu.set(t,i)),!n)n="";else if(n.startsWith("blob:")||n.startsWith("data:"))return n;return i.setAttribute("href",n),i.href}function Zu(t,n,i,e){return e&&(i==="src"||i==="href"&&!(n==="use"&&e[0]==="#")||i==="xlink:href"&&e[0]!=="#"||i==="background"&&(n==="table"||n==="td"||n==="th")?fr(t,e):i==="srcset"?ov(t,e):i==="style"?Nn(e,qs(t)):n==="object"&&i==="data"?fr(t,e):e)}function Qu(t,n,i){return(t==="video"||t==="audio")&&n==="autoplay"}function uv(t,n,i){try{if(typeof n=="string"){if(t.classList.contains(n))return!0}else for(var e=t.classList.length;e--;){var r=t.classList[e];if(n.test(r))return!0}if(i)return t.matches(i)}catch(s){}return!1}function Dn(t,n,i){if(!t)return!1;if(t.nodeType!==t.ELEMENT_NODE)return i?Dn(Me.parentNode(t),n,i):!1;for(var e=t.classList.length;e--;){var r=t.classList[e];if(n.test(r))return!0}return i?Dn(Me.parentNode(t),n,i):!1}function ec(t,n,i,e){var r;if(Wu(t)){if(r=t,!Me.childNodes(r).length)return!1}else{if(Me.parentElement(t)===null)return!1;r=Me.parentElement(t)}try{if(typeof n=="string"){if(e){if(r.closest("."+n))return!0}else if(r.classList.contains(n))return!0}else if(Dn(r,n,e))return!0;if(i){if(e){if(r.closest(i))return!0}else if(r.matches(i))return!0}}catch(s){}return!1}function cv(t,n,i){var e=t.contentWindow;if(e){var r=!1,s;try{s=e.document.readyState}catch(u){return}if(s!=="complete"){var o=setTimeout(function(){r||(n(),r=!0)},i);t.addEventListener("load",function(){clearTimeout(o),r=!0,n()});return}var a="about:blank";if(e.location.href!==a||t.src===a||t.src==="")return setTimeout(n,0),t.addEventListener("load",n);t.addEventListener("load",n)}}function lv(t,n,i){var e=!1,r;try{r=t.sheet}catch(o){return}if(!r){var s=setTimeout(function(){e||(n(),e=!0)},i);t.addEventListener("load",function(){clearTimeout(s),e=!0,n()})}}function fv(t,n){var i=n.doc,e=n.mirror,r=n.blockClass,s=n.blockSelector,o=n.needsMask,a=n.inlineStylesheet,u=n.maskInputOptions,c=u===void 0?{}:u,l=n.maskTextFn,f=n.maskInputFn,p=n.dataURLOptions,g=p===void 0?{}:p,v=n.inlineImages,m=n.recordCanvas,d=n.keepIframeSrcFn,y=n.newlyAddedElement,_=y===void 0?!1:y,w=n.cssCaptured,S=w===void 0?!1:w,b=hv(i,e);switch(t.nodeType){case t.DOCUMENT_NODE:return t.compatMode!=="CSS1Compat"?{type:Oe.Document,childNodes:[],compatMode:t.compatMode}:{type:Oe.Document,childNodes:[]};case t.DOCUMENT_TYPE_NODE:return{type:Oe.DocumentType,name:t.name,publicId:t.publicId,systemId:t.systemId,rootId:b};case t.ELEMENT_NODE:return dv(t,{doc:i,blockClass:r,blockSelector:s,inlineStylesheet:a,maskInputOptions:c,maskInputFn:f,dataURLOptions:g,inlineImages:v,recordCanvas:m,keepIframeSrcFn:d,newlyAddedElement:_,rootId:b});case t.TEXT_NODE:return pv(t,{doc:i,needsMask:o,maskTextFn:l,rootId:b,cssCaptured:S});case t.CDATA_SECTION_NODE:return{type:Oe.CDATA,textContent:"",rootId:b};case t.COMMENT_NODE:return{type:Oe.Comment,textContent:Me.textContent(t)||"",rootId:b};default:return!1}}function hv(t,n){if(n.hasNode(t)){var i=n.getId(t);return i===1?void 0:i}}function pv(t,n){var i=n.needsMask,e=n.maskTextFn,r=n.rootId,s=n.cssCaptured,o=Me.parentNode(t),a=o&&o.tagName,u="",c=a==="STYLE"?!0:void 0,l=a==="SCRIPT"?!0:void 0;return l?u="SCRIPT_PLACEHOLDER":s||(u=Me.textContent(t),c&&u&&(u=Nn(u,qs(n.doc)))),!c&&!l&&u&&i&&(u=e?e(u,Me.parentElement(t)):u.replace(/[\S]/g,"*")),{type:Oe.Text,textContent:u||"",rootId:r}}function dv(t,n){for(var i=n.doc,e=n.blockClass,r=n.blockSelector,s=n.inlineStylesheet,o=n.maskInputOptions,a=o===void 0?{}:o,u=n.maskInputFn,c=n.dataURLOptions,l=c===void 0?{}:c,f=n.inlineImages,p=n.recordCanvas,g=n.keepIframeSrcFn,v=n.newlyAddedElement,m=v===void 0?!1:v,d=n.rootId,y=uv(t,e,r),_=nv(t),w={},S=t.attributes.length,b=0;b1&&(L=ev(L,t)),w._cssText=L)}if(_==="input"||_==="textarea"||_==="select"){var G=t.value,ge=t.checked;w.type!=="radio"&&w.type!=="checkbox"&&w.type!=="submit"&&w.type!=="button"&&G?w.value=Vr({element:t,type:jr(t),tagName:_,value:G,maskInputOptions:a,maskInputFn:u}):ge&&(w.checked=ge)}if((_==="input"||_==="textarea")&&w.placeholder&&(w.placeholder=Vr({element:t,type:jr(t),tagName:_,value:w.placeholder,maskInputOptions:a,maskInputFn:u})),_==="option"&&(t.selected&&!a.select?w.selected=!0:delete w.selected),_==="dialog"&&t.open&&(w.rr_open_mode=t.matches("dialog:modal")?"modal":"non-modal"),_==="canvas"&&p){if(t.__context==="2d")Hd(t)||(w.rr_dataURL=t.toDataURL(l.type,l.quality));else if(!("__context"in t)){var F=t.toDataURL(l.type,l.quality),W=i.createElement("canvas");W.width=t.width,W.height=t.height;var de=W.toDataURL(l.type,l.quality);F!==de&&(w.rr_dataURL=F)}}if(_==="img"&&f){lr||(lr=i.createElement("canvas"),Ju=lr.getContext("2d"));var K=t,ze=K.currentSrc||K.getAttribute("src")||"",Fe=K.crossOrigin,Ae=function(){K.removeEventListener("load",Ae);try{lr.width=K.naturalWidth,lr.height=K.naturalHeight,Ju.drawImage(K,0,0),w.rr_dataURL=lr.toDataURL(l.type,l.quality)}catch(Ve){if(K.crossOrigin!=="anonymous"){K.crossOrigin="anonymous",K.complete&&K.naturalWidth!==0?Ae():K.addEventListener("load",Ae);return}else console.warn("Cannot inline img src="+ze+"! Error: "+Ve)}K.crossOrigin==="anonymous"&&(Fe?w.crossOrigin=Fe:K.removeAttribute("crossorigin"))};K.complete&&K.naturalWidth!==0?Ae():K.addEventListener("load",Ae)}if(_==="audio"||_==="video"){var pe=w;pe.rr_mediaState=t.paused?"paused":"played",pe.rr_mediaCurrentTime=t.currentTime,pe.rr_mediaPlaybackRate=t.playbackRate,pe.rr_mediaMuted=t.muted,pe.rr_mediaLoop=t.loop,pe.rr_mediaVolume=t.volume}if(m||(t.scrollLeft&&(w.rr_scrollLeft=t.scrollLeft),t.scrollTop&&(w.rr_scrollTop=t.scrollTop)),y){var Re=t.getBoundingClientRect(),er=Re.width,ct=Re.height;w={class:w.class,rr_width:""+er+"px",rr_height:""+ct+"px"}}_==="iframe"&&!g(w.src)&&(t.contentDocument||(w.rr_src=w.src),delete w.src);var tr;try{customElements.get(_)&&(tr=!0)}catch(Ve){}return{type:Oe.Element,tagName:_,attributes:w,childNodes:[],isSVG:av(t)||void 0,needBlock:y,rootId:d,isCustom:tr}}function te(t){return t==null?"":t.toLowerCase()}function vv(t,n){if(n.comment&&t.type===Oe.Comment)return!0;if(t.type===Oe.Element){if(n.script&&(t.tagName==="script"||t.tagName==="link"&&(t.attributes.rel==="preload"&&t.attributes.as==="script"||t.attributes.rel==="modulepreload")||t.tagName==="link"&&t.attributes.rel==="prefetch"&&typeof t.attributes.href=="string"&&Ku(t.attributes.href)==="js"))return!0;if(n.headFavicon&&(t.tagName==="link"&&t.attributes.rel==="shortcut icon"||t.tagName==="meta"&&(te(t.attributes.name).match(/^msapplication-tile(image|color)$/)||te(t.attributes.name)==="application-name"||te(t.attributes.rel)==="icon"||te(t.attributes.rel)==="apple-touch-icon"||te(t.attributes.rel)==="shortcut icon")))return!0;if(t.tagName==="meta"){if(n.headMetaDescKeywords&&te(t.attributes.name).match(/^description|keywords$/))return!0;if(n.headMetaSocial&&(te(t.attributes.property).match(/^(og|twitter|fb):/)||te(t.attributes.name).match(/^(og|twitter):/)||te(t.attributes.name)==="pinterest"))return!0;if(n.headMetaRobots&&(te(t.attributes.name)==="robots"||te(t.attributes.name)==="googlebot"||te(t.attributes.name)==="bingbot"))return!0;if(n.headMetaHttpEquiv&&t.attributes["http-equiv"]!==void 0)return!0;if(n.headMetaAuthorship&&(te(t.attributes.name)==="author"||te(t.attributes.name)==="generator"||te(t.attributes.name)==="framework"||te(t.attributes.name)==="publisher"||te(t.attributes.name)==="progid"||te(t.attributes.property).match(/^article:/)||te(t.attributes.property).match(/^product:/)))return!0;if(n.headMetaVerification&&(te(t.attributes.name)==="google-site-verification"||te(t.attributes.name)==="yandex-verification"||te(t.attributes.name)==="csrf-token"||te(t.attributes.name)==="p:domain_verify"||te(t.attributes.name)==="verify-v1"||te(t.attributes.name)==="verification"||te(t.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function hr(t,n){var i=n.doc,e=n.mirror,r=n.blockClass,s=n.blockSelector,o=n.maskTextClass,a=n.maskTextSelector,u=n.skipChild,c=u===void 0?!1:u,l=n.inlineStylesheet,f=l===void 0?!0:l,p=n.maskInputOptions,g=p===void 0?{}:p,v=n.maskTextFn,m=n.maskInputFn,d=n.slimDOMOptions,y=n.dataURLOptions,_=y===void 0?{}:y,w=n.inlineImages,S=w===void 0?!1:w,b=n.recordCanvas,O=b===void 0?!1:b,M=n.onSerialize,R=n.onIframeLoad,L=n.iframeLoadTimeout,G=L===void 0?5e3:L,ge=n.onStylesheetLoad,F=n.stylesheetLoadTimeout,W=F===void 0?5e3:F,de=n.keepIframeSrcFn,K=de===void 0?function(){return!1}:de,ze=n.newlyAddedElement,Fe=ze===void 0?!1:ze,Ae=n.cssCaptured,pe=Ae===void 0?!1:Ae,Re=n.needsMask,er=n.preserveWhiteSpace,ct=er===void 0?!0:er;if(!Re){var tr=Re===void 0;Re=ec(t,o,a,tr)}var Ve=fv(t,{doc:i,mirror:e,blockClass:r,blockSelector:s,needsMask:Re,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,dataURLOptions:_,inlineImages:S,recordCanvas:O,keepIframeSrcFn:K,newlyAddedElement:Fe,cssCaptured:pe});if(!Ve)return console.warn(t,"not serialized"),null;var Bt;e.hasNode(t)?Bt=e.getId(t):vv(Ve,d)||!ct&&Ve.type===Oe.Text&&!Ve.textContent.replace(/^\s+|\s+$/gm,"").length?Bt=Hr:Bt=Yu();var X=Object.assign(Ve,{id:Bt});if(e.add(t,X),Bt===Hr)return null;M&&M(t);var Dr=!c;if(X.type===Oe.Element){Dr=Dr&&!X.needBlock,delete X.needBlock;var Fr=Me.shadowRoot(t);Fr&&Wr(Fr)&&(X.isShadowHost=!0)}if((X.type===Oe.Document||X.type===Oe.Element)&&Dr){d.headWhitespace&&X.type===Oe.Element&&X.tagName==="head"&&(ct=!1);var qt={doc:i,mirror:e,blockClass:r,blockSelector:s,needsMask:Re,maskTextClass:o,maskTextSelector:a,skipChild:c,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,slimDOMOptions:d,dataURLOptions:_,inlineImages:S,recordCanvas:O,preserveWhiteSpace:ct,onSerialize:M,onIframeLoad:R,iframeLoadTimeout:G,onStylesheetLoad:ge,stylesheetLoadTimeout:W,keepIframeSrcFn:K,cssCaptured:!1};if(!(X.type===Oe.Element&&X.tagName==="textarea"&&X.attributes.value!==void 0)){X.type===Oe.Element&&X.attributes._cssText!==void 0&&typeof X.attributes._cssText=="string"&&(qt.cssCaptured=!0);for(var Rs=E(Array.from(Me.childNodes(t))),Ur;!(Ur=Rs()).done;){var As=Ur.value,Ms=hr(As,qt);Ms&&X.childNodes.push(Ms)}}var Mn=null;if(Wu(t)&&(Mn=Me.shadowRoot(t)))for(var rr=E(Array.from(Me.childNodes(Mn))),nr;!(nr=rr()).done;){var ir=nr.value,sr=hr(ir,qt);sr&&(Wr(Mn)&&(sr.isShadow=!0),X.childNodes.push(sr))}}var or=Me.parentNode(t);return or&&Gr(or)&&Wr(or)&&(X.isShadow=!0),X.type===Oe.Element&&X.tagName==="iframe"&&cv(t,function(){var yt=t.contentDocument;if(yt&&R){var Br=hr(yt,{doc:yt,mirror:e,blockClass:r,blockSelector:s,needsMask:Re,maskTextClass:o,maskTextSelector:a,skipChild:!1,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,slimDOMOptions:d,dataURLOptions:_,inlineImages:S,recordCanvas:O,preserveWhiteSpace:ct,onSerialize:M,onIframeLoad:R,iframeLoadTimeout:G,onStylesheetLoad:ge,stylesheetLoadTimeout:W,keepIframeSrcFn:K});Br&&R(t,Br)}},G),X.type===Oe.Element&&X.tagName==="link"&&typeof X.attributes.rel=="string"&&(X.attributes.rel==="stylesheet"||X.attributes.rel==="preload"&&typeof X.attributes.href=="string"&&Ku(X.attributes.href)==="css")&&lv(t,function(){if(ge){var yt=hr(t,{doc:i,mirror:e,blockClass:r,blockSelector:s,needsMask:Re,maskTextClass:o,maskTextSelector:a,skipChild:!1,inlineStylesheet:f,maskInputOptions:g,maskTextFn:v,maskInputFn:m,slimDOMOptions:d,dataURLOptions:_,inlineImages:S,recordCanvas:O,preserveWhiteSpace:ct,onSerialize:M,onIframeLoad:R,iframeLoadTimeout:G,onStylesheetLoad:ge,stylesheetLoadTimeout:W,keepIframeSrcFn:K});yt&&ge(t,yt)}},W),X}function gv(t,n){var i=n||{},e=i.mirror,r=e===void 0?new ju:e,s=i.blockClass,o=s===void 0?"rr-block":s,a=i.blockSelector,u=a===void 0?null:a,c=i.maskTextClass,l=c===void 0?"rr-mask":c,f=i.maskTextSelector,p=f===void 0?null:f,g=i.inlineStylesheet,v=g===void 0?!0:g,m=i.inlineImages,d=m===void 0?!1:m,y=i.recordCanvas,_=y===void 0?!1:y,w=i.maskAllInputs,S=w===void 0?!1:w,b=i.maskTextFn,O=i.maskInputFn,M=i.slimDOM,R=M===void 0?!1:M,L=i.dataURLOptions,G=i.preserveWhiteSpace,ge=i.onSerialize,F=i.onIframeLoad,W=i.iframeLoadTimeout,de=i.onStylesheetLoad,K=i.stylesheetLoadTimeout,ze=i.keepIframeSrcFn,Fe=ze===void 0?function(){return!1}:ze,Ae=S===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:S===!1?{password:!0}:S,pe=R===!0||R==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:R==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:R===!1?{}:R;return hr(t,{doc:t,mirror:r,blockClass:o,blockSelector:u,maskTextClass:l,maskTextSelector:p,skipChild:!1,inlineStylesheet:v,maskInputOptions:Ae,maskTextFn:b,maskInputFn:O,slimDOMOptions:pe,dataURLOptions:L,inlineImages:d,recordCanvas:_,preserveWhiteSpace:G,onSerialize:ge,onIframeLoad:F,iframeLoadTimeout:W,onStylesheetLoad:de,stylesheetLoadTimeout:K,keepIframeSrcFn:Fe,newlyAddedElement:!1})}function mv(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function yv(t){if(t.__esModule)return t;var n=t.default;if(typeof n=="function"){var i=function e(){return T(this,e)?Reflect.construct(n,arguments,this.constructor):n.apply(this,arguments)};i.prototype=n.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})}),i}var zs={exports:{}},se=String,tc=function(){return{isColorSupported:!1,reset:se,bold:se,dim:se,italic:se,underline:se,inverse:se,hidden:se,strikethrough:se,black:se,red:se,green:se,yellow:se,blue:se,magenta:se,cyan:se,white:se,gray:se,bgBlack:se,bgRed:se,bgGreen:se,bgYellow:se,bgBlue:se,bgMagenta:se,bgCyan:se,bgWhite:se}};zs.exports=tc(),zs.exports.createColors=tc;var _v=zs.exports,wv={},bv=Object.freeze(Object.defineProperty({__proto__:null,default:wv},Symbol.toStringTag,{value:"Module"})),me=yv(bv),rc=_v,nc=me,Gs=(function(t){ue(n,t);function n(e,r,s,o,a,u){var c;return c=t.call(this,e)||this,c.name="CssSyntaxError",c.reason=e,a&&(c.file=a),o&&(c.source=o),u&&(c.plugin=u),typeof r!="undefined"&&typeof s!="undefined"&&(typeof r=="number"?(c.line=r,c.column=s):(c.line=r.line,c.column=r.column,c.endLine=s.line,c.endColumn=s.column)),c.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(c,n),c}var i=n.prototype;return i.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},i.showSourceCode=function(r){var s=this;if(!this.source)return"";var o=this.source;r==null&&(r=rc.isColorSupported),nc&&r&&(o=nc(o));var a=o.split(/\r?\n/),u=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),l=String(c).length,f,p;if(r){var g=rc.createColors(!0),v=g.bold,m=g.gray,d=g.red;f=function(y){return v(d(y))},p=function(y){return m(y)}}else f=p=function(y){return y};return a.slice(u,c).map(function(y,_){var w=u+1+_,S=" "+(" "+w).slice(-l)+" | ";if(w===s.line){var b=p(S.replace(/\d/g," "))+y.slice(0,s.column-1).replace(/[^\t]/g," ");return f(">")+p(S)+y+"\n "+b+f("^")}return" "+p(S)+y}).join("\n")},i.toString=function(){var r=this.showSourceCode();return r&&(r="\n\n"+r+"\n"),this.name+": "+this.message+r},n})(zr(Error)),Ws=Gs;Gs.default=Gs;var bt={};bt.isClean=Symbol("isClean"),bt.my=Symbol("my");var ic={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Sv(t){return t[0].toUpperCase()+t.slice(1)}var Vs=(function(){function t(i){this.builder=i}var n=t.prototype;return n.atrule=function(e,r){var s="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?s+=e.raws.afterName:o&&(s+=" "),e.nodes)this.block(e,s+o);else{var a=(e.raws.between||"")+(r?";":"");this.builder(s+o+a,e)}},n.beforeAfter=function(e,r){var s;e.type==="decl"?s=this.raw(e,null,"beforeDecl"):e.type==="comment"?s=this.raw(e,null,"beforeComment"):r==="before"?s=this.raw(e,null,"beforeRule"):s=this.raw(e,null,"beforeClose");for(var o=e.parent,a=0;o&&o.type!=="root";)a+=1,o=o.parent;if(s.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var c=0;c0&&e.nodes[r].type==="comment";)r-=1;for(var s=this.raw(e,"semicolon"),o=0;o0&&typeof s.raws.after!="undefined")return r=s.raws.after,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawBeforeComment=function(e,r){var s;return e.walkComments(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeDecl"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeDecl=function(e,r){var s;return e.walkDecls(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeRule"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeOpen=function(e){var r;return e.walk(function(s){if(s.type!=="decl"&&(r=s.raws.between,typeof r!="undefined"))return!1}),r},n.rawBeforeRule=function(e){var r;return e.walk(function(s){if(s.nodes&&(s.parent!==e||e.first!==s)&&typeof s.raws.before!="undefined")return r=s.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawColon=function(e){var r;return e.walkDecls(function(s){if(typeof s.raws.between!="undefined")return r=s.raws.between.replace(/[^\s:]/g,""),!1}),r},n.rawEmptyBody=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length===0&&(r=s.raws.after,typeof r!="undefined"))return!1}),r},n.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var r;return e.walk(function(s){var o=s.parent;if(o&&o!==e&&o.parent&&o.parent===e&&typeof s.raws.before!="undefined"){var a=s.raws.before.split("\n");return r=a[a.length-1],r=r.replace(/\S/g,""),!1}}),r},n.rawSemicolon=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length&&s.last.type==="decl"&&(r=s.raws.semicolon,typeof r!="undefined"))return!1}),r},n.rawValue=function(e,r){var s=e[r],o=e.raws[r];return o&&o.value===s?o.raw:s},n.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},n.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},n.stringify=function(e,r){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,r)},t})(),sc=Vs;Vs.default=Vs;var Cv=sc;function js(t,n){var i=new Cv(n);i.stringify(t)}var Fn=js;js.default=js;var Un=bt.isClean,Ev=bt.my,Iv=Ws,Ov=sc,xv=Fn;function Hs(t,n){var i=new t.constructor;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&e!=="proxyCache"){var r=t[e],s=typeof r=="undefined"?"undefined":P(r);e==="parent"&&s==="object"?n&&(i[e]=n):e==="source"?i[e]=r:Array.isArray(r)?i[e]=r.map(function(o){return Hs(o,i)}):(s==="object"&&r!==null&&(r=Hs(r)),i[e]=r)}return i}var Ks=(function(){function t(i){i===void 0&&(i={}),this.raws={},this[Un]=!1,this[Ev]=!0;for(var e in i)if(e==="nodes"){this.nodes=[];for(var r=E(i[e]),s;!(s=r()).done;){var o=s.value;typeof o.clone=="function"?this.append(o.clone()):this.append(o)}}else this[e]=i[e]}var n=t.prototype;return n.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var r=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+r.input.from+":"+r.start.line+":"+r.start.column+"$&")}return e},n.after=function(e){return this.parent.insertAfter(this,e),this},n.assign=function(e){e===void 0&&(e={});for(var r in e)this[r]=e[r];return this},n.before=function(e){return this.parent.insertBefore(this,e),this},n.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},n.clone=function(e){e===void 0&&(e={});var r=Hs(this);for(var s in e)r[s]=e[s];return r},n.cloneAfter=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertAfter(this,r),r},n.cloneBefore=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertBefore(this,r),r},n.error=function(e,r){if(r===void 0&&(r={}),this.source){var s=this.rangeBy(r),o=s.end,a=s.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:o.column,line:o.line},r)}return new Iv(e)},n.getProxyProcessor=function(){return{get:function(r,s){return s==="proxyOf"?r:s==="root"?function(){return r.root().toProxy()}:r[s]},set:function(r,s,o){return r[s]===o||(r[s]=o,(s==="prop"||s==="value"||s==="name"||s==="params"||s==="important"||s==="text")&&r.markDirty()),!0}}},n.markDirty=function(){if(this[Un]){this[Un]=!1;for(var e=this;e=e.parent;)e[Un]=!1}},n.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},n.positionBy=function(e,r){var s=this.source.start;if(e.index)s=this.positionInside(e.index,r);else if(e.word){r=this.toString();var o=r.indexOf(e.word);o!==-1&&(s=this.positionInside(o,r))}return s},n.positionInside=function(e,r){for(var s=r||this.toString(),o=this.source.start.column,a=this.source.start.line,u=0;u-1&&o>-1&&(this.annotation=this.getAnnotationURL(e.substring(s,o)))}},n.loadFile=function(e){if(this.root=Js(e),Tv(e))return this.mapFile=e,Pv(e,"utf-8").toString().trim()},n.loadMap=function(e,r){if(r===!1)return!1;if(r){if(typeof r=="string")return r;if(typeof r=="function"){var s=r(e);if(s){var o=this.loadFile(s);if(!o)throw new Error("Unable to load previous source map: "+s.toString());return o}}else{if(T(r,oc))return ac.fromSourceMap(r).toString();if(T(r,ac))return r.toString();if(this.isMap(r))return JSON.stringify(r);throw new Error("Unsupported previous source map format: "+r.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=$v(Js(e),a)),this.loadFile(a)}}},n.startWith=function(e,r){return e?e.substr(0,r.length)===r:!1},n.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},t})(),uc=Xs;Xs.default=Xs;var Lv=me.SourceMapConsumer,Dv=me.SourceMapGenerator,cc=me.fileURLToPath,zn=me.pathToFileURL,Zs=me.isAbsolute,Qs=me.resolve,Fv=Mv.nanoid,eo=me,lc=Ws,Uv=uc,to=Symbol("fromOffsetCache"),Bv=!!(Lv&&Dv),fc=!!(Qs&&Zs),Gn=(function(){function t(i,e){if(e===void 0&&(e={}),i===null||typeof i=="undefined"||(typeof i=="undefined"?"undefined":P(i))==="object"&&!i.toString)throw new Error("PostCSS received "+i+" instead of CSS string");if(this.css=i.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!fc||/^\w+:\/\//.test(e.from)||Zs(e.from)?this.file=e.from:this.file=Qs(e.from)),fc&&Bv){var r=new Uv(this.css,e);if(r.text){this.map=r;var s=r.consumer().file;!this.file&&s&&(this.file=this.mapResolve(s))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var n=t.prototype;return n.error=function(e,r,s,o){o===void 0&&(o={});var a,u,c;if(r&&(typeof r=="undefined"?"undefined":P(r))==="object"){var l=r,f=s;if(typeof l.offset=="number"){var p=this.fromOffset(l.offset);r=p.line,s=p.col}else r=l.line,s=l.column;if(typeof f.offset=="number"){var g=this.fromOffset(f.offset);u=g.line,c=g.col}else u=f.line,c=f.column}else if(!s){var v=this.fromOffset(r);r=v.line,s=v.col}var m=this.origin(r,s,u,c);return m?a=new lc(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,o.plugin):a=new lc(e,u===void 0?r:{column:s,line:r},u===void 0?s:{column:c,line:u},this.css,this.file,o.plugin),a.input={column:s,endColumn:c,endLine:u,line:r,source:this.css},this.file&&(zn&&(a.input.url=zn(this.file).toString()),a.input.file=this.file),a},n.fromOffset=function(e){var r,s;if(this[to])s=this[to];else{var o=this.css.split("\n");s=new Array(o.length);for(var a=0,u=0,c=o.length;u=r)l=s.length-1;else for(var f=s.length-2,p;l>1),e=s[p+1])l=p+1;else{l=p;break}return{col:e-s[l]+1,line:l+1}},n.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Qs(this.map.consumer().sourceRoot||this.map.root||".",e)},n.origin=function(e,r,s,o){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:r,line:e});if(!u.source)return!1;var c;typeof s=="number"&&(c=a.originalPositionFor({column:o,line:s}));var l;Zs(u.source)?l=zn(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||zn(this.map.mapFile));var f={column:u.column,endColumn:c&&c.column,endLine:c&&c.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(cc)f.file=cc(l);else throw new Error("file: protocol is not available in this PostCSS build");var p=a.sourceContentFor(u.source);return p&&(f.source=p),f},n.toJSON=function(){for(var e={},r=0,s=["hasBOM","css","file","id"];r=0;r--)e=this.root.nodes[r],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(r);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},n.generate=function(){if(this.clearAnnotation(),Gv&&zv&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(r){e+=r}),[e]},n.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Vn.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Vn({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},n.generateString=function(){var e=this;this.css="",this.map=new Vn({file:this.outputFile(),ignoreInvalidMapping:!0});var r=1,s=1,o="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,c;this.stringify(this.root,function(l,f,p){if(e.css+=l,f&&p!=="end"&&(a.generated.line=r,a.generated.column=s-1,f.source&&f.source.start?(a.source=e.sourcePath(f),a.original.line=f.source.start.line,a.original.column=f.source.start.column-1,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(r+=u.length,c=l.lastIndexOf("\n"),s=l.length-c):s+=l.length,f&&p!=="start"){var g=f.parent||{raws:{}},v=f.type==="decl"||f.type==="atrule"&&!f.nodes;(!v||f!==g.last||g.raws.semicolon)&&(f.source&&f.source.end?(a.source=e.sourcePath(f),a.original.line=f.source.end.line,a.original.column=f.source.end.column-1,a.generated.line=r,a.generated.column=s-2,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,a.generated.line=r,a.generated.column=s-1,e.map.addMapping(a)))}})},n.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},n.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(r){return r.inline}):!0},n.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},n.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},n.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},n.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var r=this.memoizedPaths.get(e);if(r)return r;var s=this.opts.to?jn(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(s=jn(dc(s,this.mapOpts.annotation)));var o=pc(s,e);return this.memoizedPaths.set(e,o),o},n.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(s){if(s.source&&s.source.input.map){var o=s.source.input.map;e.previousMaps.includes(o)||e.previousMaps.push(o)}});else{var r=new qv(this.originalCSS,this.opts);r.map&&this.previousMaps.push(r.map)}return this.previousMaps},n.setSourcesContent=function(){var e=this,r={};if(this.root)this.root.walk(function(o){if(o.source){var a=o.source.input.from;if(a&&!r[a]){r[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,o.source.input.css)}}});else if(this.css){var s=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(s,this.css)}},n.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},n.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},n.toFileUrl=function(e){var r=this.memoizedFileURLs.get(e);if(r)return r;if(gc){var s=gc(e).toString();return this.memoizedFileURLs.set(e,s),s}else throw new Error("`map.absolute` option is not available in this PostCSS build")},n.toUrl=function(e){var r=this.memoizedURLs.get(e);if(r)return r;vc==="\\"&&(e=e.replace(/\\/g,"/"));var s=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,s),s},t})(),mc=Wv,Vv=Bn,ro=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="comment",e}return n})(Vv),Hn=ro;ro.default=ro;var yc=bt.isClean,_c=bt.my,wc=qn,bc=Hn,jv=Bn,Sc,no,io,Cc;function Ec(t){return t.map(function(n){return n.nodes&&(n.nodes=Ec(n.nodes)),delete n.source,n})}function Ic(t){if(t[yc]=!1,t.proxyOf.nodes)for(var n=E(t.proxyOf.nodes),i;!(i=n()).done;){var e=i.value;Ic(e)}}var lt=(function(t){ue(n,t);function n(){return t.apply(this,arguments)||this}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?c-1:0),f=1;f=r&&(this.indexes[o]=s-1);return this.markDirty(),this},i.replaceValues=function(r,s,o){return o||(o=s,s={}),this.walkDecls(function(a){s.props&&!s.props.includes(a.prop)||s.fast&&!a.value.includes(s.fast)||(a.value=a.value.replace(r,o))}),this.markDirty(),this},i.some=function(r){return this.nodes.some(r)},i.walk=function(r){return this.each(function(s,o){var a;try{a=r(s,o)}catch(u){throw s.addToError(u)}return a!==!1&&s.walk&&(a=s.walk(r)),a})},i.walkAtRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="atrule"&&r.test(o.name))return s(o,a)}):this.walk(function(o,a){if(o.type==="atrule"&&o.name===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="atrule")return s(o,a)}))},i.walkComments=function(r){return this.walk(function(s,o){if(s.type==="comment")return r(s,o)})},i.walkDecls=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="decl"&&r.test(o.prop))return s(o,a)}):this.walk(function(o,a){if(o.type==="decl"&&o.prop===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="decl")return s(o,a)}))},i.walkRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="rule"&&r.test(o.selector))return s(o,a)}):this.walk(function(o,a){if(o.type==="rule"&&o.selector===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="rule")return s(o,a)}))},ie(n,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),n})(jv);lt.registerParse=function(t){Sc=t},lt.registerRule=function(t){no=t},lt.registerAtRule=function(t){io=t},lt.registerRoot=function(t){Cc=t};var Vt=lt;lt.default=lt,lt.rebuild=function(t){t.type==="atrule"?Object.setPrototypeOf(t,io.prototype):t.type==="rule"?Object.setPrototypeOf(t,no.prototype):t.type==="decl"?Object.setPrototypeOf(t,wc.prototype):t.type==="comment"?Object.setPrototypeOf(t,bc.prototype):t.type==="root"&&Object.setPrototypeOf(t,Cc.prototype),t[_c]=!0,t.nodes&&t.nodes.forEach(function(n){lt.rebuild(n)})};var Hv=Vt,Oc,xc,Kr=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,z({type:"document"},e))||this,r.nodes||(r.nodes=[]),r}var i=n.prototype;return i.toResult=function(r){r===void 0&&(r={});var s=new Oc(new xc,this,r);return s.stringify()},n})(Hv);Kr.registerLazyResult=function(t){Oc=t},Kr.registerProcessor=function(t){xc=t};var so=Kr;Kr.default=Kr;var kc={},Rc=function(n){kc[n]||(kc[n]=!0,typeof console!="undefined"&&console.warn&&console.warn(n))},oo=(function(){function t(i,e){if(e===void 0&&(e={}),this.type="warning",this.text=i,e.node&&e.node.source){var r=e.node.rangeBy(e);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(var s in e)this[s]=e[s]}var n=t.prototype;return n.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},t})(),Ac=oo;oo.default=oo;var Kv=Ac,ao=(function(){function t(i,e,r){this.processor=i,this.messages=[],this.root=e,this.opts=r,this.css=void 0,this.map=void 0}var n=t.prototype;return n.toString=function(){return this.css},n.warn=function(e,r){r===void 0&&(r={}),r.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(r.plugin=this.lastPlugin.postcssPlugin);var s=new Kv(e,r);return this.messages.push(s),s},n.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},ie(t,[{key:"content",get:function(){return this.css}}]),t})(),uo=ao;ao.default=ao;var co=39,Mc=34,Kn=92,Tc=47,Yn=10,Yr=32,Jn=12,Xn=9,Zn=13,Yv=91,Jv=93,Xv=40,Zv=41,Qv=123,eg=125,tg=59,rg=42,ng=58,ig=64,Qn=/[\t\n\f\r "#'()/;[\\\]{}]/g,ei=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,sg=/.[\r\n"'(/\\]/,Pc=/[\da-f]/i,og=function(n,i){i===void 0&&(i={});var e=n.css.valueOf(),r=i.ignoreErrors,s,o,a,u,c,l,f,p,g,v,m=e.length,d=0,y=[],_=[];function w(){return d}function S(R){throw n.error("Unclosed "+R,d)}function b(){return _.length===0&&d>=m}function O(R){if(_.length)return _.pop();if(!(d>=m)){var L=R?R.ignoreUnclosed:!1;switch(s=e.charCodeAt(d),s){case Yn:case Yr:case Xn:case Zn:case Jn:{o=d;do o+=1,s=e.charCodeAt(o);while(s===Yr||s===Yn||s===Xn||s===Zn||s===Jn);v=["space",e.slice(d,o)],d=o-1;break}case Yv:case Jv:case Qv:case eg:case ng:case tg:case Zv:{var G=String.fromCharCode(s);v=[G,G,d];break}case Xv:{if(p=y.length?y.pop()[1]:"",g=e.charCodeAt(d+1),p==="url"&&g!==co&&g!==Mc&&g!==Yr&&g!==Yn&&g!==Xn&&g!==Jn&&g!==Zn){o=d;do{if(l=!1,o=e.indexOf(")",o+1),o===-1)if(r||L){o=d;break}else S("bracket");for(f=o;e.charCodeAt(f-1)===Kn;)f-=1,l=!l}while(l);v=["brackets",e.slice(d,o+1),d,o],d=o}else o=e.indexOf(")",d+1),u=e.slice(d,o+1),o===-1||sg.test(u)?v=["(","(",d]:(v=["brackets",u,d,o],d=o);break}case co:case Mc:{a=s===co?"'":'"',o=d;do{if(l=!1,o=e.indexOf(a,o+1),o===-1)if(r||L){o=d+1;break}else S("string");for(f=o;e.charCodeAt(f-1)===Kn;)f-=1,l=!l}while(l);v=["string",e.slice(d,o+1),d,o],d=o;break}case ig:{Qn.lastIndex=d+1,Qn.test(e),Qn.lastIndex===0?o=e.length-1:o=Qn.lastIndex-2,v=["at-word",e.slice(d,o+1),d,o],d=o;break}case Kn:{for(o=d,c=!0;e.charCodeAt(o+1)===Kn;)o+=1,c=!c;if(s=e.charCodeAt(o+1),c&&s!==Tc&&s!==Yr&&s!==Yn&&s!==Xn&&s!==Zn&&s!==Jn&&(o+=1,Pc.test(e.charAt(o)))){for(;Pc.test(e.charAt(o+1));)o+=1;e.charCodeAt(o+1)===Yr&&(o+=1)}v=["word",e.slice(d,o+1),d,o],d=o;break}default:{s===Tc&&e.charCodeAt(d+1)===rg?(o=e.indexOf("*/",d+2)+1,o===0&&(r||L?o=e.length:S("comment")),v=["comment",e.slice(d,o+1),d,o],d=o):(ei.lastIndex=d+1,ei.test(e),ei.lastIndex===0?o=e.length-1:o=ei.lastIndex-2,v=["word",e.slice(d,o+1),d,o],y.push(v),d=o);break}}return d++,v}}function M(R){_.push(R)}return{back:M,endOfFile:b,nextToken:O,position:w}},$c=Vt,ti=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,e)||this,r.type="atrule",r}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?s.raws.before=this.nodes[1].raws.before:delete s.raws.before;else if(this.first!==s)for(var u=E(a),c;!(c=u()).done;){var l=c.value;l.raws.before=s.raws.before}}return a},i.removeChild=function(r,s){var o=this.index(r);return!s&&o===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[o].raws.before),t.prototype.removeChild.call(this,r)},i.toResult=function(r){r===void 0&&(r={});var s=new Lc(new Dc,this,r);return s.stringify()},n})(Nc);pr.registerLazyResult=function(t){Lc=t},pr.registerProcessor=function(t){Dc=t};var Jr=pr;pr.default=pr,Nc.registerRoot(pr);var Xr={comma:function(n){return Xr.split(n,[","],!0)},space:function(n){var i=[" ","\n"," "];return Xr.split(n,i)},split:function(n,i,e){for(var r=[],s="",o=!1,a=0,u=!1,c="",l=!1,f=E(n),p;!(p=f()).done;){var g=p.value;l?l=!1:g==="\\"?l=!0:u?g===c&&(u=!1):g==='"'||g==="'"?(u=!0,c=g):g==="("?a+=1:g===")"?a>0&&(a-=1):a===0&&i.includes(g)&&(o=!0),o?(s!==""&&r.push(s.trim()),s="",o=!1):s+=g}return(e||s!=="")&&r.push(s.trim()),r}},Fc=Xr;Xr.default=Xr;var Uc=Vt,ag=Fc,ri=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return ie(n,[{key:"selectors",get:function(){return ag.comma(this.selector)},set:function(e){var r=this.selector?this.selector.match(/,\s*/):null,s=r?r[0]:","+this.raw("between","beforeOpen");this.selector=e.join(s)}}]),n})(Uc),fo=ri;ri.default=ri,Uc.registerRule(ri);var ug=qn,cg=og,lg=Hn,fg=lo,hg=Jr,Bc=fo,qc={empty:!0,space:!0};function pg(t){for(var n=t.length-1;n>=0;n--){var i=t[n],e=i[3]||i[2];if(e)return e}}var dg=(function(){function t(i){this.input=i,this.root=new hg,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:i,start:{column:1,line:1,offset:0}}}var n=t.prototype;return n.atrule=function(e){var r=new fg;r.name=e[1].slice(1),r.name===""&&this.unnamedAtrule(r,e),this.init(r,e[2]);for(var s,o,a,u=!1,c=!1,l=[],f=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),s=e[0],s==="("||s==="["?f.push(s==="("?")":"]"):s==="{"&&f.length>0?f.push("}"):s===f[f.length-1]&&f.pop(),f.length===0)if(s===";"){r.source.end=this.getPosition(e[2]),r.source.end.offset++,this.semicolon=!0;break}else if(s==="{"){c=!0;break}else if(s==="}"){if(l.length>0){for(a=l.length-1,o=l[a];o&&o[0]==="space";)o=l[--a];o&&(r.source.end=this.getPosition(o[3]||o[2]),r.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}r.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(r.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(r,"params",l),u&&(e=l[l.length-1],r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++,this.spaces=r.raws.between,r.raws.between="")):(r.raws.afterName="",r.params=""),c&&(r.nodes=[],this.current=r)},n.checkMissedSemicolon=function(e){var r=this.colon(e);if(r!==!1){for(var s=0,o,a=r-1;a>=0&&(o=e[a],!(o[0]!=="space"&&(s+=1,s===2)));a--);throw this.input.error("Missed semicolon",o[0]==="word"?o[3]+1:o[2])}},n.colon=function(e){for(var r=0,s,o,a,u=E(e.entries()),c;!(c=u()).done;){var l=c.value,f=l[0],p=l[1];if(s=p,o=s[0],o==="("&&(r+=1),o===")"&&(r-=1),r===0&&o===":")if(!a)this.doubleColon(s);else{if(a[0]==="word"&&a[1]==="progid")continue;return f}a=s}return!1},n.comment=function(e){var r=new lg;this.init(r,e[2]),r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++;var s=e[1].slice(2,-2);if(/^\s*$/.test(s))r.text="",r.raws.left=s,r.raws.right="";else{var o=s.match(/^(\s*)([^]*\S)(\s*)$/);r.text=o[2],r.raws.left=o[1],r.raws.right=o[3]}},n.createTokenizer=function(){this.tokenizer=cg(this.input)},n.decl=function(e,r){var s=new ug;this.init(s,e[0][2]);var o=e[e.length-1];for(o[0]===";"&&(this.semicolon=!0,e.pop()),s.source.end=this.getPosition(o[3]||o[2]||pg(e)),s.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),s.raws.before+=e.shift()[1];for(s.source.start=this.getPosition(e[0][2]),s.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;s.prop+=e.shift()[1]}s.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){s.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),s.raws.between+=u[1];(s.prop[0]==="_"||s.prop[0]==="*")&&(s.raws.before+=s.prop[0],s.prop=s.prop.slice(1));for(var c=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)c.push(e.shift());this.precheckMissedSemicolon(e);for(var f=e.length-1;f>=0;f--){if(u=e[f],u[1].toLowerCase()==="!important"){s.important=!0;var p=this.stringFrom(e,f);p=this.spacesFromEnd(e)+p,p!==" !important"&&(s.raws.important=p);break}else if(u[1].toLowerCase()==="important"){for(var g=e.slice(0),v="",m=f;m>0;m--){var d=g[m][0];if(v.trim().indexOf("!")===0&&d!=="space")break;v=g.pop()[1]+v}v.trim().indexOf("!")===0&&(s.important=!0,s.raws.important=v,e=g)}if(u[0]!=="space"&&u[0]!=="comment")break}var y=e.some(function(_){return _[0]!=="space"&&_[0]!=="comment"});y&&(s.raws.between+=c.map(function(_){return _[1]}).join(""),c=[]),this.raw(s,"value",c.concat(e),r),s.value.includes(":")&&!r&&this.checkMissedSemicolon(e)},n.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},n.emptyRule=function(e){var r=new Bc;this.init(r,e[2]),r.selector="",r.raws.between="",this.current=r},n.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},n.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},n.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var r=this.current.nodes[this.current.nodes.length-1];r&&r.type==="rule"&&!r.raws.ownSemicolon&&(r.raws.ownSemicolon=this.spaces,this.spaces="")}},n.getPosition=function(e){var r=this.input.fromOffset(e);return{column:r.col,line:r.line,offset:e}},n.init=function(e,r){this.current.push(e),e.source={input:this.input,start:this.getPosition(r)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},n.other=function(e){for(var r=!1,s=null,o=!1,a=null,u=[],c=e[1].startsWith("--"),l=[],f=e;f;){if(s=f[0],l.push(f),s==="("||s==="[")a||(a=f),u.push(s==="("?")":"]");else if(c&&o&&s==="{")a||(a=f),u.push("}");else if(u.length===0)if(s===";")if(o){this.decl(l,c);return}else break;else if(s==="{"){this.rule(l);return}else if(s==="}"){this.tokenizer.back(l.pop()),r=!0;break}else s===":"&&(o=!0);else s===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));f=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(r=!0),u.length>0&&this.unclosedBracket(a),r&&o){if(!c)for(;l.length&&(f=l[l.length-1][0],!(f!=="space"&&f!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,c)}else this.unknownWord(l)},n.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},n.precheckMissedSemicolon=function(){},n.raw=function(e,r,s,o){for(var a,u,c=s.length,l="",f=!0,p,g,v=0;vparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+o+" uses "+a+". Perhaps this is the source of the error below.")}}catch(f){console&&console.error&&console.error(f)}return e},n.prepareVisitors=function(){var e=this;this.listeners={};for(var r=function(l,f,p){e.listeners[f]||(e.listeners[f]=[]),e.listeners[f].push([l,p])},s=E(this.plugins),o;!(o=s()).done;){var a=o.value;if((typeof a=="undefined"?"undefined":P(a))==="object")for(var u in a){if(!kg[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Rg[u])if(P(a[u])==="object")for(var c in a[u])c==="*"?r(a,u,a[u][c]):r(a,u+"-"+c.toLowerCase(),a[u][c]);else typeof a[u]=="function"&&r(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},n.runAsync=function(){var e=this;return Tn(function(){var r,s,o,a,u,c,l,f,p,g,v,m;return Gt(this,function(d){switch(d.label){case 0:e.plugin=0,r=0,d.label=1;case 1:if(!(r0))return[3,13];if(l=e.visitTick(c),!Zr(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw f=d.sent(),p=c[c.length-1].node,e.handleError(f,p);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];g=function(){var y,_,w,S,b;return Gt(this,function(O){switch(O.label){case 0:y=m.value,_=y[0],w=y[1],e.result.lastPlugin=_,O.label=1;case 1:return O.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(M){return w(M,e.helpers)}),[4,Promise.all(S)]);case 2:return O.sent(),[3,5];case 3:return[4,w(u,e.helpers)];case 4:O.sent(),O.label=5;case 5:return[3,7];case 6:throw b=O.sent(),e.handleError(b);case 7:return[2]}})},v=E(e.listeners.OnceExit),d.label=15;case 15:return(m=v()).done?[3,18]:[5,Ls(g())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},n.runOnRoot=function(e){var r=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":P(e))==="object"&&e.Once){if(this.result.root.type==="document"){var s=this.result.root.nodes.map(function(o){return e.Once(o,r.helpers)});return Zr(s[0])?Promise.all(s):s}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(o){throw this.handleError(o)}},n.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,r=bg;e.syntax&&(r=e.syntax.stringify),e.stringifier&&(r=e.stringifier),r.stringify&&(r=r.stringify);var s=new wg(r,this.result.root,this.result.opts),o=s.generate();return this.result.css=o[0],this.result.map=o[1],this.result},n.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=E(this.plugins),r;!(r=e()).done;){var s=r.value,o=this.runOnRoot(s);if(Zr(o))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Ze];)a[Ze]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=E(a.nodes),c;!(c=u()).done;){var l=c.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},n.then=function(e,r){return process.env.NODE_ENV!=="production"&&("from"in this.opts||Eg("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,r)},n.toString=function(){return this.css},n.visitSync=function(e,r){for(var s=E(e),o;!(o=s()).done;){var a=o.value,u=a[0],c=a[1];this.result.lastPlugin=u;var l=void 0;try{l=c(r,this.helpers)}catch(f){throw this.handleError(f,r.proxyOf)}if(r.type!=="root"&&r.type!=="document"&&!r.parent)return!0;if(Zr(l))throw this.getAsyncError()}},n.visitTick=function(e){var r=e[e.length-1],s=r.node,o=r.visitors;if(s.type!=="root"&&s.type!=="document"&&!s.parent){e.pop();return}if(o.length>0&&r.visitorIndex",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},i.showSourceCode=function(r){var s=this;if(!this.source)return"";var o=this.source;r==null&&(r=Qc.isColorSupported),el&&r&&(o=el(o));var a=o.split(/\r?\n/),u=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),l=String(c).length,f,p;if(r){var g=Qc.createColors(!0),v=g.bold,m=g.gray,d=g.red;f=function(y){return v(d(y))},p=function(y){return m(y)}}else f=p=function(y){return y};return a.slice(u,c).map(function(y,_){var w=u+1+_,S=" "+(" "+w).slice(-l)+" | ";if(w===s.line){var b=p(S.replace(/\d/g," "))+y.slice(0,s.column-1).replace(/[^\t]/g," ");return f(">")+p(S)+y+"\n "+b+f("^")}return" "+p(S)+y}).join("\n")},i.toString=function(){var r=this.showSourceCode();return r&&(r="\n\n"+r+"\n"),this.name+": "+this.message+r},n})(zr(Error)),wo=_o;_o.default=_o;var St={};St.isClean=Symbol("isClean"),St.my=Symbol("my");var tl={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function dm(t){return t[0].toUpperCase()+t.slice(1)}var bo=(function(){function t(i){this.builder=i}var n=t.prototype;return n.atrule=function(e,r){var s="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?s+=e.raws.afterName:o&&(s+=" "),e.nodes)this.block(e,s+o);else{var a=(e.raws.between||"")+(r?";":"");this.builder(s+o+a,e)}},n.beforeAfter=function(e,r){var s;e.type==="decl"?s=this.raw(e,null,"beforeDecl"):e.type==="comment"?s=this.raw(e,null,"beforeComment"):r==="before"?s=this.raw(e,null,"beforeRule"):s=this.raw(e,null,"beforeClose");for(var o=e.parent,a=0;o&&o.type!=="root";)a+=1,o=o.parent;if(s.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var c=0;c0&&e.nodes[r].type==="comment";)r-=1;for(var s=this.raw(e,"semicolon"),o=0;o0&&typeof s.raws.after!="undefined")return r=s.raws.after,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawBeforeComment=function(e,r){var s;return e.walkComments(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeDecl"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeDecl=function(e,r){var s;return e.walkDecls(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeRule"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeOpen=function(e){var r;return e.walk(function(s){if(s.type!=="decl"&&(r=s.raws.between,typeof r!="undefined"))return!1}),r},n.rawBeforeRule=function(e){var r;return e.walk(function(s){if(s.nodes&&(s.parent!==e||e.first!==s)&&typeof s.raws.before!="undefined")return r=s.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawColon=function(e){var r;return e.walkDecls(function(s){if(typeof s.raws.between!="undefined")return r=s.raws.between.replace(/[^\s:]/g,""),!1}),r},n.rawEmptyBody=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length===0&&(r=s.raws.after,typeof r!="undefined"))return!1}),r},n.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var r;return e.walk(function(s){var o=s.parent;if(o&&o!==e&&o.parent&&o.parent===e&&typeof s.raws.before!="undefined"){var a=s.raws.before.split("\n");return r=a[a.length-1],r=r.replace(/\S/g,""),!1}}),r},n.rawSemicolon=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length&&s.last.type==="decl"&&(r=s.raws.semicolon,typeof r!="undefined"))return!1}),r},n.rawValue=function(e,r){var s=e[r],o=e.raws[r];return o&&o.value===s?o.raw:s},n.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},n.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},n.stringify=function(e,r){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,r)},t})(),rl=bo;bo.default=bo;var vm=rl;function So(t,n){var i=new vm(n);i.stringify(t)}var ii=So;So.default=So;var si=St.isClean,gm=St.my,mm=wo,ym=rl,_m=ii;function Co(t,n){var i=new t.constructor;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&e!=="proxyCache"){var r=t[e],s=typeof r=="undefined"?"undefined":P(r);e==="parent"&&s==="object"?n&&(i[e]=n):e==="source"?i[e]=r:Array.isArray(r)?i[e]=r.map(function(o){return Co(o,i)}):(s==="object"&&r!==null&&(r=Co(r)),i[e]=r)}return i}var Eo=(function(){function t(i){i===void 0&&(i={}),this.raws={},this[si]=!1,this[gm]=!0;for(var e in i)if(e==="nodes"){this.nodes=[];for(var r=E(i[e]),s;!(s=r()).done;){var o=s.value;typeof o.clone=="function"?this.append(o.clone()):this.append(o)}}else this[e]=i[e]}var n=t.prototype;return n.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var r=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+r.input.from+":"+r.start.line+":"+r.start.column+"$&")}return e},n.after=function(e){return this.parent.insertAfter(this,e),this},n.assign=function(e){e===void 0&&(e={});for(var r in e)this[r]=e[r];return this},n.before=function(e){return this.parent.insertBefore(this,e),this},n.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},n.clone=function(e){e===void 0&&(e={});var r=Co(this);for(var s in e)r[s]=e[s];return r},n.cloneAfter=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertAfter(this,r),r},n.cloneBefore=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertBefore(this,r),r},n.error=function(e,r){if(r===void 0&&(r={}),this.source){var s=this.rangeBy(r),o=s.end,a=s.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:o.column,line:o.line},r)}return new mm(e)},n.getProxyProcessor=function(){return{get:function(r,s){return s==="proxyOf"?r:s==="root"?function(){return r.root().toProxy()}:r[s]},set:function(r,s,o){return r[s]===o||(r[s]=o,(s==="prop"||s==="value"||s==="name"||s==="params"||s==="important"||s==="text")&&r.markDirty()),!0}}},n.markDirty=function(){if(this[si]){this[si]=!1;for(var e=this;e=e.parent;)e[si]=!1}},n.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},n.positionBy=function(e,r){var s=this.source.start;if(e.index)s=this.positionInside(e.index,r);else if(e.word){r=this.toString();var o=r.indexOf(e.word);o!==-1&&(s=this.positionInside(o,r))}return s},n.positionInside=function(e,r){for(var s=r||this.toString(),o=this.source.start.column,a=this.source.start.line,u=0;u-1&&o>-1&&(this.annotation=this.getAnnotationURL(e.substring(s,o)))}},n.loadFile=function(e){if(this.root=Oo(e),Em(e))return this.mapFile=e,Im(e,"utf-8").toString().trim()},n.loadMap=function(e,r){if(r===!1)return!1;if(r){if(typeof r=="string")return r;if(typeof r=="function"){var s=r(e);if(s){var o=this.loadFile(s);if(!o)throw new Error("Unable to load previous source map: "+s.toString());return o}}else{if(T(r,nl))return il.fromSourceMap(r).toString();if(T(r,il))return r.toString();if(this.isMap(r))return JSON.stringify(r);throw new Error("Unsupported previous source map format: "+r.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Om(Oo(e),a)),this.loadFile(a)}}},n.startWith=function(e,r){return e?e.substr(0,r.length)===r:!1},n.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},t})(),sl=xo;xo.default=xo;var km=ye.SourceMapConsumer,Rm=ye.SourceMapGenerator,ol=ye.fileURLToPath,ui=ye.pathToFileURL,ko=ye.isAbsolute,Ro=ye.resolve,Am=Cm.nanoid,Ao=ye,al=wo,Mm=sl,Mo=Symbol("fromOffsetCache"),Tm=!!(km&&Rm),ul=!!(Ro&&ko),ci=(function(){function t(i,e){if(e===void 0&&(e={}),i===null||typeof i=="undefined"||(typeof i=="undefined"?"undefined":P(i))==="object"&&!i.toString)throw new Error("PostCSS received "+i+" instead of CSS string");if(this.css=i.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!ul||/^\w+:\/\//.test(e.from)||ko(e.from)?this.file=e.from:this.file=Ro(e.from)),ul&&Tm){var r=new Mm(this.css,e);if(r.text){this.map=r;var s=r.consumer().file;!this.file&&s&&(this.file=this.mapResolve(s))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var n=t.prototype;return n.error=function(e,r,s,o){o===void 0&&(o={});var a,u,c;if(r&&(typeof r=="undefined"?"undefined":P(r))==="object"){var l=r,f=s;if(typeof l.offset=="number"){var p=this.fromOffset(l.offset);r=p.line,s=p.col}else r=l.line,s=l.column;if(typeof f.offset=="number"){var g=this.fromOffset(f.offset);u=g.line,c=g.col}else u=f.line,c=f.column}else if(!s){var v=this.fromOffset(r);r=v.line,s=v.col}var m=this.origin(r,s,u,c);return m?a=new al(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,o.plugin):a=new al(e,u===void 0?r:{column:s,line:r},u===void 0?s:{column:c,line:u},this.css,this.file,o.plugin),a.input={column:s,endColumn:c,endLine:u,line:r,source:this.css},this.file&&(ui&&(a.input.url=ui(this.file).toString()),a.input.file=this.file),a},n.fromOffset=function(e){var r,s;if(this[Mo])s=this[Mo];else{var o=this.css.split("\n");s=new Array(o.length);for(var a=0,u=0,c=o.length;u=r)l=s.length-1;else for(var f=s.length-2,p;l>1),e=s[p+1])l=p+1;else{l=p;break}return{col:e-s[l]+1,line:l+1}},n.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:Ro(this.map.consumer().sourceRoot||this.map.root||".",e)},n.origin=function(e,r,s,o){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:r,line:e});if(!u.source)return!1;var c;typeof s=="number"&&(c=a.originalPositionFor({column:o,line:s}));var l;ko(u.source)?l=ui(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||ui(this.map.mapFile));var f={column:u.column,endColumn:c&&c.column,endLine:c&&c.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(ol)f.file=ol(l);else throw new Error("file: protocol is not available in this PostCSS build");var p=a.sourceContentFor(u.source);return p&&(f.source=p),f},n.toJSON=function(){for(var e={},r=0,s=["hasBOM","css","file","id"];r=0;r--)e=this.root.nodes[r],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(r);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},n.generate=function(){if(this.clearAnnotation(),Nm&&$m&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(r){e+=r}),[e]},n.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=fi.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new fi({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},n.generateString=function(){var e=this;this.css="",this.map=new fi({file:this.outputFile(),ignoreInvalidMapping:!0});var r=1,s=1,o="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,c;this.stringify(this.root,function(l,f,p){if(e.css+=l,f&&p!=="end"&&(a.generated.line=r,a.generated.column=s-1,f.source&&f.source.start?(a.source=e.sourcePath(f),a.original.line=f.source.start.line,a.original.column=f.source.start.column-1,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(r+=u.length,c=l.lastIndexOf("\n"),s=l.length-c):s+=l.length,f&&p!=="start"){var g=f.parent||{raws:{}},v=f.type==="decl"||f.type==="atrule"&&!f.nodes;(!v||f!==g.last||g.raws.semicolon)&&(f.source&&f.source.end?(a.source=e.sourcePath(f),a.original.line=f.source.end.line,a.original.column=f.source.end.column-1,a.generated.line=r,a.generated.column=s-2,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,a.generated.line=r,a.generated.column=s-1,e.map.addMapping(a)))}})},n.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},n.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(r){return r.inline}):!0},n.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},n.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},n.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},n.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var r=this.memoizedPaths.get(e);if(r)return r;var s=this.opts.to?hi(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(s=hi(fl(s,this.mapOpts.annotation)));var o=ll(s,e);return this.memoizedPaths.set(e,o),o},n.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(s){if(s.source&&s.source.input.map){var o=s.source.input.map;e.previousMaps.includes(o)||e.previousMaps.push(o)}});else{var r=new Pm(this.originalCSS,this.opts);r.map&&this.previousMaps.push(r.map)}return this.previousMaps},n.setSourcesContent=function(){var e=this,r={};if(this.root)this.root.walk(function(o){if(o.source){var a=o.source.input.from;if(a&&!r[a]){r[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,o.source.input.css)}}});else if(this.css){var s=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(s,this.css)}},n.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},n.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},n.toFileUrl=function(e){var r=this.memoizedFileURLs.get(e);if(r)return r;if(pl){var s=pl(e).toString();return this.memoizedFileURLs.set(e,s),s}else throw new Error("`map.absolute` option is not available in this PostCSS build")},n.toUrl=function(e){var r=this.memoizedURLs.get(e);if(r)return r;hl==="\\"&&(e=e.replace(/\\/g,"/"));var s=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,s),s},t})(),dl=Lm,Dm=oi,To=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="comment",e}return n})(Dm),pi=To;To.default=To;var vl=St.isClean,gl=St.my,ml=ai,yl=pi,Fm=oi,_l,Po,$o,wl;function bl(t){return t.map(function(n){return n.nodes&&(n.nodes=bl(n.nodes)),delete n.source,n})}function Sl(t){if(t[vl]=!1,t.proxyOf.nodes)for(var n=E(t.proxyOf.nodes),i;!(i=n()).done;){var e=i.value;Sl(e)}}var ft=(function(t){ue(n,t);function n(){return t.apply(this,arguments)||this}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?c-1:0),f=1;f=r&&(this.indexes[o]=s-1);return this.markDirty(),this},i.replaceValues=function(r,s,o){return o||(o=s,s={}),this.walkDecls(function(a){s.props&&!s.props.includes(a.prop)||s.fast&&!a.value.includes(s.fast)||(a.value=a.value.replace(r,o))}),this.markDirty(),this},i.some=function(r){return this.nodes.some(r)},i.walk=function(r){return this.each(function(s,o){var a;try{a=r(s,o)}catch(u){throw s.addToError(u)}return a!==!1&&s.walk&&(a=s.walk(r)),a})},i.walkAtRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="atrule"&&r.test(o.name))return s(o,a)}):this.walk(function(o,a){if(o.type==="atrule"&&o.name===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="atrule")return s(o,a)}))},i.walkComments=function(r){return this.walk(function(s,o){if(s.type==="comment")return r(s,o)})},i.walkDecls=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="decl"&&r.test(o.prop))return s(o,a)}):this.walk(function(o,a){if(o.type==="decl"&&o.prop===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="decl")return s(o,a)}))},i.walkRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="rule"&&r.test(o.selector))return s(o,a)}):this.walk(function(o,a){if(o.type==="rule"&&o.selector===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="rule")return s(o,a)}))},ie(n,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),n})(Fm);ft.registerParse=function(t){_l=t},ft.registerRule=function(t){Po=t},ft.registerAtRule=function(t){$o=t},ft.registerRoot=function(t){wl=t};var jt=ft;ft.default=ft,ft.rebuild=function(t){t.type==="atrule"?Object.setPrototypeOf(t,$o.prototype):t.type==="rule"?Object.setPrototypeOf(t,Po.prototype):t.type==="decl"?Object.setPrototypeOf(t,ml.prototype):t.type==="comment"?Object.setPrototypeOf(t,yl.prototype):t.type==="root"&&Object.setPrototypeOf(t,wl.prototype),t[gl]=!0,t.nodes&&t.nodes.forEach(function(n){ft.rebuild(n)})};var Um=jt,Cl,El,tn=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,z({type:"document"},e))||this,r.nodes||(r.nodes=[]),r}var i=n.prototype;return i.toResult=function(r){r===void 0&&(r={});var s=new Cl(new El,this,r);return s.stringify()},n})(Um);tn.registerLazyResult=function(t){Cl=t},tn.registerProcessor=function(t){El=t};var No=tn;tn.default=tn;var Il={},Ol=function(n){Il[n]||(Il[n]=!0,typeof console!="undefined"&&console.warn&&console.warn(n))},Lo=(function(){function t(i,e){if(e===void 0&&(e={}),this.type="warning",this.text=i,e.node&&e.node.source){var r=e.node.rangeBy(e);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(var s in e)this[s]=e[s]}var n=t.prototype;return n.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},t})(),xl=Lo;Lo.default=Lo;var Bm=xl,Do=(function(){function t(i,e,r){this.processor=i,this.messages=[],this.root=e,this.opts=r,this.css=void 0,this.map=void 0}var n=t.prototype;return n.toString=function(){return this.css},n.warn=function(e,r){r===void 0&&(r={}),r.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(r.plugin=this.lastPlugin.postcssPlugin);var s=new Bm(e,r);return this.messages.push(s),s},n.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},ie(t,[{key:"content",get:function(){return this.css}}]),t})(),Fo=Do;Do.default=Do;var Uo=39,kl=34,di=92,Rl=47,vi=10,rn=32,gi=12,mi=9,yi=13,qm=91,zm=93,Gm=40,Wm=41,Vm=123,jm=125,Hm=59,Km=42,Ym=58,Jm=64,_i=/[\t\n\f\r "#'()/;[\\\]{}]/g,wi=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,Xm=/.[\r\n"'(/\\]/,Al=/[\da-f]/i,Zm=function(n,i){i===void 0&&(i={});var e=n.css.valueOf(),r=i.ignoreErrors,s,o,a,u,c,l,f,p,g,v,m=e.length,d=0,y=[],_=[];function w(){return d}function S(R){throw n.error("Unclosed "+R,d)}function b(){return _.length===0&&d>=m}function O(R){if(_.length)return _.pop();if(!(d>=m)){var L=R?R.ignoreUnclosed:!1;switch(s=e.charCodeAt(d),s){case vi:case rn:case mi:case yi:case gi:{o=d;do o+=1,s=e.charCodeAt(o);while(s===rn||s===vi||s===mi||s===yi||s===gi);v=["space",e.slice(d,o)],d=o-1;break}case qm:case zm:case Vm:case jm:case Ym:case Hm:case Wm:{var G=String.fromCharCode(s);v=[G,G,d];break}case Gm:{if(p=y.length?y.pop()[1]:"",g=e.charCodeAt(d+1),p==="url"&&g!==Uo&&g!==kl&&g!==rn&&g!==vi&&g!==mi&&g!==gi&&g!==yi){o=d;do{if(l=!1,o=e.indexOf(")",o+1),o===-1)if(r||L){o=d;break}else S("bracket");for(f=o;e.charCodeAt(f-1)===di;)f-=1,l=!l}while(l);v=["brackets",e.slice(d,o+1),d,o],d=o}else o=e.indexOf(")",d+1),u=e.slice(d,o+1),o===-1||Xm.test(u)?v=["(","(",d]:(v=["brackets",u,d,o],d=o);break}case Uo:case kl:{a=s===Uo?"'":'"',o=d;do{if(l=!1,o=e.indexOf(a,o+1),o===-1)if(r||L){o=d+1;break}else S("string");for(f=o;e.charCodeAt(f-1)===di;)f-=1,l=!l}while(l);v=["string",e.slice(d,o+1),d,o],d=o;break}case Jm:{_i.lastIndex=d+1,_i.test(e),_i.lastIndex===0?o=e.length-1:o=_i.lastIndex-2,v=["at-word",e.slice(d,o+1),d,o],d=o;break}case di:{for(o=d,c=!0;e.charCodeAt(o+1)===di;)o+=1,c=!c;if(s=e.charCodeAt(o+1),c&&s!==Rl&&s!==rn&&s!==vi&&s!==mi&&s!==yi&&s!==gi&&(o+=1,Al.test(e.charAt(o)))){for(;Al.test(e.charAt(o+1));)o+=1;e.charCodeAt(o+1)===rn&&(o+=1)}v=["word",e.slice(d,o+1),d,o],d=o;break}default:{s===Rl&&e.charCodeAt(d+1)===Km?(o=e.indexOf("*/",d+2)+1,o===0&&(r||L?o=e.length:S("comment")),v=["comment",e.slice(d,o+1),d,o],d=o):(wi.lastIndex=d+1,wi.test(e),wi.lastIndex===0?o=e.length-1:o=wi.lastIndex-2,v=["word",e.slice(d,o+1),d,o],y.push(v),d=o);break}}return d++,v}}function M(R){_.push(R)}return{back:M,endOfFile:b,nextToken:O,position:w}},Ml=jt,bi=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,e)||this,r.type="atrule",r}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?s.raws.before=this.nodes[1].raws.before:delete s.raws.before;else if(this.first!==s)for(var u=E(a),c;!(c=u()).done;){var l=c.value;l.raws.before=s.raws.before}}return a},i.removeChild=function(r,s){var o=this.index(r);return!s&&o===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[o].raws.before),t.prototype.removeChild.call(this,r)},i.toResult=function(r){r===void 0&&(r={});var s=new Pl(new $l,this,r);return s.stringify()},n})(Tl);gr.registerLazyResult=function(t){Pl=t},gr.registerProcessor=function(t){$l=t};var nn=gr;gr.default=gr,Tl.registerRoot(gr);var sn={comma:function(n){return sn.split(n,[","],!0)},space:function(n){var i=[" ","\n"," "];return sn.split(n,i)},split:function(n,i,e){for(var r=[],s="",o=!1,a=0,u=!1,c="",l=!1,f=E(n),p;!(p=f()).done;){var g=p.value;l?l=!1:g==="\\"?l=!0:u?g===c&&(u=!1):g==='"'||g==="'"?(u=!0,c=g):g==="("?a+=1:g===")"?a>0&&(a-=1):a===0&&i.includes(g)&&(o=!0),o?(s!==""&&r.push(s.trim()),s="",o=!1):s+=g}return(e||s!=="")&&r.push(s.trim()),r}},Nl=sn;sn.default=sn;var Ll=jt,Qm=Nl,Si=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return ie(n,[{key:"selectors",get:function(){return Qm.comma(this.selector)},set:function(e){var r=this.selector?this.selector.match(/,\s*/):null,s=r?r[0]:","+this.raw("between","beforeOpen");this.selector=e.join(s)}}]),n})(Ll),qo=Si;Si.default=Si,Ll.registerRule(Si);var ey=ai,ty=Zm,ry=pi,ny=Bo,iy=nn,Dl=qo,Fl={empty:!0,space:!0};function sy(t){for(var n=t.length-1;n>=0;n--){var i=t[n],e=i[3]||i[2];if(e)return e}}var oy=(function(){function t(i){this.input=i,this.root=new iy,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:i,start:{column:1,line:1,offset:0}}}var n=t.prototype;return n.atrule=function(e){var r=new ny;r.name=e[1].slice(1),r.name===""&&this.unnamedAtrule(r,e),this.init(r,e[2]);for(var s,o,a,u=!1,c=!1,l=[],f=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),s=e[0],s==="("||s==="["?f.push(s==="("?")":"]"):s==="{"&&f.length>0?f.push("}"):s===f[f.length-1]&&f.pop(),f.length===0)if(s===";"){r.source.end=this.getPosition(e[2]),r.source.end.offset++,this.semicolon=!0;break}else if(s==="{"){c=!0;break}else if(s==="}"){if(l.length>0){for(a=l.length-1,o=l[a];o&&o[0]==="space";)o=l[--a];o&&(r.source.end=this.getPosition(o[3]||o[2]),r.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}r.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(r.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(r,"params",l),u&&(e=l[l.length-1],r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++,this.spaces=r.raws.between,r.raws.between="")):(r.raws.afterName="",r.params=""),c&&(r.nodes=[],this.current=r)},n.checkMissedSemicolon=function(e){var r=this.colon(e);if(r!==!1){for(var s=0,o,a=r-1;a>=0&&(o=e[a],!(o[0]!=="space"&&(s+=1,s===2)));a--);throw this.input.error("Missed semicolon",o[0]==="word"?o[3]+1:o[2])}},n.colon=function(e){for(var r=0,s,o,a,u=E(e.entries()),c;!(c=u()).done;){var l=c.value,f=l[0],p=l[1];if(s=p,o=s[0],o==="("&&(r+=1),o===")"&&(r-=1),r===0&&o===":")if(!a)this.doubleColon(s);else{if(a[0]==="word"&&a[1]==="progid")continue;return f}a=s}return!1},n.comment=function(e){var r=new ry;this.init(r,e[2]),r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++;var s=e[1].slice(2,-2);if(/^\s*$/.test(s))r.text="",r.raws.left=s,r.raws.right="";else{var o=s.match(/^(\s*)([^]*\S)(\s*)$/);r.text=o[2],r.raws.left=o[1],r.raws.right=o[3]}},n.createTokenizer=function(){this.tokenizer=ty(this.input)},n.decl=function(e,r){var s=new ey;this.init(s,e[0][2]);var o=e[e.length-1];for(o[0]===";"&&(this.semicolon=!0,e.pop()),s.source.end=this.getPosition(o[3]||o[2]||sy(e)),s.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),s.raws.before+=e.shift()[1];for(s.source.start=this.getPosition(e[0][2]),s.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;s.prop+=e.shift()[1]}s.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){s.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),s.raws.between+=u[1];(s.prop[0]==="_"||s.prop[0]==="*")&&(s.raws.before+=s.prop[0],s.prop=s.prop.slice(1));for(var c=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)c.push(e.shift());this.precheckMissedSemicolon(e);for(var f=e.length-1;f>=0;f--){if(u=e[f],u[1].toLowerCase()==="!important"){s.important=!0;var p=this.stringFrom(e,f);p=this.spacesFromEnd(e)+p,p!==" !important"&&(s.raws.important=p);break}else if(u[1].toLowerCase()==="important"){for(var g=e.slice(0),v="",m=f;m>0;m--){var d=g[m][0];if(v.trim().indexOf("!")===0&&d!=="space")break;v=g.pop()[1]+v}v.trim().indexOf("!")===0&&(s.important=!0,s.raws.important=v,e=g)}if(u[0]!=="space"&&u[0]!=="comment")break}var y=e.some(function(_){return _[0]!=="space"&&_[0]!=="comment"});y&&(s.raws.between+=c.map(function(_){return _[1]}).join(""),c=[]),this.raw(s,"value",c.concat(e),r),s.value.includes(":")&&!r&&this.checkMissedSemicolon(e)},n.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},n.emptyRule=function(e){var r=new Dl;this.init(r,e[2]),r.selector="",r.raws.between="",this.current=r},n.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},n.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},n.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var r=this.current.nodes[this.current.nodes.length-1];r&&r.type==="rule"&&!r.raws.ownSemicolon&&(r.raws.ownSemicolon=this.spaces,this.spaces="")}},n.getPosition=function(e){var r=this.input.fromOffset(e);return{column:r.col,line:r.line,offset:e}},n.init=function(e,r){this.current.push(e),e.source={input:this.input,start:this.getPosition(r)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},n.other=function(e){for(var r=!1,s=null,o=!1,a=null,u=[],c=e[1].startsWith("--"),l=[],f=e;f;){if(s=f[0],l.push(f),s==="("||s==="[")a||(a=f),u.push(s==="("?")":"]");else if(c&&o&&s==="{")a||(a=f),u.push("}");else if(u.length===0)if(s===";")if(o){this.decl(l,c);return}else break;else if(s==="{"){this.rule(l);return}else if(s==="}"){this.tokenizer.back(l.pop()),r=!0;break}else s===":"&&(o=!0);else s===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));f=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(r=!0),u.length>0&&this.unclosedBracket(a),r&&o){if(!c)for(;l.length&&(f=l[l.length-1][0],!(f!=="space"&&f!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,c)}else this.unknownWord(l)},n.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},n.precheckMissedSemicolon=function(){},n.raw=function(e,r,s,o){for(var a,u,c=s.length,l="",f=!0,p,g,v=0;vparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+o+" uses "+a+". Perhaps this is the source of the error below.")}}catch(f){console&&console.error&&console.error(f)}return e},n.prepareVisitors=function(){var e=this;this.listeners={};for(var r=function(l,f,p){e.listeners[f]||(e.listeners[f]=[]),e.listeners[f].push([l,p])},s=E(this.plugins),o;!(o=s()).done;){var a=o.value;if((typeof a=="undefined"?"undefined":P(a))==="object")for(var u in a){if(!wy[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!by[u])if(P(a[u])==="object")for(var c in a[u])c==="*"?r(a,u,a[u][c]):r(a,u+"-"+c.toLowerCase(),a[u][c]);else typeof a[u]=="function"&&r(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},n.runAsync=function(){var e=this;return Tn(function(){var r,s,o,a,u,c,l,f,p,g,v,m;return Gt(this,function(d){switch(d.label){case 0:e.plugin=0,r=0,d.label=1;case 1:if(!(r0))return[3,13];if(l=e.visitTick(c),!on(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw f=d.sent(),p=c[c.length-1].node,e.handleError(f,p);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];g=function(){var y,_,w,S,b;return Gt(this,function(O){switch(O.label){case 0:y=m.value,_=y[0],w=y[1],e.result.lastPlugin=_,O.label=1;case 1:return O.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(M){return w(M,e.helpers)}),[4,Promise.all(S)]);case 2:return O.sent(),[3,5];case 3:return[4,w(u,e.helpers)];case 4:O.sent(),O.label=5;case 5:return[3,7];case 6:throw b=O.sent(),e.handleError(b);case 7:return[2]}})},v=E(e.listeners.OnceExit),d.label=15;case 15:return(m=v()).done?[3,18]:[5,Ls(g())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},n.runOnRoot=function(e){var r=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":P(e))==="object"&&e.Once){if(this.result.root.type==="document"){var s=this.result.root.nodes.map(function(o){return e.Once(o,r.helpers)});return on(s[0])?Promise.all(s):s}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(o){throw this.handleError(o)}},n.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,r=py;e.syntax&&(r=e.syntax.stringify),e.stringifier&&(r=e.stringifier),r.stringify&&(r=r.stringify);var s=new hy(r,this.result.root,this.result.opts),o=s.generate();return this.result.css=o[0],this.result.map=o[1],this.result},n.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=E(this.plugins),r;!(r=e()).done;){var s=r.value,o=this.runOnRoot(s);if(on(o))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[Qe];)a[Qe]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=E(a.nodes),c;!(c=u()).done;){var l=c.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},n.then=function(e,r){return process.env.NODE_ENV!=="production"&&("from"in this.opts||gy("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,r)},n.toString=function(){return this.css},n.visitSync=function(e,r){for(var s=E(e),o;!(o=s()).done;){var a=o.value,u=a[0],c=a[1];this.result.lastPlugin=u;var l=void 0;try{l=c(r,this.helpers)}catch(f){throw this.handleError(f,r.proxyOf)}if(r.type!=="root"&&r.type!=="document"&&!r.parent)return!0;if(on(l))throw this.getAsyncError()}},n.visitTick=function(e){var r=e[e.length-1],s=r.node,o=r.visitors;if(s.type!=="root"&&s.type!=="document"&&!s.parent){e.pop();return}if(o.length>0&&r.visitorIndexn?(e&&(clearTimeout(e),e=null),r=u,t.apply(l,o)):!e&&i.trailing!==!1&&(e=setTimeout(function(){r=i.leading===!1?0:Date.now(),e=null,t.apply(l,o)},c))}}function Ii(t,n,i,e,r){r===void 0&&(r=window);var s=r.Object.getOwnPropertyDescriptor(t,n);return r.Object.defineProperty(t,n,e?i:{set:function(a){var u=this;setTimeout(function(){i.set.call(u,a)},0),s&&s.set&&s.set.call(this,a)}}),function(){return Ii(t,n,s||{},!0)}}var Oi=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(Oi=function(){return new Date().getTime()});function ef(t){var n,i,e,r,s=t.document;return{left:s.scrollingElement?s.scrollingElement.scrollLeft:t.pageXOffset!==void 0?t.pageXOffset:s.documentElement.scrollLeft||(s==null?void 0:s.body)&&((n=V.parentElement(s.body))==null?void 0:n.scrollLeft)||((i=s==null?void 0:s.body)==null?void 0:i.scrollLeft)||0,top:s.scrollingElement?s.scrollingElement.scrollTop:t.pageYOffset!==void 0?t.pageYOffset:(s==null?void 0:s.documentElement.scrollTop)||(s==null?void 0:s.body)&&((e=V.parentElement(s.body))==null?void 0:e.scrollTop)||((r=s==null?void 0:s.body)==null?void 0:r.scrollTop)||0}}function tf(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function rf(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function nf(t){if(!t)return null;var n=t.nodeType===t.ELEMENT_NODE?t:V.parentElement(t);return n}function $e(t,n,i,e){if(!t)return!1;var r=nf(t);if(!r)return!1;try{if(typeof n=="string"){if(r.classList.contains(n)||e&&r.closest("."+n)!==null)return!0}else if(Dn(r,n,e))return!0}catch(s){}return!!(i&&(r.matches(i)||e&&r.closest(i)!==null))}function h_(t,n){return n.getId(t)!==-1}function Jo(t,n,i){return t.tagName==="TITLE"&&i.headTitleMutations?!0:n.getId(t)===Hr}function sf(t,n){if(Gr(t))return!1;var i=n.getId(t);if(!n.has(i))return!0;var e=V.parentNode(t);return e&&e.nodeType===t.DOCUMENT_NODE?!1:e?sf(e,n):!0}function Xo(t){return!!t.changedTouches}function p_(t){t===void 0&&(t=window),"NodeList"in t&&!t.NodeList.prototype.forEach&&(t.NodeList.prototype.forEach=Array.prototype.forEach),"DOMTokenList"in t&&!t.DOMTokenList.prototype.forEach&&(t.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function of(t,n){return!!(t.nodeName==="IFRAME"&&n.getMeta(t))}function af(t,n){return!!(t.nodeName==="LINK"&&t.nodeType===t.ELEMENT_NODE&&t.getAttribute&&t.getAttribute("rel")==="stylesheet"&&n.getMeta(t))}function Zo(t){return t?T(t,Qy)&&"shadowRoot"in t?!!t.shadowRoot:!!V.shadowRoot(t):!1}var d_=(function(){function t(){k(this,"id",1),k(this,"styleIDMap",new WeakMap),k(this,"idStyleMap",new Map)}var n=t.prototype;return n.getId=function(e){var r;return(r=this.styleIDMap.get(e))!=null?r:-1},n.has=function(e){return this.styleIDMap.has(e)},n.add=function(e,r){if(this.has(e))return this.getId(e);var s;return r===void 0?s=this.id++:s=r,this.styleIDMap.set(e,s),this.idStyleMap.set(s,e),s},n.getStyle=function(e){return this.idStyleMap.get(e)||null},n.reset=function(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1},n.generateId=function(){return this.id++},n.remove=function(e){var r=this.styleIDMap.get(e);return r!==void 0?(this.styleIDMap.delete(e),this.idStyleMap.delete(r),!0):!1},t})();function uf(t){var n,i=null;return"getRootNode"in t&&((n=V.getRootNode(t))==null?void 0:n.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&V.host(V.getRootNode(t))&&(i=V.host(V.getRootNode(t))),i}function v_(t){for(var n=t,i;i=uf(n);)n=i;return n}function g_(t){var n=t.ownerDocument;if(!n)return!1;var i=v_(t);return V.contains(n,i)}function cf(t){var n=t.ownerDocument;return n?V.contains(n,t)||g_(t):!1}var j=(function(t){return t[t.DomContentLoaded=0]="DomContentLoaded",t[t.Load=1]="Load",t[t.FullSnapshot=2]="FullSnapshot",t[t.IncrementalSnapshot=3]="IncrementalSnapshot",t[t.Meta=4]="Meta",t[t.Custom=5]="Custom",t[t.Plugin=6]="Plugin",t})(j||{}),U=(function(t){return t[t.Mutation=0]="Mutation",t[t.MouseMove=1]="MouseMove",t[t.MouseInteraction=2]="MouseInteraction",t[t.Scroll=3]="Scroll",t[t.ViewportResize=4]="ViewportResize",t[t.Input=5]="Input",t[t.TouchMove=6]="TouchMove",t[t.MediaInteraction=7]="MediaInteraction",t[t.StyleSheetRule=8]="StyleSheetRule",t[t.CanvasMutation=9]="CanvasMutation",t[t.Font=10]="Font",t[t.Log=11]="Log",t[t.Drag=12]="Drag",t[t.StyleDeclaration=13]="StyleDeclaration",t[t.Selection=14]="Selection",t[t.AdoptedStyleSheet=15]="AdoptedStyleSheet",t[t.CustomElement=16]="CustomElement",t})(U||{}),De=(function(t){return t[t.MouseUp=0]="MouseUp",t[t.MouseDown=1]="MouseDown",t[t.Click=2]="Click",t[t.ContextMenu=3]="ContextMenu",t[t.DblClick=4]="DblClick",t[t.Focus=5]="Focus",t[t.Blur=6]="Blur",t[t.TouchStart=7]="TouchStart",t[t.TouchMove_Departed=8]="TouchMove_Departed",t[t.TouchEnd=9]="TouchEnd",t[t.TouchCancel=10]="TouchCancel",t})(De||{}),ht=(function(t){return t[t.Mouse=0]="Mouse",t[t.Pen=1]="Pen",t[t.Touch=2]="Touch",t})(ht||{}),wr=(function(t){return t[t["2D"]=0]="2D",t[t.WebGL=1]="WebGL",t[t.WebGL2=2]="WebGL2",t})(wr||{}),br=(function(t){return t[t.Play=0]="Play",t[t.Pause=1]="Pause",t[t.Seeked=2]="Seeked",t[t.VolumeChange=3]="VolumeChange",t[t.RateChange=4]="RateChange",t})(br||{}),lf=(function(t){return t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment",t})(lf||{});function ff(t){return"__ln"in t}var m_=(function(){function t(){k(this,"length",0),k(this,"head",null),k(this,"tail",null)}var n=t.prototype;return n.get=function(e){if(e>=this.length)throw new Error("Position outside of list range");for(var r=this.head,s=0;s=0;n--){var i=et[n];i.getDoc()===t&&et.splice(n,1)}}function E_(t){var n=t.mousemoveCb,i=t.sampling,e=t.doc,r=t.mirror;if(i.mousemove===!1)return function(){};var s=typeof i.mousemove=="number"?i.mousemove:50,o=typeof i.mousemoveCallback=="number"?i.mousemoveCallback:500,a=[],u,c=cn(H(function(p){var g=Date.now()-u;n(a.map(function(v){return v.timeOffset-=g,v}),p),a=[],u=null}),o),l=H(cn(H(function(p){var g=fn(p),v=Xo(p)?p.changedTouches[0]:p,m=v.clientX,d=v.clientY;u||(u=Oi()),a.push({x:m,y:d,id:r.getId(g),timeOffset:Oi()-u}),c(typeof DragEvent!="undefined"&&T(p,DragEvent)?U.Drag:T(p,MouseEvent)?U.MouseMove:U.TouchMove)}),s,{trailing:!1})),f=[Pe("mousemove",l,e),Pe("touchmove",l,e),Pe("drag",l,e)];return H(function(){f.forEach(function(p){return p()})})}function I_(t){var n=t.mouseInteractionCb,i=t.doc,e=t.mirror,r=t.blockClass,s=t.blockSelector,o=t.sampling;if(o.mouseInteraction===!1)return function(){};var a=o.mouseInteraction===!0||o.mouseInteraction===void 0?{}:o.mouseInteraction,u=[],c=null,l=function(f){return function(p){var g=fn(p);if(!$e(g,r,s,!0)){var v=null,m=f;if("pointerType"in p){switch(p.pointerType){case"mouse":v=ht.Mouse;break;case"touch":v=ht.Touch;break;case"pen":v=ht.Pen;break}v===ht.Touch?De[f]===De.MouseDown?m="TouchStart":De[f]===De.MouseUp&&(m="TouchEnd"):ht.Pen}else Xo(p)&&(v=ht.Touch);v!==null?(c=v,(m.startsWith("Touch")&&v===ht.Touch||m.startsWith("Mouse")&&v===ht.Mouse)&&(v=null)):De[f]===De.Click&&(v=c,c=null);var d=Xo(p)?p.changedTouches[0]:p;if(d){var y=e.getId(g),_=d.clientX,w=d.clientY;H(n)(z({type:De[m],id:y,x:_,y:w},v!==null&&{pointerType:v}))}}}};return Object.keys(De).filter(function(f){return Number.isNaN(Number(f))&&!f.endsWith("_Departed")&&a[f]!==!1}).forEach(function(f){var p=Wt(f),g=l(f);if(window.PointerEvent)switch(De[f]){case De.MouseDown:case De.MouseUp:p=p.replace("mouse","pointer");break;case De.TouchStart:case De.TouchEnd:return}u.push(Pe(p,g,i))}),H(function(){u.forEach(function(f){return f()})})}function mf(t){var n=t.scrollCb,i=t.doc,e=t.mirror,r=t.blockClass,s=t.blockSelector,o=t.sampling,a=H(cn(H(function(u){var c=fn(u);if(!(!c||$e(c,r,s,!0))){var l=e.getId(c);if(c===i&&i.defaultView){var f=ef(i.defaultView);n({id:l,x:f.left,y:f.top})}else n({id:l,x:c.scrollLeft,y:c.scrollTop})}}),o.scroll||100));return Pe("scroll",a,i)}function O_(t,n){var i=t.viewportResizeCb,e=n.win,r=-1,s=-1,o=H(cn(H(function(){var a=tf(),u=rf();(r!==a||s!==u)&&(i({width:Number(u),height:Number(a)}),r=a,s=u)}),200));return Pe("resize",o,e)}var x_=["INPUT","TEXTAREA","SELECT"],yf=new WeakMap;function k_(t){var n=t.inputCb,i=t.doc,e=t.mirror,r=t.blockClass,s=t.blockSelector,o=t.ignoreClass,a=t.ignoreSelector,u=t.maskInputOptions,c=t.maskInputFn,l=t.sampling,f=t.userTriggeredOnInput;function p(S){var b=fn(S),O=S.isTrusted,M=b&&b.tagName;if(b&&M==="OPTION"&&(b=V.parentElement(b)),!(!b||!M||x_.indexOf(M)<0||$e(b,r,s,!0))&&!(b.classList.contains(o)||a&&b.matches(a))){var R=b.value,L=!1,G=jr(b)||"";G==="radio"||G==="checkbox"?L=b.checked:(u[M.toLowerCase()]||u[G])&&(R=Vr({element:b,maskInputOptions:u,tagName:M,type:G,value:R,maskInputFn:c})),g(b,f?{text:R,isChecked:L,userTriggered:O}:{text:R,isChecked:L});var ge=b.name;G==="radio"&&ge&&L&&i.querySelectorAll('input[type="radio"][name="'+ge+'"]').forEach(function(F){if(F!==b){var W=F.value;g(F,f?{text:W,isChecked:!L,userTriggered:!1}:{text:W,isChecked:!L})}})}}function g(S,b){var O=yf.get(S);if(!O||O.text!==b.text||O.isChecked!==b.isChecked){yf.set(S,b);var M=e.getId(S);H(n)(z({},b,{id:M}))}}var v=l.input==="last"?["change"]:["input","change"],m=v.map(function(S){return Pe(S,H(p),i)}),d=i.defaultView;if(!d)return function(){m.forEach(function(S){return S()})};var y=d.Object.getOwnPropertyDescriptor(d.HTMLInputElement.prototype,"value"),_=[[d.HTMLInputElement.prototype,"value"],[d.HTMLInputElement.prototype,"checked"],[d.HTMLSelectElement.prototype,"value"],[d.HTMLTextAreaElement.prototype,"value"],[d.HTMLSelectElement.prototype,"selectedIndex"],[d.HTMLOptionElement.prototype,"selected"]];if(y&&y.set){var w;(w=m).push.apply(w,[].concat(_.map(function(S){return Ii(S[0],S[1],{set:function(){H(p)({target:this,isTrusted:!1})}},!1,d)})))}return H(function(){m.forEach(function(S){return S()})})}function xi(t){var n=[];function i(e,r){if(ki("CSSGroupingRule")&&T(e.parentRule,CSSGroupingRule)||ki("CSSMediaRule")&&T(e.parentRule,CSSMediaRule)||ki("CSSSupportsRule")&&T(e.parentRule,CSSSupportsRule)||ki("CSSConditionRule")&&T(e.parentRule,CSSConditionRule)){var s=Array.from(e.parentRule.cssRules),o=s.indexOf(e);r.unshift(o)}else if(e.parentStyleSheet){var a=Array.from(e.parentStyleSheet.cssRules),u=a.indexOf(e);r.unshift(u)}return r}return i(t,n)}function Et(t,n,i){var e,r;return t?(t.ownerNode?e=n.getId(t.ownerNode):r=i.getId(t),{styleId:r,id:e}):{}}function R_(t,n){var i=t.styleSheetRuleCb,e=t.mirror,r=t.stylesheetManager,s=n.win;if(!s.CSSStyleSheet||!s.CSSStyleSheet.prototype)return function(){};var o=s.CSSStyleSheet.prototype.insertRule;s.CSSStyleSheet.prototype.insertRule=new Proxy(o,{apply:H(function(p,g,v){var m=v[0],d=v[1],y=Et(g,e,r.styleMirror),_=y.id,w=y.styleId;return(_&&_!==-1||w&&w!==-1)&&i({id:_,styleId:w,adds:[{rule:m,index:d}]}),p.apply(g,v)})}),s.CSSStyleSheet.prototype.addRule=function(p,g,v){v===void 0&&(v=this.cssRules.length);var m=p+" { "+g+" }";return s.CSSStyleSheet.prototype.insertRule.apply(this,[m,v])};var a=s.CSSStyleSheet.prototype.deleteRule;s.CSSStyleSheet.prototype.deleteRule=new Proxy(a,{apply:H(function(p,g,v){var m=v[0],d=Et(g,e,r.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,removes:[{index:m}]}),p.apply(g,v)})}),s.CSSStyleSheet.prototype.removeRule=function(p){return s.CSSStyleSheet.prototype.deleteRule.apply(this,[p])};var u;s.CSSStyleSheet.prototype.replace&&(u=s.CSSStyleSheet.prototype.replace,s.CSSStyleSheet.prototype.replace=new Proxy(u,{apply:H(function(p,g,v){var m=v[0],d=Et(g,e,r.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,replace:m}),p.apply(g,v)})}));var c;s.CSSStyleSheet.prototype.replaceSync&&(c=s.CSSStyleSheet.prototype.replaceSync,s.CSSStyleSheet.prototype.replaceSync=new Proxy(c,{apply:H(function(p,g,v){var m=v[0],d=Et(g,e,r.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,replaceSync:m}),p.apply(g,v)})}));var l={};Ri("CSSGroupingRule")?l.CSSGroupingRule=s.CSSGroupingRule:(Ri("CSSMediaRule")&&(l.CSSMediaRule=s.CSSMediaRule),Ri("CSSConditionRule")&&(l.CSSConditionRule=s.CSSConditionRule),Ri("CSSSupportsRule")&&(l.CSSSupportsRule=s.CSSSupportsRule));var f={};return Object.entries(l).forEach(function(p){var g=p[0],v=p[1];f[g]={insertRule:v.prototype.insertRule,deleteRule:v.prototype.deleteRule},v.prototype.insertRule=new Proxy(f[g].insertRule,{apply:H(function(m,d,y){var _=y[0],w=y[1],S=Et(d.parentStyleSheet,e,r.styleMirror),b=S.id,O=S.styleId;return(b&&b!==-1||O&&O!==-1)&&i({id:b,styleId:O,adds:[{rule:_,index:[].concat(xi(d),[w||0])}]}),m.apply(d,y)})}),v.prototype.deleteRule=new Proxy(f[g].deleteRule,{apply:H(function(m,d,y){var _=y[0],w=Et(d.parentStyleSheet,e,r.styleMirror),S=w.id,b=w.styleId;return(S&&S!==-1||b&&b!==-1)&&i({id:S,styleId:b,removes:[{index:[].concat(xi(d),[_])}]}),m.apply(d,y)})})}),H(function(){s.CSSStyleSheet.prototype.insertRule=o,s.CSSStyleSheet.prototype.deleteRule=a,u&&(s.CSSStyleSheet.prototype.replace=u),c&&(s.CSSStyleSheet.prototype.replaceSync=c),Object.entries(l).forEach(function(p){var g=p[0],v=p[1];v.prototype.insertRule=f[g].insertRule,v.prototype.deleteRule=f[g].deleteRule})})}function _f(t,n){var i=t.mirror,e=t.stylesheetManager,r,s,o,a=null;n.nodeName==="#document"?a=i.getId(n):a=i.getId(V.host(n));var u=n.nodeName==="#document"?(r=n.defaultView)==null?void 0:r.Document:(o=(s=n.ownerDocument)==null?void 0:s.defaultView)==null?void 0:o.ShadowRoot,c=u!=null&&u.prototype?Object.getOwnPropertyDescriptor(u==null?void 0:u.prototype,"adoptedStyleSheets"):void 0;return a===null||a===-1||!u||!c?function(){}:(Object.defineProperty(n,"adoptedStyleSheets",{configurable:c.configurable,enumerable:c.enumerable,get:function(){var f;return(f=c.get)==null?void 0:f.call(this)},set:function(f){var p,g=(p=c.set)==null?void 0:p.call(this,f);if(a!==null&&a!==-1)try{e.adoptStyleSheets(f,a)}catch(v){}return g}}),H(function(){Object.defineProperty(n,"adoptedStyleSheets",{configurable:c.configurable,enumerable:c.enumerable,get:c.get,set:c.set})}))}function A_(t,n){var i=t.styleDeclarationCb,e=t.mirror,r=t.ignoreCSSAttributes,s=t.stylesheetManager,o=n.win,a=o.CSSStyleDeclaration.prototype.setProperty;o.CSSStyleDeclaration.prototype.setProperty=new Proxy(a,{apply:H(function(c,l,f){var p,g=f[0],v=f[1],m=f[2];if(r.has(g))return a.apply(l,[g,v,m]);var d=Et((p=l.parentRule)==null?void 0:p.parentStyleSheet,e,s.styleMirror),y=d.id,_=d.styleId;return(y&&y!==-1||_&&_!==-1)&&i({id:y,styleId:_,set:{property:g,value:v,priority:m},index:xi(l.parentRule)}),c.apply(l,f)})});var u=o.CSSStyleDeclaration.prototype.removeProperty;return o.CSSStyleDeclaration.prototype.removeProperty=new Proxy(u,{apply:H(function(c,l,f){var p,g=f[0];if(r.has(g))return u.apply(l,[g]);var v=Et((p=l.parentRule)==null?void 0:p.parentStyleSheet,e,s.styleMirror),m=v.id,d=v.styleId;return(m&&m!==-1||d&&d!==-1)&&i({id:m,styleId:d,remove:{property:g},index:xi(l.parentRule)}),c.apply(l,f)})}),H(function(){o.CSSStyleDeclaration.prototype.setProperty=a,o.CSSStyleDeclaration.prototype.removeProperty=u})}function M_(t){var n=t.mediaInteractionCb,i=t.blockClass,e=t.blockSelector,r=t.mirror,s=t.sampling,o=t.doc,a=H(function(c){return cn(H(function(l){var f=fn(l);if(!(!f||$e(f,i,e,!0))){var p=f.currentTime,g=f.volume,v=f.muted,m=f.playbackRate,d=f.loop;n({type:c,id:r.getId(f),currentTime:p,volume:g,muted:v,playbackRate:m,loop:d})}}),s.media||500)}),u=[Pe("play",a(br.Play),o),Pe("pause",a(br.Pause),o),Pe("seeked",a(br.Seeked),o),Pe("volumechange",a(br.VolumeChange),o),Pe("ratechange",a(br.RateChange),o)];return H(function(){u.forEach(function(c){return c()})})}function T_(t){var n=t.fontCb,i=t.doc,e=i.defaultView;if(!e)return function(){};var r=[],s=new WeakMap,o=e.FontFace;e.FontFace=function(c,l,f){var p=new o(c,l,f);return s.set(p,{family:c,buffer:typeof l!="string",descriptors:f,fontSource:typeof l=="string"?l:JSON.stringify(Array.from(new Uint8Array(l)))}),p};var a=Ht(i.fonts,"add",function(u){return function(c){return setTimeout(H(function(){var l=s.get(c);l&&(n(l),s.delete(c))}),0),u.apply(this,[c])}});return r.push(function(){e.FontFace=o}),r.push(a),H(function(){r.forEach(function(u){return u()})})}function P_(t){var n=t.doc,i=t.mirror,e=t.blockClass,r=t.blockSelector,s=t.selectionCb,o=!0,a=H(function(){var u=n.getSelection();if(!(!u||o&&(u!=null&&u.isCollapsed))){o=u.isCollapsed||!1;for(var c=[],l=u.rangeCount||0,f=0;f0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))},n.handleMessage=function(e){var r=e;if(!(r.data.type!=="rrweb"||r.origin!==r.data.origin)){var s=e.source;if(s){var o=this.crossOriginIframeMap.get(e.source);if(o){var a=this.transformCrossOriginEvent(o,r.data.event);a&&this.wrappedEmit(a,r.data.isCheckout)}}}},n.transformCrossOriginEvent=function(e,r){var s=this,o;switch(r.type){case j.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(r.data.node,e);var a=r.data.node.id;return this.crossOriginIframeRootIdMap.set(e,a),this.patchRootIdOnNode(r.data.node,a),{timestamp:r.timestamp,type:j.IncrementalSnapshot,data:{source:U.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:r.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case j.Meta:case j.Load:case j.DomContentLoaded:return!1;case j.Plugin:return r;case j.Custom:return this.replaceIds(r.data.payload,e,["id","parentId","previousId","nextId"]),r;case j.IncrementalSnapshot:switch(r.data.source){case U.Mutation:return r.data.adds.forEach(function(u){s.replaceIds(u,e,["parentId","nextId","previousId"]),s.replaceIdOnNode(u.node,e);var c=s.crossOriginIframeRootIdMap.get(e);c&&s.patchRootIdOnNode(u.node,c)}),r.data.removes.forEach(function(u){s.replaceIds(u,e,["parentId","id"])}),r.data.attributes.forEach(function(u){s.replaceIds(u,e,["id"])}),r.data.texts.forEach(function(u){s.replaceIds(u,e,["id"])}),r;case U.Drag:case U.TouchMove:case U.MouseMove:return r.data.positions.forEach(function(u){s.replaceIds(u,e,["id"])}),r;case U.ViewportResize:return!1;case U.MediaInteraction:case U.MouseInteraction:case U.Scroll:case U.CanvasMutation:case U.Input:return this.replaceIds(r.data,e,["id"]),r;case U.StyleSheetRule:case U.StyleDeclaration:return this.replaceIds(r.data,e,["id"]),this.replaceStyleIds(r.data,e,["styleId"]),r;case U.Font:return r;case U.Selection:return r.data.ranges.forEach(function(u){s.replaceIds(u,e,["start","end"])}),r;case U.AdoptedStyleSheet:return this.replaceIds(r.data,e,["id"]),this.replaceStyleIds(r.data,e,["styleIds"]),(o=r.data.styles)==null||o.forEach(function(u){s.replaceStyleIds(u,e,["styleId"])}),r}}return!1},n.replace=function(e,r,s,o){for(var a=E(o),u;!(u=a()).done;){var c=u.value;!Array.isArray(r[c])&&typeof r[c]!="number"||(Array.isArray(r[c])?r[c]=e.getIds(s,r[c]):r[c]=e.getId(s,r[c]))}return r},n.replaceIds=function(e,r,s){return this.replace(this.crossOriginIframeMirror,e,r,s)},n.replaceStyleIds=function(e,r,s){return this.replace(this.crossOriginIframeStyleMirror,e,r,s)},n.replaceIdOnNode=function(e,r){var s=this;this.replaceIds(e,r,["id","rootId"]),"childNodes"in e&&e.childNodes.forEach(function(o){s.replaceIdOnNode(o,r)})},n.patchRootIdOnNode=function(e,r){var s=this;e.type!==lf.Document&&!e.rootId&&(e.rootId=r),"childNodes"in e&&e.childNodes.forEach(function(o){s.patchRootIdOnNode(o,r)})},t})(),F_=(function(){function t(i){k(this,"shadowDoms",new WeakSet),k(this,"mutationCb"),k(this,"scrollCb"),k(this,"bypassOptions"),k(this,"mirror"),k(this,"restoreHandlers",[]),this.mutationCb=i.mutationCb,this.scrollCb=i.scrollCb,this.bypassOptions=i.bypassOptions,this.mirror=i.mirror,this.init()}var n=t.prototype;return n.init=function(){this.reset(),this.patchAttachShadow(Element,document)},n.addShadowRoot=function(e,r){var s=this;if(Wr(e)&&!this.shadowDoms.has(e)){this.shadowDoms.add(e);var o=gf(z({},this.bypassOptions,{doc:r,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(function(){return o.disconnect()}),this.restoreHandlers.push(mf(z({},this.bypassOptions,{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(function(){e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&s.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,s.mirror.getId(V.host(e))),s.restoreHandlers.push(_f({mirror:s.mirror,stylesheetManager:s.bypassOptions.stylesheetManager},e))},0)}},n.observeAttachShadow=function(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)},n.patchAttachShadow=function(e,r){var s=this;this.restoreHandlers.push(Ht(e.prototype,"attachShadow",function(o){return function(a){var u=o.call(this,a),c=V.shadowRoot(this);return c&&cf(this)&&s.addShadowRoot(c,r),u}}))},n.reset=function(){this.restoreHandlers.forEach(function(e){try{e()}catch(r){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet},t})(),Sr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",U_=typeof Uint8Array=="undefined"?[]:new Uint8Array(256),Ai=0;Ai>2],s+=Sr[(i[e]&3)<<4|i[e+1]>>4],s+=Sr[(i[e+1]&15)<<2|i[e+2]>>6],s+=Sr[i[e+2]&63];return r%3===2?s=s.substring(0,s.length-1)+"=":r%3===1&&(s=s.substring(0,s.length-2)+"=="),s},bf=new Map;function q_(t,n){var i=bf.get(t);return i||(i=new Map,bf.set(t,i)),i.has(n)||i.set(n,[]),i.get(n)}var Sf=function(t,n,i){if(!(!t||!(Ef(t,n)||(typeof t=="undefined"?"undefined":P(t))==="object"))){var e=t.constructor.name,r=q_(i,e),s=r.indexOf(t);return s===-1&&(s=r.length,r.push(t)),s}};function Mi(t,n,i){if(T(t,Array))return t.map(function(v){return Mi(v,n,i)});if(t===null)return t;if(T(t,Float32Array)||T(t,Float64Array)||T(t,Int32Array)||T(t,Uint32Array)||T(t,Uint8Array)||T(t,Uint16Array)||T(t,Int16Array)||T(t,Int8Array)||T(t,Uint8ClampedArray)){var e=t.constructor.name;return{rr_type:e,args:[Object.values(t)]}}else if(T(t,ArrayBuffer)){var r=t.constructor.name,s=B_(t);return{rr_type:r,base64:s}}else if(T(t,DataView)){var o=t.constructor.name;return{rr_type:o,args:[Mi(t.buffer,n,i),t.byteOffset,t.byteLength]}}else if(T(t,HTMLImageElement)){var a=t.constructor.name,u=t.src;return{rr_type:a,src:u}}else if(T(t,HTMLCanvasElement)){var c="HTMLImageElement",l=t.toDataURL();return{rr_type:c,src:l}}else if(T(t,ImageData)){var f=t.constructor.name;return{rr_type:f,args:[Mi(t.data,n,i),t.width,t.height]}}else if(Ef(t,n)||(typeof t=="undefined"?"undefined":P(t))==="object"){var p=t.constructor.name,g=Sf(t,n,i);return{rr_type:p,index:g}}return t}var Cf=function(t,n,i){return t.map(function(e){return Mi(e,n,i)})},Ef=function(t,n){var i=["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"],e=i.filter(function(r){return typeof n[r]=="function"});return!!e.find(function(r){return T(t,n[r])})};function z_(t,n,i,e){for(var r=function(){var c=u.value;try{if(typeof n.CanvasRenderingContext2D.prototype[c]!="function")return"continue";var l=Ht(n.CanvasRenderingContext2D.prototype,c,function(p){return function(){for(var g=this,v=arguments.length,m=new Array(v),d=0;d1?u-1:0),l=1;l0&&(a.styles=u),this.adoptedStyleSheetCb(a)}},n.reset=function(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet},n.cleanupStylesheetsForRemovedNode=function(e){var r=this;try{if(e.nodeType===Node.DOCUMENT_NODE){var s=e;if(s.adoptedStyleSheets)for(var o=E(s.adoptedStyleSheets),a;!(a=o()).done;){var u=a.value;this.styleMirror.remove(u)}}if(e.nodeName==="STYLE"){var c=e;c.sheet&&this.styleMirror.remove(c.sheet)}if(e.nodeName==="LINK"&&e.rel==="stylesheet"){var l=e;l.sheet&&this.styleMirror.remove(l.sheet)}e.childNodes&&e.childNodes.forEach(function(f){r.cleanupStylesheetsForRemovedNode(f)})}catch(f){}},n.trackStylesheetInLinkElement=function(e){},t})(),Y_=(function(){function t(){k(this,"nodeMap",new WeakMap),k(this,"active",!1)}var n=t.prototype;return n.inOtherBuffer=function(e,r){var s=this.nodeMap.get(e);return s&&Array.from(s).some(function(o){return o!==r})},n.add=function(e,r){var s=this;this.active||(this.active=!0,requestAnimationFrame(function(){s.nodeMap=new WeakMap,s.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(r))},n.destroy=function(){},t})();function J_(t){try{var n=new URL(t).origin;return n!=="null"?n:null}catch(i){return null}}function X_(t){if(!Array.isArray(t)||t.length===0)throw new Error("[rrweb] allowedIframeOrigins must be a non-empty array of origin strings.");for(var n=new Set,i=0;i0&&(rr=X_(Re),rr.size===0&&(rr=void 0));var nr=pe?window.parent===window:!0,ir=!1;if(!nr)try{window.parent.document&&(ir=!1)}catch(Y){ir=!0}if(nr&&!n)throw new Error("emit function is required");if(!nr&&!ir)return function(){};W!==void 0&&G.mousemove===void 0&&(G.mousemove=W),je.reset();var sr=_===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0,hidden:!0}:w!==void 0?w:{password:!0},or=S===!0||S==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:S==="all",headMetaDescKeywords:S==="all",headTitleMutations:S==="all"}:S||{};p_();var yt,Br=0,hd=function(Y){for(var Ne=E(qt||[]),N;!(N=Ne()).done;){var ne=N.value;ne.eventProcessor&&(Y=ne.eventProcessor(Y))}return R&&!ir&&(Y=R(Y)),Y};ve=function(Y,Ne){var N,ne=Y;if(ne.timestamp=Oi(),(N=et[0])!=null&&N.isFrozen()&&ne.type!==j.FullSnapshot&&!(ne.type===j.IncrementalSnapshot&&ne.data.source===U.Mutation)&&et.forEach(function(sE){return sE.unfreeze()}),nr)n==null||n(hd(ne),Ne);else if(ir){var cr={type:"rrweb",event:hd(ne),origin:window.location.origin,isCheckout:Ne};if(rr)for(var Pu=E(rr),yd;!(yd=Pu()).done;){var rE=yd.value;window.parent.postMessage(cr,rE)}else window.parent.postMessage(cr,"*")}if(ne.type===j.FullSnapshot)yt=ne,Br=0;else if(ne.type===j.IncrementalSnapshot){if(ne.data.source===U.Mutation&&ne.data.isAttachIframe)return;Br++;var nE=e&&Br>=e,iE=i&&ne.timestamp-yt.timestamp>i;(nE||iE)&&Ti(!0)}};for(var Ts=function(Y){ve({type:j.IncrementalSnapshot,data:z({source:U.Mutation},Y)})},pd=function(Y){return ve({type:j.IncrementalSnapshot,data:z({source:U.Scroll},Y)})},dd=function(Y){return ve({type:j.IncrementalSnapshot,data:z({source:U.CanvasMutation},Y)})},eE=function(Y){return ve({type:j.IncrementalSnapshot,data:z({source:U.AdoptedStyleSheet},Y)})},ar=new K_({mutationCb:Ts,adoptedStyleSheetCb:eE}),_t=new D_({mirror:je,mutationCb:Ts,stylesheetManager:ar,recordCrossOriginIframes:pe,wrappedEmit:ve}),tE=E(qt||[]),vd;!(vd=tE()).done;){var gd=vd.value;gd.getMirror&&gd.getMirror({nodeMirror:je,crossOriginIframeMirror:_t.crossOriginIframeMirror,crossOriginIframeStyleMirror:_t.crossOriginIframeStyleMirror})}var Mu=new Y_;ea=new H_({recordCanvas:Fe,mutationCb:dd,win:window,blockClass:s,blockSelector:a,mirror:je,sampling:G.canvas,dataURLOptions:F});var Ps=new F_({mutationCb:Ts,scrollCb:pd,bypassOptions:{blockClass:s,blockSelector:a,maskTextClass:g,maskTextSelector:m,inlineStylesheet:y,maskInputOptions:sr,dataURLOptions:F,maskTextFn:O,maskInputFn:b,recordCanvas:Fe,inlineImages:Fr,sampling:G,slimDOMOptions:or,iframeManager:_t,stylesheetManager:ar,canvasManager:ea,keepIframeSrcFn:Ur,processedNodeManager:Mu},mirror:je});Ti=function(Y){if(Y===void 0&&(Y=!1),!!K){ve({type:j.Meta,data:{href:window.location.href,width:rf(),height:tf()}},Y),ar.reset(),Ps.init(),et.forEach(function(N){return N.lock()});var Ne=gv(document,{mirror:je,blockClass:s,blockSelector:a,maskTextClass:g,maskTextSelector:m,inlineStylesheet:y,maskAllInputs:sr,maskTextFn:O,maskInputFn:b,slimDOM:or,dataURLOptions:F,recordCanvas:Fe,inlineImages:Fr,onSerialize:function(N){of(N,je)&&_t.addIframe(N),af(N,je)&&ar.trackLinkElement(N),Zo(N)&&Ps.addShadowRoot(V.shadowRoot(N),document)},onIframeLoad:function(N,ne){_t.attachIframe(N,ne),Ps.observeAttachShadow(N)},onStylesheetLoad:function(N,ne){ar.attachLinkElement(N,ne)},keepIframeSrcFn:Ur});if(!Ne)return console.warn("Failed to snapshot the document");ve({type:j.FullSnapshot,data:{node:Ne,initialOffset:ef(window)}},Y),et.forEach(function(N){return N.unlock()}),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&ar.adoptStyleSheets(document.adoptedStyleSheets,je.getId(document))}};try{var ur=[],md=function(Y){var Ne;return H(L_)({mutationCb:Ts,mousemoveCb:function(N,ne){return ve({type:j.IncrementalSnapshot,data:{source:ne,positions:N}})},mouseInteractionCb:function(N){return ve({type:j.IncrementalSnapshot,data:z({source:U.MouseInteraction},N)})},scrollCb:pd,viewportResizeCb:function(N){return ve({type:j.IncrementalSnapshot,data:z({source:U.ViewportResize},N)})},inputCb:function(N){return ve({type:j.IncrementalSnapshot,data:z({source:U.Input},N)})},mediaInteractionCb:function(N){return ve({type:j.IncrementalSnapshot,data:z({source:U.MediaInteraction},N)})},styleSheetRuleCb:function(N){return ve({type:j.IncrementalSnapshot,data:z({source:U.StyleSheetRule},N)})},styleDeclarationCb:function(N){return ve({type:j.IncrementalSnapshot,data:z({source:U.StyleDeclaration},N)})},canvasMutationCb:dd,fontCb:function(N){return ve({type:j.IncrementalSnapshot,data:z({source:U.Font},N)})},selectionCb:function(N){ve({type:j.IncrementalSnapshot,data:z({source:U.Selection},N)})},customElementCb:function(N){ve({type:j.IncrementalSnapshot,data:z({source:U.CustomElement},N)})},blockClass:s,ignoreClass:c,ignoreSelector:f,maskTextClass:g,maskTextSelector:m,maskInputOptions:sr,inlineStylesheet:y,sampling:G,recordDOM:K,recordCanvas:Fe,inlineImages:Fr,userTriggeredOnInput:Ve,collectFonts:X,doc:Y,maskInputFn:b,maskTextFn:O,keepIframeSrcFn:Ur,blockSelector:a,slimDOMOptions:or,dataURLOptions:F,mirror:je,iframeManager:_t,stylesheetManager:ar,shadowDomManager:Ps,processedNodeManager:Mu,canvasManager:ea,ignoreCSSAttributes:Ms,plugins:((Ne=qt==null?void 0:qt.filter(function(N){return N.observer}))==null?void 0:Ne.map(function(N){return{observer:N.observer,options:N.options,callback:function(ne){return ve({type:j.Plugin,data:{plugin:N.name,payload:ne}})}}}))||[]},M)};_t.addLoadListener(function(Y){try{var Ne=Y.contentDocument,N=md(Ne);ur.push(N);var ne=_t.getObserverCleanup(Y);_t.setObserverCleanup(Y,function(){if(ne)try{ne()}catch(Pu){}try{N();var cr=ur.indexOf(N);cr!==-1&&ur.splice(cr,1),C_(Ne)}catch(Pu){}})}catch(cr){console.warn(cr)}});var Tu=function(){Ti(),ur.push(md(document)),Pi=!0};return document.readyState==="interactive"||document.readyState==="complete"?Tu():(ur.push(Pe("DOMContentLoaded",function(){ve({type:j.DomContentLoaded,data:{}}),ct==="DOMContentLoaded"&&Tu()})),ur.push(Pe("load",function(){ve({type:j.Load,data:{}}),ct==="load"&&Tu()},window))),function(){ur.forEach(function(Y){try{Y()}catch(N){var Ne=String(N).toLowerCase();Ne.includes("cross-origin")||console.warn(N)}}),Mu.destroy(),Pi=!1,S_()}}catch(Y){console.warn(Y)}}It.addCustomEvent=function(t,n){if(!Pi)throw new Error("please add custom event after start recording");ve({type:j.Custom,data:{tag:t,payload:n}})},It.freezePage=function(){et.forEach(function(t){return t.freeze()})},It.takeFullSnapshot=function(t){if(!Pi)throw new Error("please take full snapshot after start recording");Ti(t)},It.mirror=je;var Rf;(function(t){t[t.NotStarted=0]="NotStarted",t[t.Running=1]="Running",t[t.Stopped=2]="Stopped"})(Rf||(Rf={})),It.addCustomEvent,It.freezePage,It.takeFullSnapshot;var Af={Node:["childNodes","parentNode","parentElement","textContent"],ShadowRoot:["host","styleSheets"],Element:["shadowRoot","querySelector","querySelectorAll"],MutationObserver:[]},Mf={Node:["contains","getRootNode"],ShadowRoot:["getSelection"],Element:[],MutationObserver:["constructor"]},$i={},Z_=function(){return!!globalThis.Zone};function ra(t){if($i[t])return $i[t];var n=globalThis[t],i=n.prototype,e=t in Af?Af[t]:void 0,r=!!(e&&e.every(function(l){var f,p;return!!((p=(f=Object.getOwnPropertyDescriptor(i,l))==null?void 0:f.get)!=null&&p.toString().includes("[native code]"))})),s=t in Mf?Mf[t]:void 0,o=!!(s&&s.every(function(l){var f;return typeof i[l]=="function"&&((f=i[l])==null?void 0:f.toString().includes("[native code]"))}));if(r&&o&&!Z_())return $i[t]=n.prototype,n.prototype;try{var a=document.createElement("iframe");document.body.appendChild(a);var u=a.contentWindow;if(!u)return n.prototype;var c=u[t].prototype;return document.body.removeChild(a),c?$i[t]=c:i}catch(l){return i}}var na={};function Ot(t,n,i){var e,r=t+"."+String(i);if(na[r])return na[r].call(n);var s=ra(t),o=(e=Object.getOwnPropertyDescriptor(s,i))==null?void 0:e.get;return o?(na[r]=o,o.call(n)):n[i]}var ia={};function Tf(t,n,i){var e=t+"."+String(i);if(ia[e])return ia[e].bind(n);var r=ra(t),s=r[i];return typeof s!="function"?n[i]:(ia[e]=s,s.bind(n))}function Q_(t){return Ot("Node",t,"childNodes")}function ew(t){return Ot("Node",t,"parentNode")}function tw(t){return Ot("Node",t,"parentElement")}function rw(t){return Ot("Node",t,"textContent")}function nw(t,n){return Tf("Node",t,"contains")(n)}function iw(t){return Tf("Node",t,"getRootNode")()}function sw(t){return!t||!("host"in t)?null:Ot("ShadowRoot",t,"host")}function ow(t){return t.styleSheets}function aw(t){return!t||!("shadowRoot"in t)?null:Ot("Element",t,"shadowRoot")}function uw(t,n){return Ot("Element",t,"querySelector")(n)}function cw(t,n){return Ot("Element",t,"querySelectorAll")(n)}function lw(){return ra("MutationObserver").constructor}function fw(t,n,i){try{if(!(n in t))return function(){};var e=t[n],r=i(e);return typeof r=="function"&&(r.prototype=r.prototype||{},Object.defineProperties(r,{__rrweb_original__:{enumerable:!1,value:e}})),t[n]=r,function(){t[n]=e}}catch(s){return function(){}}}var Pf={childNodes:Q_,parentNode:ew,parentElement:tw,textContent:rw,contains:nw,getRootNode:iw,host:sw,styleSheets:ow,shadowRoot:aw,querySelector:uw,querySelectorAll:cw,mutationObserver:lw,patch:fw};function sa(t,n,i){if(!t)return!1;if(t.nodeType!==t.ELEMENT_NODE)return sa(Pf.parentNode(t),n);for(var e=t.classList.length;e--;){var r=t.classList[e];if(n.test(r))return!0}return sa(Pf.parentNode(t),n)}function hw(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function pw(t){if(t.__esModule)return t;var n=t.default;if(typeof n=="function"){var i=function e(){return T(this,e)?Reflect.construct(n,arguments,this.constructor):n.apply(this,arguments)};i.prototype=n.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})}),i}var oa={exports:{}},ae=String,$f=function(){return{isColorSupported:!1,reset:ae,bold:ae,dim:ae,italic:ae,underline:ae,inverse:ae,hidden:ae,strikethrough:ae,black:ae,red:ae,green:ae,yellow:ae,blue:ae,magenta:ae,cyan:ae,white:ae,gray:ae,bgBlack:ae,bgRed:ae,bgGreen:ae,bgYellow:ae,bgBlue:ae,bgMagenta:ae,bgCyan:ae,bgWhite:ae}};oa.exports=$f(),oa.exports.createColors=$f;var dw=oa.exports,vw={},gw=Object.freeze(Object.defineProperty({__proto__:null,default:vw},Symbol.toStringTag,{value:"Module"})),_e=pw(gw),Nf=dw,Lf=_e,aa=(function(t){ue(n,t);function n(e,r,s,o,a,u){var c;return c=t.call(this,e)||this,c.name="CssSyntaxError",c.reason=e,a&&(c.file=a),o&&(c.source=o),u&&(c.plugin=u),typeof r!="undefined"&&typeof s!="undefined"&&(typeof r=="number"?(c.line=r,c.column=s):(c.line=r.line,c.column=r.column,c.endLine=s.line,c.endColumn=s.column)),c.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(c,n),c}var i=n.prototype;return i.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!="undefined"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},i.showSourceCode=function(r){var s=this;if(!this.source)return"";var o=this.source;r==null&&(r=Nf.isColorSupported),Lf&&r&&(o=Lf(o));var a=o.split(/\r?\n/),u=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),l=String(c).length,f,p;if(r){var g=Nf.createColors(!0),v=g.bold,m=g.gray,d=g.red;f=function(y){return v(d(y))},p=function(y){return m(y)}}else f=p=function(y){return y};return a.slice(u,c).map(function(y,_){var w=u+1+_,S=" "+(" "+w).slice(-l)+" | ";if(w===s.line){var b=p(S.replace(/\d/g," "))+y.slice(0,s.column-1).replace(/[^\t]/g," ");return f(">")+p(S)+y+"\n "+b+f("^")}return" "+p(S)+y}).join("\n")},i.toString=function(){var r=this.showSourceCode();return r&&(r="\n\n"+r+"\n"),this.name+": "+this.message+r},n})(zr(Error)),ua=aa;aa.default=aa;var xt={};xt.isClean=Symbol("isClean"),xt.my=Symbol("my");var Df={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function mw(t){return t[0].toUpperCase()+t.slice(1)}var ca=(function(){function t(i){this.builder=i}var n=t.prototype;return n.atrule=function(e,r){var s="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof e.raws.afterName!="undefined"?s+=e.raws.afterName:o&&(s+=" "),e.nodes)this.block(e,s+o);else{var a=(e.raws.between||"")+(r?";":"");this.builder(s+o+a,e)}},n.beforeAfter=function(e,r){var s;e.type==="decl"?s=this.raw(e,null,"beforeDecl"):e.type==="comment"?s=this.raw(e,null,"beforeComment"):r==="before"?s=this.raw(e,null,"beforeRule"):s=this.raw(e,null,"beforeClose");for(var o=e.parent,a=0;o&&o.type!=="root";)a+=1,o=o.parent;if(s.includes("\n")){var u=this.raw(e,null,"indent");if(u.length)for(var c=0;c0&&e.nodes[r].type==="comment";)r-=1;for(var s=this.raw(e,"semicolon"),o=0;o0&&typeof s.raws.after!="undefined")return r=s.raws.after,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawBeforeComment=function(e,r){var s;return e.walkComments(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeDecl"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeDecl=function(e,r){var s;return e.walkDecls(function(o){if(typeof o.raws.before!="undefined")return s=o.raws.before,s.includes("\n")&&(s=s.replace(/[^\n]+$/,"")),!1}),typeof s=="undefined"?s=this.raw(r,null,"beforeRule"):s&&(s=s.replace(/\S/g,"")),s},n.rawBeforeOpen=function(e){var r;return e.walk(function(s){if(s.type!=="decl"&&(r=s.raws.between,typeof r!="undefined"))return!1}),r},n.rawBeforeRule=function(e){var r;return e.walk(function(s){if(s.nodes&&(s.parent!==e||e.first!==s)&&typeof s.raws.before!="undefined")return r=s.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1}),r&&(r=r.replace(/\S/g,"")),r},n.rawColon=function(e){var r;return e.walkDecls(function(s){if(typeof s.raws.between!="undefined")return r=s.raws.between.replace(/[^\s:]/g,""),!1}),r},n.rawEmptyBody=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length===0&&(r=s.raws.after,typeof r!="undefined"))return!1}),r},n.rawIndent=function(e){if(e.raws.indent)return e.raws.indent;var r;return e.walk(function(s){var o=s.parent;if(o&&o!==e&&o.parent&&o.parent===e&&typeof s.raws.before!="undefined"){var a=s.raws.before.split("\n");return r=a[a.length-1],r=r.replace(/\S/g,""),!1}}),r},n.rawSemicolon=function(e){var r;return e.walk(function(s){if(s.nodes&&s.nodes.length&&s.last.type==="decl"&&(r=s.raws.semicolon,typeof r!="undefined"))return!1}),r},n.rawValue=function(e,r){var s=e[r],o=e.raws[r];return o&&o.value===s?o.raw:s},n.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},n.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},n.stringify=function(e,r){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,r)},t})(),Ff=ca;ca.default=ca;var yw=Ff;function la(t,n){var i=new yw(n);i.stringify(t)}var Ni=la;la.default=la;var Li=xt.isClean,_w=xt.my,ww=ua,bw=Ff,Sw=Ni;function fa(t,n){var i=new t.constructor;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&e!=="proxyCache"){var r=t[e],s=typeof r=="undefined"?"undefined":P(r);e==="parent"&&s==="object"?n&&(i[e]=n):e==="source"?i[e]=r:Array.isArray(r)?i[e]=r.map(function(o){return fa(o,i)}):(s==="object"&&r!==null&&(r=fa(r)),i[e]=r)}return i}var ha=(function(){function t(i){i===void 0&&(i={}),this.raws={},this[Li]=!1,this[_w]=!0;for(var e in i)if(e==="nodes"){this.nodes=[];for(var r=E(i[e]),s;!(s=r()).done;){var o=s.value;typeof o.clone=="function"?this.append(o.clone()):this.append(o)}}else this[e]=i[e]}var n=t.prototype;return n.addToError=function(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){var r=this.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+r.input.from+":"+r.start.line+":"+r.start.column+"$&")}return e},n.after=function(e){return this.parent.insertAfter(this,e),this},n.assign=function(e){e===void 0&&(e={});for(var r in e)this[r]=e[r];return this},n.before=function(e){return this.parent.insertBefore(this,e),this},n.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},n.clone=function(e){e===void 0&&(e={});var r=fa(this);for(var s in e)r[s]=e[s];return r},n.cloneAfter=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertAfter(this,r),r},n.cloneBefore=function(e){e===void 0&&(e={});var r=this.clone(e);return this.parent.insertBefore(this,r),r},n.error=function(e,r){if(r===void 0&&(r={}),this.source){var s=this.rangeBy(r),o=s.end,a=s.start;return this.source.input.error(e,{column:a.column,line:a.line},{column:o.column,line:o.line},r)}return new ww(e)},n.getProxyProcessor=function(){return{get:function(r,s){return s==="proxyOf"?r:s==="root"?function(){return r.root().toProxy()}:r[s]},set:function(r,s,o){return r[s]===o||(r[s]=o,(s==="prop"||s==="value"||s==="name"||s==="params"||s==="important"||s==="text")&&r.markDirty()),!0}}},n.markDirty=function(){if(this[Li]){this[Li]=!1;for(var e=this;e=e.parent;)e[Li]=!1}},n.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},n.positionBy=function(e,r){var s=this.source.start;if(e.index)s=this.positionInside(e.index,r);else if(e.word){r=this.toString();var o=r.indexOf(e.word);o!==-1&&(s=this.positionInside(o,r))}return s},n.positionInside=function(e,r){for(var s=r||this.toString(),o=this.source.start.column,a=this.source.start.line,u=0;u-1&&o>-1&&(this.annotation=this.getAnnotationURL(e.substring(s,o)))}},n.loadFile=function(e){if(this.root=da(e),xw(e))return this.mapFile=e,kw(e,"utf-8").toString().trim()},n.loadMap=function(e,r){if(r===!1)return!1;if(r){if(typeof r=="string")return r;if(typeof r=="function"){var s=r(e);if(s){var o=this.loadFile(s);if(!o)throw new Error("Unable to load previous source map: "+s.toString());return o}}else{if(T(r,Uf))return Bf.fromSourceMap(r).toString();if(T(r,Bf))return r.toString();if(this.isMap(r))return JSON.stringify(r);throw new Error("Unsupported previous source map format: "+r.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var a=this.annotation;return e&&(a=Rw(da(e),a)),this.loadFile(a)}}},n.startWith=function(e,r){return e?e.substr(0,r.length)===r:!1},n.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},t})(),qf=va;va.default=va;var Mw=_e.SourceMapConsumer,Tw=_e.SourceMapGenerator,zf=_e.fileURLToPath,Ui=_e.pathToFileURL,ga=_e.isAbsolute,ma=_e.resolve,Pw=Ow.nanoid,ya=_e,Gf=ua,$w=qf,_a=Symbol("fromOffsetCache"),Nw=!!(Mw&&Tw),Wf=!!(ma&&ga),Bi=(function(){function t(i,e){if(e===void 0&&(e={}),i===null||typeof i=="undefined"||(typeof i=="undefined"?"undefined":P(i))==="object"&&!i.toString)throw new Error("PostCSS received "+i+" instead of CSS string");if(this.css=i.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,e.from&&(!Wf||/^\w+:\/\//.test(e.from)||ga(e.from)?this.file=e.from:this.file=ma(e.from)),Wf&&Nw){var r=new $w(this.css,e);if(r.text){this.map=r;var s=r.consumer().file;!this.file&&s&&(this.file=this.mapResolve(s))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}var n=t.prototype;return n.error=function(e,r,s,o){o===void 0&&(o={});var a,u,c;if(r&&(typeof r=="undefined"?"undefined":P(r))==="object"){var l=r,f=s;if(typeof l.offset=="number"){var p=this.fromOffset(l.offset);r=p.line,s=p.col}else r=l.line,s=l.column;if(typeof f.offset=="number"){var g=this.fromOffset(f.offset);u=g.line,c=g.col}else u=f.line,c=f.column}else if(!s){var v=this.fromOffset(r);r=v.line,s=v.col}var m=this.origin(r,s,u,c);return m?a=new Gf(e,m.endLine===void 0?m.line:{column:m.column,line:m.line},m.endLine===void 0?m.column:{column:m.endColumn,line:m.endLine},m.source,m.file,o.plugin):a=new Gf(e,u===void 0?r:{column:s,line:r},u===void 0?s:{column:c,line:u},this.css,this.file,o.plugin),a.input={column:s,endColumn:c,endLine:u,line:r,source:this.css},this.file&&(Ui&&(a.input.url=Ui(this.file).toString()),a.input.file=this.file),a},n.fromOffset=function(e){var r,s;if(this[_a])s=this[_a];else{var o=this.css.split("\n");s=new Array(o.length);for(var a=0,u=0,c=o.length;u=r)l=s.length-1;else for(var f=s.length-2,p;l>1),e=s[p+1])l=p+1;else{l=p;break}return{col:e-s[l]+1,line:l+1}},n.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:ma(this.map.consumer().sourceRoot||this.map.root||".",e)},n.origin=function(e,r,s,o){if(!this.map)return!1;var a=this.map.consumer(),u=a.originalPositionFor({column:r,line:e});if(!u.source)return!1;var c;typeof s=="number"&&(c=a.originalPositionFor({column:o,line:s}));var l;ga(u.source)?l=Ui(u.source):l=new URL(u.source,this.map.consumer().sourceRoot||Ui(this.map.mapFile));var f={column:u.column,endColumn:c&&c.column,endLine:c&&c.line,line:u.line,url:l.toString()};if(l.protocol==="file:")if(zf)f.file=zf(l);else throw new Error("file: protocol is not available in this PostCSS build");var p=a.sourceContentFor(u.source);return p&&(f.source=p),f},n.toJSON=function(){for(var e={},r=0,s=["hasBOM","css","file","id"];r=0;r--)e=this.root.nodes[r],e.type==="comment"&&e.text.indexOf("# sourceMappingURL=")===0&&this.root.removeChild(r);else this.css&&(this.css=this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm,""))},n.generate=function(){if(this.clearAnnotation(),Fw&&Dw&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,function(r){e+=r}),[e]},n.generateMap=function(){if(this.root)this.generateString();else if(this.previous().length===1){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=zi.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new zi({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},n.generateString=function(){var e=this;this.css="",this.map=new zi({file:this.outputFile(),ignoreInvalidMapping:!0});var r=1,s=1,o="",a={generated:{column:0,line:0},original:{column:0,line:0},source:""},u,c;this.stringify(this.root,function(l,f,p){if(e.css+=l,f&&p!=="end"&&(a.generated.line=r,a.generated.column=s-1,f.source&&f.source.start?(a.source=e.sourcePath(f),a.original.line=f.source.start.line,a.original.column=f.source.start.column-1,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,e.map.addMapping(a))),u=l.match(/\n/g),u?(r+=u.length,c=l.lastIndexOf("\n"),s=l.length-c):s+=l.length,f&&p!=="start"){var g=f.parent||{raws:{}},v=f.type==="decl"||f.type==="atrule"&&!f.nodes;(!v||f!==g.last||g.raws.semicolon)&&(f.source&&f.source.end?(a.source=e.sourcePath(f),a.original.line=f.source.end.line,a.original.column=f.source.end.column-1,a.generated.line=r,a.generated.column=s-2,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,a.generated.line=r,a.generated.column=s-1,e.map.addMapping(a)))}})},n.isAnnotation=function(){return this.isInline()?!0:typeof this.mapOpts.annotation!="undefined"?this.mapOpts.annotation:this.previous().length?this.previous().some(function(e){return e.annotation}):!0},n.isInline=function(){if(typeof this.mapOpts.inline!="undefined")return this.mapOpts.inline;var e=this.mapOpts.annotation;return typeof e!="undefined"&&e!==!0?!1:this.previous().length?this.previous().some(function(r){return r.inline}):!0},n.isMap=function(){return typeof this.opts.map!="undefined"?!!this.opts.map:this.previous().length>0},n.isSourcesContent=function(){return typeof this.mapOpts.sourcesContent!="undefined"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(function(e){return e.withContent()}):!0},n.outputFile=function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"},n.path=function(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;var r=this.memoizedPaths.get(e);if(r)return r;var s=this.opts.to?Gi(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(s=Gi(Hf(s,this.mapOpts.annotation)));var o=jf(s,e);return this.memoizedPaths.set(e,o),o},n.previous=function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(function(s){if(s.source&&s.source.input.map){var o=s.source.input.map;e.previousMaps.includes(o)||e.previousMaps.push(o)}});else{var r=new Lw(this.originalCSS,this.opts);r.map&&this.previousMaps.push(r.map)}return this.previousMaps},n.setSourcesContent=function(){var e=this,r={};if(this.root)this.root.walk(function(o){if(o.source){var a=o.source.input.from;if(a&&!r[a]){r[a]=!0;var u=e.usesFileUrls?e.toFileUrl(a):e.toUrl(e.path(a));e.map.setSourceContent(u,o.source.input.css)}}});else if(this.css){var s=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(s,this.css)}},n.sourcePath=function(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))},n.toBase64=function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},n.toFileUrl=function(e){var r=this.memoizedFileURLs.get(e);if(r)return r;if(Yf){var s=Yf(e).toString();return this.memoizedFileURLs.set(e,s),s}else throw new Error("`map.absolute` option is not available in this PostCSS build")},n.toUrl=function(e){var r=this.memoizedURLs.get(e);if(r)return r;Kf==="\\"&&(e=e.replace(/\\/g,"/"));var s=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,s),s},t})(),Jf=Uw,Bw=Di,wa=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="comment",e}return n})(Bw),Wi=wa;wa.default=wa;var Xf=xt.isClean,Zf=xt.my,Qf=Fi,eh=Wi,qw=Di,th,ba,Sa,rh;function nh(t){return t.map(function(n){return n.nodes&&(n.nodes=nh(n.nodes)),delete n.source,n})}function ih(t){if(t[Xf]=!1,t.proxyOf.nodes)for(var n=E(t.proxyOf.nodes),i;!(i=n()).done;){var e=i.value;ih(e)}}var pt=(function(t){ue(n,t);function n(){return t.apply(this,arguments)||this}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?c-1:0),f=1;f=r&&(this.indexes[o]=s-1);return this.markDirty(),this},i.replaceValues=function(r,s,o){return o||(o=s,s={}),this.walkDecls(function(a){s.props&&!s.props.includes(a.prop)||s.fast&&!a.value.includes(s.fast)||(a.value=a.value.replace(r,o))}),this.markDirty(),this},i.some=function(r){return this.nodes.some(r)},i.walk=function(r){return this.each(function(s,o){var a;try{a=r(s,o)}catch(u){throw s.addToError(u)}return a!==!1&&s.walk&&(a=s.walk(r)),a})},i.walkAtRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="atrule"&&r.test(o.name))return s(o,a)}):this.walk(function(o,a){if(o.type==="atrule"&&o.name===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="atrule")return s(o,a)}))},i.walkComments=function(r){return this.walk(function(s,o){if(s.type==="comment")return r(s,o)})},i.walkDecls=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="decl"&&r.test(o.prop))return s(o,a)}):this.walk(function(o,a){if(o.type==="decl"&&o.prop===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="decl")return s(o,a)}))},i.walkRules=function(r,s){return s?T(r,RegExp)?this.walk(function(o,a){if(o.type==="rule"&&r.test(o.selector))return s(o,a)}):this.walk(function(o,a){if(o.type==="rule"&&o.selector===r)return s(o,a)}):(s=r,this.walk(function(o,a){if(o.type==="rule")return s(o,a)}))},ie(n,[{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}]),n})(qw);pt.registerParse=function(t){th=t},pt.registerRule=function(t){ba=t},pt.registerAtRule=function(t){Sa=t},pt.registerRoot=function(t){rh=t};var Kt=pt;pt.default=pt,pt.rebuild=function(t){t.type==="atrule"?Object.setPrototypeOf(t,Sa.prototype):t.type==="rule"?Object.setPrototypeOf(t,ba.prototype):t.type==="decl"?Object.setPrototypeOf(t,Qf.prototype):t.type==="comment"?Object.setPrototypeOf(t,eh.prototype):t.type==="root"&&Object.setPrototypeOf(t,rh.prototype),t[Zf]=!0,t.nodes&&t.nodes.forEach(function(n){pt.rebuild(n)})};var zw=Kt,sh,oh,hn=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,z({type:"document"},e))||this,r.nodes||(r.nodes=[]),r}var i=n.prototype;return i.toResult=function(r){r===void 0&&(r={});var s=new sh(new oh,this,r);return s.stringify()},n})(zw);hn.registerLazyResult=function(t){sh=t},hn.registerProcessor=function(t){oh=t};var Ca=hn;hn.default=hn;var ah={},uh=function(n){ah[n]||(ah[n]=!0,typeof console!="undefined"&&console.warn&&console.warn(n))},Ea=(function(){function t(i,e){if(e===void 0&&(e={}),this.type="warning",this.text=i,e.node&&e.node.source){var r=e.node.rangeBy(e);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(var s in e)this[s]=e[s]}var n=t.prototype;return n.toString=function(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},t})(),ch=Ea;Ea.default=Ea;var Gw=ch,Ia=(function(){function t(i,e,r){this.processor=i,this.messages=[],this.root=e,this.opts=r,this.css=void 0,this.map=void 0}var n=t.prototype;return n.toString=function(){return this.css},n.warn=function(e,r){r===void 0&&(r={}),r.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(r.plugin=this.lastPlugin.postcssPlugin);var s=new Gw(e,r);return this.messages.push(s),s},n.warnings=function(){return this.messages.filter(function(e){return e.type==="warning"})},ie(t,[{key:"content",get:function(){return this.css}}]),t})(),Oa=Ia;Ia.default=Ia;var xa=39,lh=34,Vi=92,fh=47,ji=10,pn=32,Hi=12,Ki=9,Yi=13,Ww=91,Vw=93,jw=40,Hw=41,Kw=123,Yw=125,Jw=59,Xw=42,Zw=58,Qw=64,Ji=/[\t\n\f\r "#'()/;[\\\]{}]/g,Xi=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,eb=/.[\r\n"'(/\\]/,hh=/[\da-f]/i,tb=function(n,i){i===void 0&&(i={});var e=n.css.valueOf(),r=i.ignoreErrors,s,o,a,u,c,l,f,p,g,v,m=e.length,d=0,y=[],_=[];function w(){return d}function S(R){throw n.error("Unclosed "+R,d)}function b(){return _.length===0&&d>=m}function O(R){if(_.length)return _.pop();if(!(d>=m)){var L=R?R.ignoreUnclosed:!1;switch(s=e.charCodeAt(d),s){case ji:case pn:case Ki:case Yi:case Hi:{o=d;do o+=1,s=e.charCodeAt(o);while(s===pn||s===ji||s===Ki||s===Yi||s===Hi);v=["space",e.slice(d,o)],d=o-1;break}case Ww:case Vw:case Kw:case Yw:case Zw:case Jw:case Hw:{var G=String.fromCharCode(s);v=[G,G,d];break}case jw:{if(p=y.length?y.pop()[1]:"",g=e.charCodeAt(d+1),p==="url"&&g!==xa&&g!==lh&&g!==pn&&g!==ji&&g!==Ki&&g!==Hi&&g!==Yi){o=d;do{if(l=!1,o=e.indexOf(")",o+1),o===-1)if(r||L){o=d;break}else S("bracket");for(f=o;e.charCodeAt(f-1)===Vi;)f-=1,l=!l}while(l);v=["brackets",e.slice(d,o+1),d,o],d=o}else o=e.indexOf(")",d+1),u=e.slice(d,o+1),o===-1||eb.test(u)?v=["(","(",d]:(v=["brackets",u,d,o],d=o);break}case xa:case lh:{a=s===xa?"'":'"',o=d;do{if(l=!1,o=e.indexOf(a,o+1),o===-1)if(r||L){o=d+1;break}else S("string");for(f=o;e.charCodeAt(f-1)===Vi;)f-=1,l=!l}while(l);v=["string",e.slice(d,o+1),d,o],d=o;break}case Qw:{Ji.lastIndex=d+1,Ji.test(e),Ji.lastIndex===0?o=e.length-1:o=Ji.lastIndex-2,v=["at-word",e.slice(d,o+1),d,o],d=o;break}case Vi:{for(o=d,c=!0;e.charCodeAt(o+1)===Vi;)o+=1,c=!c;if(s=e.charCodeAt(o+1),c&&s!==fh&&s!==pn&&s!==ji&&s!==Ki&&s!==Yi&&s!==Hi&&(o+=1,hh.test(e.charAt(o)))){for(;hh.test(e.charAt(o+1));)o+=1;e.charCodeAt(o+1)===pn&&(o+=1)}v=["word",e.slice(d,o+1),d,o],d=o;break}default:{s===fh&&e.charCodeAt(d+1)===Xw?(o=e.indexOf("*/",d+2)+1,o===0&&(r||L?o=e.length:S("comment")),v=["comment",e.slice(d,o+1),d,o],d=o):(Xi.lastIndex=d+1,Xi.test(e),Xi.lastIndex===0?o=e.length-1:o=Xi.lastIndex-2,v=["word",e.slice(d,o+1),d,o],y.push(v),d=o);break}}return d++,v}}function M(R){_.push(R)}return{back:M,endOfFile:b,nextToken:O,position:w}},ph=Kt,Zi=(function(t){ue(n,t);function n(e){var r;return r=t.call(this,e)||this,r.type="atrule",r}var i=n.prototype;return i.append=function(){for(var r=arguments.length,s=new Array(r),o=0;o1?s.raws.before=this.nodes[1].raws.before:delete s.raws.before;else if(this.first!==s)for(var u=E(a),c;!(c=u()).done;){var l=c.value;l.raws.before=s.raws.before}}return a},i.removeChild=function(r,s){var o=this.index(r);return!s&&o===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[o].raws.before),t.prototype.removeChild.call(this,r)},i.toResult=function(r){r===void 0&&(r={});var s=new vh(new gh,this,r);return s.stringify()},n})(dh);Cr.registerLazyResult=function(t){vh=t},Cr.registerProcessor=function(t){gh=t};var dn=Cr;Cr.default=Cr,dh.registerRoot(Cr);var vn={comma:function(n){return vn.split(n,[","],!0)},space:function(n){var i=[" ","\n"," "];return vn.split(n,i)},split:function(n,i,e){for(var r=[],s="",o=!1,a=0,u=!1,c="",l=!1,f=E(n),p;!(p=f()).done;){var g=p.value;l?l=!1:g==="\\"?l=!0:u?g===c&&(u=!1):g==='"'||g==="'"?(u=!0,c=g):g==="("?a+=1:g===")"?a>0&&(a-=1):a===0&&i.includes(g)&&(o=!0),o?(s!==""&&r.push(s.trim()),s="",o=!1):s+=g}return(e||s!=="")&&r.push(s.trim()),r}},mh=vn;vn.default=vn;var yh=Kt,rb=mh,Qi=(function(t){ue(n,t);function n(i){var e;return e=t.call(this,i)||this,e.type="rule",e.nodes||(e.nodes=[]),e}return ie(n,[{key:"selectors",get:function(){return rb.comma(this.selector)},set:function(e){var r=this.selector?this.selector.match(/,\s*/):null,s=r?r[0]:","+this.raw("between","beforeOpen");this.selector=e.join(s)}}]),n})(yh),Ra=Qi;Qi.default=Qi,yh.registerRule(Qi);var nb=Fi,ib=tb,sb=Wi,ob=ka,ab=dn,_h=Ra,wh={empty:!0,space:!0};function ub(t){for(var n=t.length-1;n>=0;n--){var i=t[n],e=i[3]||i[2];if(e)return e}}var cb=(function(){function t(i){this.input=i,this.root=new ab,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:i,start:{column:1,line:1,offset:0}}}var n=t.prototype;return n.atrule=function(e){var r=new ob;r.name=e[1].slice(1),r.name===""&&this.unnamedAtrule(r,e),this.init(r,e[2]);for(var s,o,a,u=!1,c=!1,l=[],f=[];!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),s=e[0],s==="("||s==="["?f.push(s==="("?")":"]"):s==="{"&&f.length>0?f.push("}"):s===f[f.length-1]&&f.pop(),f.length===0)if(s===";"){r.source.end=this.getPosition(e[2]),r.source.end.offset++,this.semicolon=!0;break}else if(s==="{"){c=!0;break}else if(s==="}"){if(l.length>0){for(a=l.length-1,o=l[a];o&&o[0]==="space";)o=l[--a];o&&(r.source.end=this.getPosition(o[3]||o[2]),r.source.end.offset++)}this.end(e);break}else l.push(e);else l.push(e);if(this.tokenizer.endOfFile()){u=!0;break}}r.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(r.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(r,"params",l),u&&(e=l[l.length-1],r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++,this.spaces=r.raws.between,r.raws.between="")):(r.raws.afterName="",r.params=""),c&&(r.nodes=[],this.current=r)},n.checkMissedSemicolon=function(e){var r=this.colon(e);if(r!==!1){for(var s=0,o,a=r-1;a>=0&&(o=e[a],!(o[0]!=="space"&&(s+=1,s===2)));a--);throw this.input.error("Missed semicolon",o[0]==="word"?o[3]+1:o[2])}},n.colon=function(e){for(var r=0,s,o,a,u=E(e.entries()),c;!(c=u()).done;){var l=c.value,f=l[0],p=l[1];if(s=p,o=s[0],o==="("&&(r+=1),o===")"&&(r-=1),r===0&&o===":")if(!a)this.doubleColon(s);else{if(a[0]==="word"&&a[1]==="progid")continue;return f}a=s}return!1},n.comment=function(e){var r=new sb;this.init(r,e[2]),r.source.end=this.getPosition(e[3]||e[2]),r.source.end.offset++;var s=e[1].slice(2,-2);if(/^\s*$/.test(s))r.text="",r.raws.left=s,r.raws.right="";else{var o=s.match(/^(\s*)([^]*\S)(\s*)$/);r.text=o[2],r.raws.left=o[1],r.raws.right=o[3]}},n.createTokenizer=function(){this.tokenizer=ib(this.input)},n.decl=function(e,r){var s=new nb;this.init(s,e[0][2]);var o=e[e.length-1];for(o[0]===";"&&(this.semicolon=!0,e.pop()),s.source.end=this.getPosition(o[3]||o[2]||ub(e)),s.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),s.raws.before+=e.shift()[1];for(s.source.start=this.getPosition(e[0][2]),s.prop="";e.length;){var a=e[0][0];if(a===":"||a==="space"||a==="comment")break;s.prop+=e.shift()[1]}s.raws.between="";for(var u;e.length;)if(u=e.shift(),u[0]===":"){s.raws.between+=u[1];break}else u[0]==="word"&&/\w/.test(u[1])&&this.unknownWord([u]),s.raws.between+=u[1];(s.prop[0]==="_"||s.prop[0]==="*")&&(s.raws.before+=s.prop[0],s.prop=s.prop.slice(1));for(var c=[],l;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)c.push(e.shift());this.precheckMissedSemicolon(e);for(var f=e.length-1;f>=0;f--){if(u=e[f],u[1].toLowerCase()==="!important"){s.important=!0;var p=this.stringFrom(e,f);p=this.spacesFromEnd(e)+p,p!==" !important"&&(s.raws.important=p);break}else if(u[1].toLowerCase()==="important"){for(var g=e.slice(0),v="",m=f;m>0;m--){var d=g[m][0];if(v.trim().indexOf("!")===0&&d!=="space")break;v=g.pop()[1]+v}v.trim().indexOf("!")===0&&(s.important=!0,s.raws.important=v,e=g)}if(u[0]!=="space"&&u[0]!=="comment")break}var y=e.some(function(_){return _[0]!=="space"&&_[0]!=="comment"});y&&(s.raws.between+=c.map(function(_){return _[1]}).join(""),c=[]),this.raw(s,"value",c.concat(e),r),s.value.includes(":")&&!r&&this.checkMissedSemicolon(e)},n.doubleColon=function(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})},n.emptyRule=function(e){var r=new _h;this.init(r,e[2]),r.selector="",r.raws.between="",this.current=r},n.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)},n.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())},n.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var r=this.current.nodes[this.current.nodes.length-1];r&&r.type==="rule"&&!r.raws.ownSemicolon&&(r.raws.ownSemicolon=this.spaces,this.spaces="")}},n.getPosition=function(e){var r=this.input.fromOffset(e);return{column:r.col,line:r.line,offset:e}},n.init=function(e,r){this.current.push(e),e.source={input:this.input,start:this.getPosition(r)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)},n.other=function(e){for(var r=!1,s=null,o=!1,a=null,u=[],c=e[1].startsWith("--"),l=[],f=e;f;){if(s=f[0],l.push(f),s==="("||s==="[")a||(a=f),u.push(s==="("?")":"]");else if(c&&o&&s==="{")a||(a=f),u.push("}");else if(u.length===0)if(s===";")if(o){this.decl(l,c);return}else break;else if(s==="{"){this.rule(l);return}else if(s==="}"){this.tokenizer.back(l.pop()),r=!0;break}else s===":"&&(o=!0);else s===u[u.length-1]&&(u.pop(),u.length===0&&(a=null));f=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(r=!0),u.length>0&&this.unclosedBracket(a),r&&o){if(!c)for(;l.length&&(f=l[l.length-1][0],!(f!=="space"&&f!=="comment"));)this.tokenizer.back(l.pop());this.decl(l,c)}else this.unknownWord(l)},n.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()},n.precheckMissedSemicolon=function(){},n.raw=function(e,r,s,o){for(var a,u,c=s.length,l="",f=!0,p,g,v=0;vparseInt(l[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+u+", but "+o+" uses "+a+". Perhaps this is the source of the error below.")}}catch(f){console&&console.error&&console.error(f)}return e},n.prepareVisitors=function(){var e=this;this.listeners={};for(var r=function(l,f,p){e.listeners[f]||(e.listeners[f]=[]),e.listeners[f].push([l,p])},s=E(this.plugins),o;!(o=s()).done;){var a=o.value;if((typeof a=="undefined"?"undefined":P(a))==="object")for(var u in a){if(!Cb[u]&&/^[A-Z]/.test(u))throw new Error("Unknown event "+u+" in "+a.postcssPlugin+". Try to update PostCSS ("+this.processor.version+" now).");if(!Eb[u])if(P(a[u])==="object")for(var c in a[u])c==="*"?r(a,u,a[u][c]):r(a,u+"-"+c.toLowerCase(),a[u][c]);else typeof a[u]=="function"&&r(a,u,a[u])}}this.hasListener=Object.keys(this.listeners).length>0},n.runAsync=function(){var e=this;return Tn(function(){var r,s,o,a,u,c,l,f,p,g,v,m;return Gt(this,function(d){switch(d.label){case 0:e.plugin=0,r=0,d.label=1;case 1:if(!(r0))return[3,13];if(l=e.visitTick(c),!gn(l))return[3,12];d.label=9;case 9:return d.trys.push([9,11,,12]),[4,l];case 10:return d.sent(),[3,12];case 11:throw f=d.sent(),p=c[c.length-1].node,e.handleError(f,p);case 12:return[3,8];case 13:return[3,7];case 14:if(!e.listeners.OnceExit)return[3,18];g=function(){var y,_,w,S,b;return Gt(this,function(O){switch(O.label){case 0:y=m.value,_=y[0],w=y[1],e.result.lastPlugin=_,O.label=1;case 1:return O.trys.push([1,6,,7]),u.type!=="document"?[3,3]:(S=u.nodes.map(function(M){return w(M,e.helpers)}),[4,Promise.all(S)]);case 2:return O.sent(),[3,5];case 3:return[4,w(u,e.helpers)];case 4:O.sent(),O.label=5;case 5:return[3,7];case 6:throw b=O.sent(),e.handleError(b);case 7:return[2]}})},v=E(e.listeners.OnceExit),d.label=15;case 15:return(m=v()).done?[3,18]:[5,Ls(g())];case 16:d.sent(),d.label=17;case 17:return[3,15];case 18:return e.processed=!0,[2,e.stringify()]}})})()},n.runOnRoot=function(e){var r=this;this.result.lastPlugin=e;try{if((typeof e=="undefined"?"undefined":P(e))==="object"&&e.Once){if(this.result.root.type==="document"){var s=this.result.root.nodes.map(function(o){return e.Once(o,r.helpers)});return gn(s[0])?Promise.all(s):s}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(o){throw this.handleError(o)}},n.stringify=function(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,r=gb;e.syntax&&(r=e.syntax.stringify),e.stringifier&&(r=e.stringifier),r.stringify&&(r=r.stringify);var s=new vb(r,this.result.root,this.result.opts),o=s.generate();return this.result.css=o[0],this.result.map=o[1],this.result},n.sync=function(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(var e=E(this.plugins),r;!(r=e()).done;){var s=r.value,o=this.runOnRoot(s);if(gn(o))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){for(var a=this.result.root;!a[tt];)a[tt]=!0,this.walkSync(a);if(this.listeners.OnceExit)if(a.type==="document")for(var u=E(a.nodes),c;!(c=u()).done;){var l=c.value;this.visitSync(this.listeners.OnceExit,l)}else this.visitSync(this.listeners.OnceExit,a)}return this.result},n.then=function(e,r){return process.env.NODE_ENV!=="production"&&("from"in this.opts||_b("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,r)},n.toString=function(){return this.css},n.visitSync=function(e,r){for(var s=E(e),o;!(o=s()).done;){var a=o.value,u=a[0],c=a[1];this.result.lastPlugin=u;var l=void 0;try{l=c(r,this.helpers)}catch(f){throw this.handleError(f,r.proxyOf)}if(r.type!=="root"&&r.type!=="document"&&!r.parent)return!0;if(gn(l))throw this.getAsyncError()}},n.visitTick=function(e){var r=e[e.length-1],s=r.node,o=r.visitors;if(s.type!=="root"&&s.type!=="document"&&!s.parent){e.pop();return}if(o.length>0&&r.visitorIndex-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"("),s=r.match(/ (\((.+):(\d+):(\d+)\)$)/);r=s?r.replace(s[0],""):r;var o=r.split(/\s+/).slice(1),a=this.extractLocation(s?s[1]:o.pop()),u=o.join(" ")||void 0,c=["eval",""].indexOf(a[0])>-1?void 0:a[0];return new Or({functionName:u,fileName:c,lineNumber:a[1],columnNumber:a[2]})},this)},parseFFOrSafari:function(n){var i=n.stack.split("\n").filter(function(e){return!e.match(oS)},this);return i.map(function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new Or({functionName:e});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,s=e.match(r),o=s&&s[1]?s[1]:void 0,a=this.extractLocation(e.replace(r,""));return new Or({functionName:o,fileName:a[0],lineNumber:a[1],columnNumber:a[2]})},this)},parseOpera:function(n){return!n.stacktrace||n.message.indexOf("\n")>-1&&n.message.split("\n").length>n.stacktrace.split("\n").length?this.parseOpera9(n):n.stack?this.parseOpera11(n):this.parseOpera10(n)},parseOpera9:function(n){for(var i=/Line (\d+).*script (?:in )?(\S+)/i,e=n.message.split("\n"),r=[],s=2,o=e.length;s/,"$2").replace(/\([^)]*\)/g,"")||void 0;return new Or({functionName:a,fileName:s[0],lineNumber:s[1],columnNumber:s[2]})},this)}};function aS(t){if(!t||!t.outerHTML)return"";for(var n="";t.parentElement;){var i=t.localName;if(!i)break;i=i.toLowerCase();var e=t.parentElement,r=[];if(e.children&&e.children.length>0)for(var s=0;s1&&(i+=":eq("+r.indexOf(t)+")"),n=i+(n?">"+n:""),t=e}return n}function La(t){return Object.prototype.toString.call(t)==="[object Object]"}function Th(t,n){if(n===0)return!0;for(var i=Object.keys(t),e=E(i),r;!(r=e()).done;){var s=r.value;if(La(t[s])&&Th(t[s],n-1))return!0}return!1}function xr(t,n){var i={numOfKeysLimit:50,depthOfLimit:4};Object.assign(i,n);var e=[],r=[];return JSON.stringify(t,function(a,u){if(e.length>0){var c=e.indexOf(this);~c?e.splice(c+1):e.push(this),~c?r.splice(c,1/0,a):r.push(a),~e.indexOf(u)&&(e[0]===u?u="[Circular ~]":u="[Circular ~."+r.slice(0,e.indexOf(u)).join(".")+"]")}else e.push(u);if(u===null)return u;if(u===void 0)return"undefined";if(s(u))return o(u);if((typeof u=="undefined"?"undefined":P(u))==="bigint")return u.toString()+"n";if(T(u,Event)){var l={};for(var f in u){var p=u[f];Array.isArray(p)?l[f]=aS(p.length?p[0]:null):l[f]=p}return l}else{if(T(u,Node))return T(u,HTMLElement)?u?u.outerHTML:"":u.nodeName;if(T(u,Error))return u.stack?u.stack+"\nEnd of stack for Error object":u.name+": "+u.message}return u});function s(a){return!!(La(a)&&Object.keys(a).length>i.numOfKeysLimit||typeof a=="function"||La(a)&&Th(a,i.depthOfLimit))}function o(a){var u=a.toString();return i.stringLengthLimit&&u.length>i.stringLengthLimit&&(u=""+u.slice(0,i.stringLengthLimit)+"..."),u}}var Ph={level:["assert","clear","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],lengthThreshold:1e3,logger:"console"};function uS(t,n,i){var e=i?Object.assign({},Ph,i):Ph,r=e.logger;if(!r)return function(){};var s;typeof r=="string"?s=n[r]:s=r;var o=0,a=!1,u=[];if(e.level.includes("error")){var c=function(m){var d=m.message,y=m.error,_=Na.parse(y).map(function(S){return S.toString()}),w=[xr(d,e.stringifyOptions)];t({level:"error",trace:_,payload:w})};n.addEventListener("error",c),u.push(function(){n.removeEventListener("error",c)});var l=function(m){var d,y;T(m.reason,Error)?(d=m.reason,y=[xr("Uncaught (in promise) "+d.name+": "+d.message,e.stringifyOptions)]):(d=new Error,y=[xr("Uncaught (in promise)",e.stringifyOptions),xr(m.reason,e.stringifyOptions)]);var _=Na.parse(d).map(function(w){return w.toString()});t({level:"error",trace:_,payload:y})};n.addEventListener("unhandledrejection",l),u.push(function(){n.removeEventListener("unhandledrejection",l)})}for(var f=E(e.level),p;!(p=f()).done;){var g=p.value;u.push(v(s,g))}return function(){u.forEach(function(m){return m()})};function v(m,d){var y=this;return m[d]?iS(m,d,function(_){var w=y;return function(){for(var S=arguments.length,b=new Array(S),O=0;O0&&rs(Ua,i))}catch(e){_n.call(new Uh(i),e)}}}function _n(t){var n=this;n.triggered||(n.triggered=!0,n.def&&(n=n.def),n.msg=t,n.state=2,n.chain.length>0&&rs(Ua,n))}function Fh(t,n,i,e){for(var r=0;r0&&(n[e]=i)}),n},h.truncate=function(t,n){var i;return typeof t=="string"?i=t.slice(0,n):h.isArray(t)?(i=[],h.each(t,function(e){i.push(h.truncate(e,n))})):h.isObject(t)?(i={},h.each(t,function(e,r){i[r]=h.truncate(e,n)})):i=t,i},h.JSONEncode=(function(){return function(t){var n=t,i=function(r){var s=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,o={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return s.lastIndex=0,s.test(r)?'"'+r.replace(s,function(a){var u=o[a];return typeof u=="string"?u:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+r+'"'},e=function(r,s){var o="",a=" ",u=0,c="",l="",f=0,p=o,g=[],v=s[r];switch(v&&typeof v=="object"&&typeof v.toJSON=="function"&&(v=v.toJSON(r)),typeof v){case"string":return i(v);case"number":return isFinite(v)?String(v):"null";case"boolean":case"null":return String(v);case"object":if(!v)return"null";if(o+=a,g=[],bn.apply(v)==="[object Array]"){for(f=v.length,u=0;u="0"&&n<="9";)v+=n,s();if(n===".")for(v+=".";s()&&n>="0"&&n<="9";)v+=n;if(n==="e"||n==="E")for(v+=n,s(),(n==="-"||n==="+")&&(v+=n,s());n>="0"&&n<="9";)v+=n,s();if(g=+v,!isFinite(g))r("Bad number");else return g},a=function(){var g,v,m="",d;if(n==='"')for(;s();){if(n==='"')return s(),m;if(n==="\\")if(s(),n==="u"){for(d=0,v=0;v<4&&(g=parseInt(s(),16),!!isFinite(g));v+=1)d=d*16+g;m+=String.fromCharCode(d)}else if(typeof i[n]=="string")m+=i[n];else break;else m+=n}r("Bad string")},u=function(){for(;n&&n<=" ";)s()},c=function(){switch(n){case"t":return s("t"),s("r"),s("u"),s("e"),!0;case"f":return s("f"),s("a"),s("l"),s("s"),s("e"),!1;case"n":return s("n"),s("u"),s("l"),s("l"),null}r('Unexpected "'+n+'"')},l,f=function(){var g=[];if(n==="["){if(s("["),u(),n==="]")return s("]"),g;for(;n;){if(g.push(l()),u(),n==="]")return s("]"),g;s(","),u()}}r("Bad array")},p=function(){var g,v={};if(n==="{"){if(s("{"),u(),n==="}")return s("}"),v;for(;n;){if(g=a(),u(),s(":"),Object.hasOwnProperty.call(v,g)&&r('Duplicate key "'+g+'"'),v[g]=l(),u(),n==="}")return s("}"),v;s(","),u()}}r("Bad object")};return l=function(){switch(u(),n){case"{":return p();case"[":return f();case'"':return a();case"-":return o();default:return n>="0"&&n<="9"?o():c()}},function(g){var v;return e=g,t=0,n=" ",v=l(),u(),n&&r("Syntax error"),v}})(),h.base64Encode=function(t){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i,e,r,s,o,a,u,c,l=0,f=0,p="",g=[];if(!t)return t;t=h.utf8Encode(t);do i=t.charCodeAt(l++),e=t.charCodeAt(l++),r=t.charCodeAt(l++),c=i<<16|e<<8|r,s=c>>18&63,o=c>>12&63,a=c>>6&63,u=c&63,g[f++]=n.charAt(s)+n.charAt(o)+n.charAt(a)+n.charAt(u);while(l127&&o<2048?a=String.fromCharCode(o>>6|192,o&63|128):a=String.fromCharCode(o>>12|224,o>>6&63|128,o&63|128),a!==null&&(e>i&&(n+=t.substring(i,e)),n+=a,i=e=s+1)}return e>i&&(n+=t.substring(i,t.length)),n},h.UUID=function(){try{return C.crypto.randomUUID()}catch(i){for(var t=new Array(36),n=0;n<36;n++)t[n]=Math.floor(Math.random()*16);return t[14]=4,t[19]=t[19]&=-5,t[19]=t[19]|=8,t[8]=t[13]=t[18]=t[23]="-",h.map(t,function(e){return e.toString(16)}).join("")}};var jh=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];h.isBlockedUA=function(t){var n;for(t=t.toLowerCase(),n=0;n=0}function e(r){if(!B.getElementsByTagName)return[];var s=r.split(" "),o,a,u,c,l,f,p,g,v,m,d=[B];for(f=0;f-1){a=o.split("#"),u=a[0];var y=a[1],_=B.getElementById(y);if(!_||u&&_.nodeName.toLowerCase()!=u)return[];d=[_];continue}if(o.indexOf(".")>-1){a=o.split("."),u=a[0];var w=a[1];for(u||(u="*"),c=[],l=0,p=0;p-1};break;default:R=function(L){return L.getAttribute(b)}}for(d=[],m=0,p=0;p=3?n[2]:""},currentUrl:function(){return C.location.href},properties:function(t){return typeof t!="object"&&(t={}),h.extend(h.strip_empty_properties({$os:h.info.os(),$browser:h.info.browser(rt,dt.vendor,Sn),$referrer:B.referrer,$referring_domain:h.info.referringDomain(B.referrer),$device:h.info.device(rt)}),{$current_url:h.info.currentUrl(),$browser_version:h.info.browserVersion(rt,dt.vendor,Sn),$screen_height:zh.height,$screen_width:zh.width,mp_lib:"web",$lib_version:Le.LIB_VERSION,$insert_id:ja(),time:h.timestamp()/1e3},h.strip_empty_properties(t))},people_properties:function(){return h.extend(h.strip_empty_properties({$os:h.info.os(),$browser:h.info.browser(rt,dt.vendor,Sn)}),{$browser_version:h.info.browserVersion(rt,dt.vendor,Sn)})},mpPageViewProperties:function(){return h.strip_empty_properties({current_page_title:B.title,current_domain:C.location.hostname,current_url_path:C.location.pathname,current_url_protocol:C.location.protocol,current_url_search:C.location.search})}};var bS=function(t,n){var i=null,e=[];return function(r){var s=this;return e.push(r),i||(i=new D(function(o){setTimeout(function(){var a=t.apply(s,[e]);i=null,e=[],o(a)},n)})),i}},ja=function(t){var n=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return t?n.substring(0,t):n},Yh=function(){var t=h.UUID().replace(/-/g,""),n=h.UUID().replace(/-/g,"").substring(0,16),i="01";return"00-"+t+"-"+n+"-"+i},SS=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,CS=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,Jh=function(t){var n=CS,i=t.split("."),e=i[i.length-1];(e.length>4||e==="com"||e==="org")&&(n=SS);var r=t.match(n);return r?r[0]:""},ES=function(){var t=C.navigator.onLine;return h.isUndefined(t)||t},Mt=function(){},os=function(t,n){for(var i=!1,e=0;e=16.4&&r<16.6)};h.info=h.info,h.info.browser=h.info.browser,h.info.browserVersion=h.info.browserVersion,h.info.device=h.info.device,h.info.properties=h.info.properties,h.isBlockedUA=h.isBlockedUA,h.isEmptyObject=h.isEmptyObject,h.isObject=h.isObject,h.JSONDecode=h.JSONDecode,h.JSONEncode=h.JSONEncode,h.toArray=h.toArray,h.NPO=Rt;var Ue=function(t,n,i,e){this.dbName=t,this.storeName=n,this.version=i.version,this.storeNamesInDb=i.storeNames,this.createIfMissing=!e||e.createIfMissing!==!1,this.dbPromise=null};Ue.prototype._openDb=function(){var t=this.dbName,n=this.version,i=this.storeNamesInDb,e=this.createIfMissing,r=function(){return new D(function(s,o){var a=C.indexedDB.open(t,n);a.onerror=function(){o(a.error)},a.onsuccess=function(){s(a.result)},a.onupgradeneeded=function(u){if(!e&&u.oldVersion===0){a.transaction.abort();return}var c=u.target.result;i.forEach(function(l){c.objectStoreNames.contains(l)||c.createObjectStore(l)})}})};return e||!C.indexedDB.databases?r():C.indexedDB.databases().then(function(s){for(var o=0;oc){OS.error("Timeout waiting for mutex on "+a+"; clearing lock. ["+s+"]"),l.removeItem(g),l.removeItem(p),y();return}setTimeout(function(){try{w()}catch(S){r(S)}},u*(Math.random()+.1))},m=function(w,S){w()?S():v(function(){m(w,S)})},d=function(){var w=l.getItem(p);return w&&w!==s?!1:(l.setItem(p,s),l.getItem(p)===s?!0:(kr(l,!0)||r(new Error("localStorage support dropped while acquiring lock")),!1))},y=function(){l.setItem(f,s),m(d,function(){if(l.getItem(f)===s){_();return}v(function(){if(l.getItem(p)!==s){y();return}m(function(){return!l.getItem(g)},_)})})},_=function(){l.setItem(g,"1");var w=function(){l.removeItem(g),l.getItem(p)===s&&l.removeItem(p),l.getItem(f)===s&&l.removeItem(f)};t().then(function(S){w(),e(S)}).catch(function(S){w(),r(S)})};try{if(kr(l,!0))y();else throw new Error("localStorage support check failed")}catch(w){r(w)}},this))};var Mr=function(t){this.storage=t||Rr()};Mr.prototype.init=function(){return this.storage?D.resolve():D.reject(new Error("localStorage is not available"))},Mr.prototype.isInitialized=function(){return!0},Mr.prototype.setItem=function(t,n){return new D(h.bind(function(i,e){try{this.storage.setItem(t,Ar(n))}catch(r){e(r)}i()},this))},Mr.prototype.getItem=function(t){return new D(h.bind(function(n,i){var e;try{e=as(this.storage.getItem(t))}catch(r){i(r)}n(e)},this))},Mr.prototype.removeItem=function(t){return new D(h.bind(function(n,i){try{this.storage.removeItem(t)}catch(e){i(e)}n()},this))};var Qh=nt("batch"),He=function(t,n){n=n||{},this.storageKey=t,this.usePersistence=n.usePersistence,this.usePersistence&&(this.queueStorage=n.queueStorage||new Mr,this.lock=new Zh(t,{storage:n.sharedLockStorage,timeoutMS:n.sharedLockTimeoutMS})),this.reportError=n.errorReporter||h.bind(Qh.error,Qh),this.consentGate=n.consentGate,this.pid=n.pid||null,this.memQueue=[],this.initialized=!1,n.enqueueThrottleMs?this.enqueuePersisted=bS(h.bind(this._enqueuePersisted,this),n.enqueueThrottleMs):this.enqueuePersisted=h.bind(function(i){return this._enqueuePersisted([i])},this)};He.prototype.ensureInit=function(){return this.initialized||!this.usePersistence?D.resolve():this.queueStorage.init().then(h.bind(function(){this.initialized=!0},this)).catch(h.bind(function(t){this.reportError("Error initializing queue persistence. Disabling persistence",t),this.initialized=!0,this.usePersistence=!1},this))},He.prototype.enqueue=function(t,n){var i={id:ja(),flushAfter:new Date().getTime()+n*2,payload:t};return this._persists()?this.enqueuePersisted(i):(this.memQueue.push(i),D.resolve(!0))},He.prototype._persists=function(){return this.usePersistence&&this.consentGate.allowsStoring()},He.prototype._enqueuePersisted=function(t){if(!this._persists())return D.resolve(!1);var n=h.bind(function(){return this.ensureInit().then(h.bind(function(){return this.readFromStorage()},this)).then(h.bind(function(i){return this.saveToStorage(i.concat(t))},this)).then(h.bind(function(i){return i&&(this.memQueue=this.memQueue.concat(t)),i},this)).catch(h.bind(function(i){return this.reportError("Error enqueueing items",i,t),!1},this))},this);return this.lock.withLock(n,this.pid).catch(h.bind(function(i){return this.reportError("Error acquiring storage lock",i),!1},this))},He.prototype.fillBatch=function(t){var n=this.memQueue.slice(0,t);return this.usePersistence&&n.lengths.flushAfter&&!e[s.id]&&(s.orphaned=!0,n.push(s),n.length>=t))break}}return n},this)):D.resolve(n)};var ep=function(t,n){var i=[];return h.each(t,function(e){e.id&&!n[e.id]&&i.push(e)}),i};He.prototype.removeItemsByID=function(t){var n={};if(h.each(t,function(e){n[e]=!0}),this.memQueue=ep(this.memQueue,n),this._persists()){var i=h.bind(function(){return this.ensureInit().then(h.bind(function(){return this.readFromStorage()},this)).then(h.bind(function(e){return e=ep(e,n),this.saveToStorage(e)},this)).then(h.bind(function(){return this.readFromStorage()},this)).then(h.bind(function(e){for(var r=0;r5&&(this.reportError("[dupe] item ID sent too many times, not sending",{item:f,batchSize:r.length,timesSent:this.itemIdsSentSuccessfully[v]}),g=!1):this.reportError("[dupe] found item with no ID",{item:f}),g&&o.push(p)}a[f.id]=p},this),o.length<1)return this.requestInProgress=!1,this.resetFlush(),D.resolve();var u=h.bind(function(){return this.queue.removeItemsByID(h.map(r,function(f){return f.id})).then(h.bind(function(f){return h.each(r,h.bind(function(p){var g=p.id;g?(this.itemIdsSentSuccessfully[g]=this.itemIdsSentSuccessfully[g]||0,this.itemIdsSentSuccessfully[g]++,this.itemIdsSentSuccessfully[g]>5&&this.reportError("[dupe] item ID sent too many times",{item:p,batchSize:r.length,timesSent:this.itemIdsSentSuccessfully[g]})):this.reportError("[dupe] found item with no ID while removing",{item:p})},this)),f?(this.consecutiveRemovalFailures=0,this.flushOnlyOnInterval&&!s?(this.resetFlush(),D.resolve()):this.flush()):(++this.consecutiveRemovalFailures>5?(this.reportError("Too many queue failures; disabling batching system."),this.stopAllBatching()):this.resetFlush(),D.resolve())},this))},this),c=h.bind(function(f){this.requestInProgress=!1;try{if(t.unloading)return this.queue.updatePayloads(a);if(h.isObject(f)&&f.error==="timeout"&&new Date().getTime()-i>=n)return this.reportError("Network timeout; retrying"),this.flush();if(h.isObject(f)&&(f.httpStatusCode>=500||f.httpStatusCode===429||f.httpStatusCode<=0&&!ES()||f.error==="timeout")){var p=this.flushInterval*2;return f.retryAfter&&(p=parseInt(f.retryAfter,10)*1e3||p),p=Math.min(xS,p),this.reportError("Error; retry in "+p+" ms"),this.scheduleFlush(p),D.resolve()}else if(h.isObject(f)&&f.httpStatusCode===413)if(r.length>1){var g=Math.max(1,Math.floor(e/2));return this.batchSize=Math.min(this.batchSize,g,r.length-1),this.reportError("413 response; reducing batch size to "+this.batchSize),this.resetFlush(),D.resolve()}else return this.reportError("Single-event request too large; dropping",r),this.resetBatchSize(),u();else return u()}catch(v){this.reportError("Error handling API response",v),this.resetFlush()}},this),l={method:"POST",verbose:!0,ignore_json_errors:!0,timeout_ms:n};return t.unloading&&(l.transport="sendBeacon"),Cn.log("MIXPANEL REQUEST:",o),this.sendRequestPromise(o,l).then(c)},this)).catch(h.bind(function(r){this.reportError("Error flushing request queue",r),this.resetFlush()},this))},We.prototype.reportError=function(t,n){if(Cn.error.apply(Cn.error,arguments),this.errorReporter)try{n instanceof Error||(n=new Error(t)),this.errorReporter(t,n)}catch(i){Cn.error(i)}};var Ja=function(t){var n=Date.now();return!t||n>t.maxExpires||n>t.idleExpires},kS=250,rp=function(t,n){if(!h.isArray(t))return t&&n.critical("record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled."),[];for(var i=[],e=0;e0?n[0]:t.target||t.srcElement}var _p=".mp-mask, .fs-mask, .amp-mask, .rr-mask, .ph-mask",jS="data-rr-is-password",HS=["password","email","tel","hidden"];function fs(t){return t?Array.isArray(t)?t:[t]:[]}function KS(t){var n={input:{maskingSelector:"",unmaskingSelector:"",maskAll:!0},text:{maskingSelector:"",unmaskingSelector:"",maskAll:!0}},i=t.get_config("record_mask_input_selector"),e=t.get_config("record_unmask_input_selector"),r=t.get_config("record_mask_all_inputs");n.input.maskingSelector=fs(i).join(","),n.input.unmaskingSelector=fs(e).join(","),r!==void 0&&(n.input.maskAll=r);var s=t.get_config("record_mask_text_selector"),o=t.get_config("record_unmask_text_selector"),a=t.get_config("record_mask_all_text"),u=t.get_config("record_mask_text_class"),c=fs(s);if(u)if(u instanceof RegExp)n.text._legacyClassRegex=u;else{var l="."+u;c.indexOf(l)===-1&&c.push(l)}return n.text.maskingSelector=c.join(","),n.text.unmaskingSelector=fs(o).join(","),a===void 0&&s!==void 0?n.text.maskAll=!1:a!==void 0&&(n.text.maskAll=a),n}function Tr(t,n){return n?!!t.closest(n):!1}function YS(t,n){var i=(t.getAttribute("type")||"").toLowerCase();if(HS.indexOf(i)!==-1)return!0;var e=(t.getAttribute("autocomplete")||"").toLowerCase();return e&&e!==""&&e!=="off"||t.hasAttribute(jS)||dp(t)?!0:n.input.maskAll?!Tr(t,n.input.unmaskingSelector):!!(Tr(t,n.input.maskingSelector)||Tr(t,_p))}function JS(t,n){return t?n.text._legacyClassRegex&&sa(t,n.text._legacyClassRegex)?!0:n.text.maskAll?!Tr(t,n.text.unmaskingSelector):!!(Tr(t,n.text.maskingSelector)||Tr(t,_p)):!1}var Jt=nt("network-plugin");function hs(t){return Math.round(Date.now()-t.performance.now())}var su={initiatorTypes:["audio","beacon","body","css","early-hint","embed","fetch","frame","iframe","icon","image","img","input","link","navigation","object","ping","script","track","video","xmlhttprequest"],ignoreRequestFn:function(){return!1},recordHeaders:{request:[],response:[]},recordBodyUrls:{request:[],response:[]},recordInitialRequests:!1};function XS(t){return t.entryType==="navigation"}function ou(t){return t.entryType==="resource"}function ZS(t,n){for(var i=t.length,e=i-1;e>=0;e-=1)if(n(t[e]))return t[e]}function wp(t,n,i){if(!(n in t)||typeof t[n]!="function")return function(){};var e=t[n],r=i(e);return t[n]=r,function(){t[n]=e}}var au=1024*1024;function bp(t){return!t||typeof t!="string"?t:t.length>au?(Jt.error("Body truncated from "+t.length+" to "+au+" characters"),t.substring(0,au)+"... [truncated]"):t}function QS(t,n,i){if(!n.PerformanceObserver)return Jt.error("PerformanceObserver not supported"),function(){};if(i.recordInitialRequests){var e=n.performance.getEntries().filter(function(s){return XS(s)||ou(s)&&i.initiatorTypes.includes(s.initiatorType)});t({requests:e.map(function(s){return{url:s.name,initiatorType:s.initiatorType,status:"responseStatus"in s?s.responseStatus:void 0,startTime:Math.round(s.startTime),endTime:Math.round(s.responseEnd),timeOrigin:hs(n)}}),isInitial:!0})}var r=new n.PerformanceObserver(function(s){var o=s.getEntries().filter(function(a){return ou(a)&&i.initiatorTypes.includes(a.initiatorType)&&a.initiatorType!=="xmlhttprequest"&&a.initiatorType!=="fetch"});t({requests:o.map(function(a){return{url:a.name,initiatorType:a.initiatorType,status:"responseStatus"in a?a.responseStatus:void 0,startTime:Math.round(a.startTime),endTime:Math.round(a.responseEnd),timeOrigin:hs(n)}})})});return r.observe({entryTypes:["navigation","resource"]}),function(){r.disconnect()}}function ps(t,n,i){return!n[t]||n[t].length===0?!1:n[t].includes(i.toLowerCase())}function ds(t,n,i){return!n[t]||n[t].length===0?!1:os(i,n[t])}function Sp(t){if(t==null)return null;var n;if(typeof t=="string")n=t;else if(t instanceof Document)n=t.textContent;else if(t instanceof FormData)n=h.HTTPBuildQuery(t);else if(h.isObject(t))try{n=JSON.stringify(t)}catch(i){return"Failed to stringify response object"}else return"Cannot read body of type "+typeof t;return bp(n)}function Cp(t){return new Promise(function(n){var i=setTimeout(function(){n("Timeout while trying to read body")},500);try{t.clone().text().then(function(e){clearTimeout(i),n(bp(e))},function(e){clearTimeout(i),n("Failed to read body: "+String(e))})}catch(e){clearTimeout(i),n("Failed to read body: "+String(e))}})}function uu(t,n,i,e,r,s){if(s===void 0&&(s=0),s>10)return Jt.error("Cannot find performance entry"),Promise.resolve(null);var o=t.performance.getEntriesByName(i),a=ZS(o,function(u){return ou(u)&&u.initiatorType===n&&(!e||u.startTime>=e)&&(!r||u.startTime<=r)});return a?Promise.resolve(a):new Promise(function(u){setTimeout(u,50*s)}).then(function(){return uu(t,n,i,e,r,s+1)})}function eC(t,n,i){if(!i.initiatorTypes.includes("xmlhttprequest"))return function(){};var e=wp(n.XMLHttpRequest.prototype,"open",function(r){return function(s,o,a,u,c){a===void 0&&(a=!0);var l=this,f=new Request(o,{method:s}),p={},g,v,m={},d=l.setRequestHeader.bind(l);l.setRequestHeader=function(_,w){return ps("request",i.recordHeaders,_)&&(m[_]=w),d(_,w)},p.requestHeaders=m;var y=l.send.bind(l);l.send=function(_){return ds("request",i.recordBodyUrls,f.url)&&(p.requestBody=Sp(_)),g=n.performance.now(),y(_)},l.addEventListener("readystatechange",function(){if(l.readyState===l.DONE){v=n.performance.now();var _={},w=l.getAllResponseHeaders();if(w){var S=w.trim().split(/[\r\n]+/);S.forEach(function(b){if(b){var O=b.indexOf(": ");if(O!==-1){var M=b.substring(0,O),R=b.substring(O+2);M&&ps("response",i.recordHeaders,M)&&(_[M]=R)}}})}p.responseHeaders=_,ds("response",i.recordBodyUrls,f.url)&&(p.responseBody=Sp(l.response)),uu(n,"xmlhttprequest",f.url,g,v).then(function(b){if(!b){Jt.error("Failed to get performance entry for XHR request to "+f.url);return}var O={url:b.name,method:f.method,initiatorType:b.initiatorType,status:l.status,startTime:Math.round(b.startTime),endTime:Math.round(b.responseEnd),timeOrigin:hs(n),requestHeaders:p.requestHeaders,requestBody:p.requestBody,responseHeaders:p.responseHeaders,responseBody:p.responseBody};t({requests:[O]})}).catch(function(b){Jt.error("Error recording XHR request to "+f.url+": "+String(b))})}}),r.call(l,s,o,a,u,c)}});return function(){e()}}function tC(t,n){if(typeof Request!="undefined"&&t instanceof Request){var i=t.clone();return n?new Request(i,n):i}return new Request(t,n)}function rC(t,n,i){if(!i.initiatorTypes.includes("fetch"))return function(){};var e=wp(n,"fetch",function(r){return function(){var s=tC(arguments[0],arguments[1]),o,a={},u,c,l,f=Promise.resolve(void 0),p,g=new Promise(function(m){p=m});try{var v={};s.headers.forEach(function(m,d){ps("request",i.recordHeaders,d)&&(v[d]=m)}),a.requestHeaders=v,ds("request",i.recordBodyUrls,s.url)&&(f=Cp(s).then(function(m){a.requestBody=m})),u=n.performance.now(),l=r.apply(n,arguments).then(function(m){o=m,c=n.performance.now();var d={};return o.headers.forEach(function(y,_){ps("response",i.recordHeaders,_)&&(d[_]=y)}),a.responseHeaders=d,ds("response",i.recordBodyUrls,s.url)?Cp(o).then(function(y){a.responseBody=y,p()}):p(),o})}catch(m){l=Promise.reject(m)}return Promise.all([f,g,l]).then(function(){return uu(n,"fetch",s.url,u,c)}).then(function(m){if(!m){Jt.error("Failed to get performance entry for fetch request to "+s.url);return}var d={url:m.name,method:s.method,initiatorType:m.initiatorType,status:o?o.status:void 0,startTime:Math.round(m.startTime),endTime:Math.round(m.responseEnd),timeOrigin:hs(n),requestHeaders:a.requestHeaders,requestBody:a.requestBody,responseHeaders:a.responseHeaders,responseBody:a.responseBody};t({requests:[d]})}).catch(function(m){Jt.error("Error recording fetch request to "+s.url+": "+String(m))}),l}});return function(){e()}}function nC(t,n,i){if(!("performance"in n))return function(){};var e=Object.assign({},su.recordHeaders,i.recordHeaders||{}),r=Object.assign({},su.recordBodyUrls,i.recordBodyUrls||{});i=Object.assign({},i,{recordHeaders:e,recordBodyUrls:r});var s=Object.assign({},su,i),o=function(l){var f=l.requests.filter(function(p){var g=os(p.url,s.ignoreRequestUrls||[]);return!g&&!s.ignoreRequestFn(p)});(f.length>0||l.isInitial)&&t(Object.assign({},l,{requests:f}))},a=QS(o,n,s),u=eC(o,n,s),c=rC(o,n,s);return function(){a(),u(),c()}}var iC="rrweb/network@1.mp",sC=function(t){return{name:iC,observer:nC,options:t}},Xt=nt("recorder"),oC=C.CompressionStream,aC={batch_size:1e3,batch_flush_interval_ms:10*1e3,batch_request_timeout_ms:90*1e3,batch_autostart:!0},uC=new Set([U.MouseMove,U.MouseInteraction,U.Scroll,U.ViewportResize,U.Input,U.TouchMove,U.MediaInteraction,U.Drag,U.Selection]);function cC(t){return t.type===j.IncrementalSnapshot&&uC.has(t.data.source)}var Ce=function(t){this._mixpanel=t.mixpanelInstance,this.consentGate=t.consentGate,this._onIdleTimeout=t.onIdleTimeout||Mt,this._onMaxLengthReached=t.onMaxLengthReached||Mt,this._onBatchSent=t.onBatchSent||Mt,this._rrwebRecord=t.rrwebRecord||null,this._stopRecording=null,this.replayId=t.replayId,this.batchStartUrl=t.batchStartUrl||null,this.replayStartUrl=t.replayStartUrl||null,this.idleExpires=t.idleExpires||null,this.maxExpires=t.maxExpires||null,this.replayStartTime=t.replayStartTime||null,this.lastEventTimestamp=t.lastEventTimestamp||null,this.seqNo=t.seqNo||0,this.idleTimeoutId=null,this.maxTimeoutId=null,this.recordMaxMs=wn,this.recordMinMs=0,this._recordMinMsCheckStart=null;var n=kr(t.sharedLockStorage||Rr(),!0)&&this.consentGate.allowsPersistence();this.batcherKey="__mprec_"+this.getConfig("name")+"_"+this.getConfig("token")+"_"+this.replayId,this.queueStorage=new Ue(Ha,Xh,Ya),this.batcher=new We(this.batcherKey,{errorReporter:this.reportError.bind(this),flushOnlyOnInterval:!0,libConfig:aC,sendRequestFunc:this.flushEventsWithOptOut.bind(this),queueStorage:this.queueStorage,sharedLockStorage:t.sharedLockStorage,usePersistence:n,stopAllBatchingFunc:this.stopRecording.bind(this),consentGate:this.consentGate,enqueueThrottleMs:kS,sharedLockTimeoutMS:10*1e3})};Ce.prototype.getUserIdInfo=function(){if(this.finalFlushUserIdInfo)return this.finalFlushUserIdInfo;var t={distinct_id:String(this._mixpanel.get_distinct_id())},n=this._mixpanel.get_property("$device_id");n&&(t.$device_id=n);var i=this._mixpanel.get_property("$user_id");return i&&(t.$user_id=i),t},Ce.prototype.unloadPersistedData=function(){return this.batcher.stop(),this.queueStorage.init().catch(function(){this.reportError("Error initializing IndexedDB storage for unloading persisted data.")}.bind(this)).then(function(){return this.getDurationMs()wn&&(this.recordMaxMs=wn,Xt.critical("record_max_ms cannot be greater than "+wn+"ms. Capping value.")),this.maxExpires||(this.maxExpires=new Date().getTime()+this.recordMaxMs),this.recordMinMs=this._getRecordMinMs(),this.replayStartTime||(this.replayStartTime=new Date().getTime(),this.batchStartUrl=h.info.currentUrl(),this.replayStartUrl=h.info.currentUrl()),t||this.recordMinMs>0?(this.batcher.stop(),this._recordMinMsCheckStart=null):this.batcher.start();var n=function(){clearTimeout(this.idleTimeoutId);var c=this.getConfig("record_idle_timeout_ms");this.idleTimeoutId=setTimeout(this._onIdleTimeout,c),this.idleExpires=new Date().getTime()+c}.bind(this);n();var i=this.getConfig("record_block_selector");(i===""||i===null)&&(i=void 0);var e=KS(this._mixpanel),r=[];if(this.getConfig("record_network")){var s=this.getConfig("record_network_options")||{},o=(s.ignoreRequestUrls||[]).slice();o.push(this._getApiRoute()),s.ignoreRequestUrls=o,r.push(sC(s))}this.getConfig("record_console")&&r.push(lS({stringifyOptions:{stringLengthLimit:1e3,numOfKeysLimit:50,depthOfLimit:2}}));var a=rp(this.getConfig("record_allowed_iframe_origins"),Xt);try{this._stopRecording=this._rrwebRecord({emit:function(c){if(this.idleExpires&&this.idleExpires=this.recordMinMs&&this.batcher.start(),n()),this.__enqueuePromise=this.batcher.enqueue(c),(this.lastEventTimestamp===null||c.timestamp>this.lastEventTimestamp)&&(this.lastEventTimestamp=c.timestamp)}.bind(this),blockClass:this.getConfig("record_block_class"),blockSelector:i,collectFonts:this.getConfig("record_collect_fonts"),dataURLOptions:{type:"image/webp",quality:.6},maskAllInputs:!0,maskTextSelector:"*",maskInputFn:this._getMaskFn(YS,e),maskTextFn:this._getMaskFn(JS,e),recordCrossOriginIframes:a.length>0,allowedIframeOrigins:a,recordCanvas:this.getConfig("record_canvas"),sampling:{canvas:15},plugins:r})}catch(c){this.reportError("Unexpected error when starting rrweb recording.",c)}if(typeof this._stopRecording!="function"){this.reportError("rrweb failed to start, skipping this recording."),this._stopRecording=null,this.stopRecording();return}var u=this.maxExpires-new Date().getTime();this.maxTimeoutId=setTimeout(this._onMaxLengthReached.bind(this),u)},Ce.prototype.stopRecording=function(t){if(this.finalFlushUserIdInfo=this.getUserIdInfo(),!this.isRrwebStopped()){try{this._stopRecording()}catch(i){this.reportError("Error with rrweb stopRecording",i)}this._stopRecording=null}var n;return this.batcher.stopped?n=this.batcher.clear():t||(n=this.batcher.flush()),this.batcher.stop(),clearTimeout(this.idleTimeoutId),clearTimeout(this.maxTimeoutId),n},Ce.prototype.isRrwebStopped=function(){return this._stopRecording===null},Ce.prototype.flushEventsWithOptOut=function(t,n,i){if(!this.consentGate.allowsApiCalls()){this.stopRecording(),i({error:"Tracking has been opted out, stopping recording."});return}this._flushEvents(t,n,i)},Ce.prototype.serialize=function(){var t;try{t=this._mixpanel.get_tab_id()}catch(n){this.reportError("Error getting tab ID for serialization ",n),t=null}return{replayId:this.replayId,seqNo:this.seqNo,replayStartTime:this.replayStartTime,batchStartUrl:this.batchStartUrl,replayStartUrl:this.replayStartUrl,lastEventTimestamp:this.lastEventTimestamp,idleExpires:this.idleExpires,maxExpires:this.maxExpires,tabId:t}},Ce.deserialize=function(t,n){var i=new Ce(h.extend({},n,{replayId:t.replayId,batchStartUrl:t.batchStartUrl,replayStartUrl:t.replayStartUrl,idleExpires:t.idleExpires,maxExpires:t.maxExpires,replayStartTime:t.replayStartTime,lastEventTimestamp:t.lastEventTimestamp,seqNo:t.seqNo,sharedLockStorage:n.sharedLockStorage}));return i},Ce.prototype._getApiRoute=function(){return this.getConfig("api_routes").record},Ce.prototype._sendRequest=function(t,n,i,e){if(!this.consentGate.allowsApiCalls()){e(0);return}var r=function(o,a){o.status===200&&this.replayId===t&&(this.seqNo++,this.batchStartUrl=h.info.currentUrl()),this._onBatchSent(),e({status:0,httpStatusCode:o.status,responseBody:a,retryAfter:o.headers.get("Retry-After")})}.bind(this),s=this._mixpanel.get_api_host&&this._mixpanel.get_api_host("record")||this.getConfig("api_host");C.fetch(s+"/"+this._getApiRoute()+"?"+new URLSearchParams(n),{method:"POST",headers:{Authorization:"Basic "+btoa(this.getConfig("token")+":"),"Content-Type":"application/octet-stream"},body:i}).then(function(o){o.json().then(function(a){r(o,a)}).catch(function(a){e({error:a})})}).catch(function(o){e({error:o,httpStatusCode:0})})},Ce.prototype._flushEvents=function(t,n,i){var e=t.length;if(e>0){for(var r=this.replayId,s=1/0,o=-1/0,a=!1,u=0;uBa?(Xt.critical("record_min_ms cannot be greater than "+Ba+"ms. Capping value."),Ba):t},Ce.prototype._getMaskFn=function(t,n){return function(i,e){if(!i.trim().length)return i;var r=!0;try{r=t(e,n)}catch(o){this.reportError("Error checking if text should be masked, defaulting to masked",o)}if(r){var s=Math.min(i.length,1e4);return"*".repeat(s)}else return i}.bind(this)};var Pt=function(t){this.idb=new Ue(Ha,Ka,Ya),this.errorReporter=t.errorReporter,this.mixpanelInstance=t.mixpanelInstance,this.consentGate=t.consentGate,this.sharedLockStorage=t.sharedLockStorage};Pt.prototype.isPersistenceEnabled=function(){return this.consentGate.allowsPersistence()},Pt.prototype.handleError=function(t){this.errorReporter("IndexedDB error: ",t)},Pt.prototype.setActiveRecording=function(t){if(!this.isPersistenceEnabled())return D.resolve();var n=t.tabId;return n?this.idb.init().then(function(){return this.idb.setItem(n,t)}.bind(this)).catch(this.handleError.bind(this)):(console.warn("No tab ID is set, cannot persist recording metadata."),D.resolve())},Pt.prototype.getActiveRecording=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getItem(this.mixpanelInstance.get_tab_id())}.bind(this)).then(function(t){return Ja(t)?null:t}.bind(this)).catch(this.handleError.bind(this)):D.resolve(null)},Pt.prototype.clearActiveRecording=function(){return this.markActiveRecordingExpired()},Pt.prototype.markActiveRecordingExpired=function(){return this.getActiveRecording().then(function(t){if(t)return t.maxExpires=0,this.setActiveRecording(t)}.bind(this)).catch(this.handleError.bind(this))},Pt.prototype.flushInactiveRecordings=function(){return this.isPersistenceEnabled()?this.idb.init().then(function(){return this.idb.getAll()}.bind(this)).then(function(t){var n=t.filter(function(i){return Ja(i)}).map(function(i){var e=Ce.deserialize(i,{mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,sharedLockStorage:this.sharedLockStorage});return e.unloadPersistedData().then(function(){return this.idb.removeItem(i.tabId)}.bind(this)).catch(this.handleError.bind(this))}.bind(this));return D.all(n)}.bind(this)).catch(this.handleError.bind(this)):D.resolve([])};function Ep(t,n){var i={allowsApiCalls:function(){try{return t("api_calls")}catch(e){return $.error("Unexpected error when checking tracking opt-out status: "+e),!0}},allowsSending:function(){return t("send")},allowsFetching:function(){return t("fetch")},allowsStoring:function(){return t("store")},allowsPersistence:function(){return i.allowsStoring()&&!n("disable_persistence")}};return i}function lC(t){return Ep(function(n){var i=t._consent_allows;return typeof i=="function"?!!i.call(t,n):n!=="api_calls"||!t.has_opted_out_tracking()},function(n){return t.get_config(n)})}var In=nt("recorder"),st=function(t,n,i){this.mixpanelInstance=t,this.rrwebRecord=n||It,this.sharedLockStorage=i,this.consentGate=lC(t),this.recordingRegistry=new Pt({mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,errorReporter:In.error,sharedLockStorage:i}),this._flushInactivePromise=this.recordingRegistry.flushInactiveRecordings(),this.activeRecording=null,this.stopRecordingInProgress=!1};st.prototype.startRecording=function(t){if(t=t||{},this.activeRecording&&!this.activeRecording.isRrwebStopped()){In.log("Recording already in progress, skipping startRecording.");return}var n=function(){In.log("Idle timeout reached, restarting recording."),this.resetRecording()}.bind(this),i=function(){In.log("Max recording length reached, stopping recording."),this.resetRecording()}.bind(this),e=function(){this.recordingRegistry.setActiveRecording(this.activeRecording.serialize()),this.__flushPromise=this.activeRecording.batcher._flushPromise}.bind(this),r={mixpanelInstance:this.mixpanelInstance,consentGate:this.consentGate,onBatchSent:e,onIdleTimeout:n,onMaxLengthReached:i,replayId:h.UUID(),rrwebRecord:this.rrwebRecord,sharedLockStorage:this.sharedLockStorage};return t.activeSerializedRecording?this.activeRecording=Ce.deserialize(t.activeSerializedRecording,r):this.activeRecording=new Ce(r),this.activeRecording.startRecording(t.shouldStopBatcher),this.recordingRegistry.setActiveRecording(this.activeRecording.serialize())},st.prototype.stopRecording=function(){return this.stopRecordingInProgress=!0,this._stopCurrentRecording(!1,!0).then(function(){return this.recordingRegistry.clearActiveRecording()}.bind(this)).then(function(){this.stopRecordingInProgress=!1}.bind(this))},st.prototype.pauseRecording=function(){return this._stopCurrentRecording(!1)},st.prototype._stopCurrentRecording=function(t,n){if(this.activeRecording){var i=this.activeRecording.stopRecording(t);return n&&(this.activeRecording=null),i}return D.resolve()},st.prototype.resumeRecording=function(t){return this.activeRecording&&this.activeRecording.isRrwebStopped()?(this.activeRecording.startRecording(!1),D.resolve(null)):this.recordingRegistry.getActiveRecording().then(function(n){return n&&!this.stopRecordingInProgress?this.startRecording({activeSerializedRecording:n}):t?this.startRecording({shouldStopBatcher:!1}):(In.log("No resumable recording found."),null)}.bind(this))},st.prototype.resetRecording=function(){this.stopRecording(),this.startRecording({shouldStopBatcher:!0})},st.prototype.isRecording=function(){return this.activeRecording&&!this.activeRecording.isRrwebStopped()},st.prototype.getActiveReplayId=function(){return this.isRecording()?this.activeRecording.replayId:null},Object.defineProperty(st.prototype,"replayId",{get:function(){return this.getActiveReplayId()}}),C[$s]=st;var fC=30,hC=1e3,pC=4,dC=!1;function Ip(){this.clicks=[]}Ip.prototype.isRageClick=function(t,n){n=n||{};var i=n.threshold_px||fC,e=n.timeout_ms||hC,r=n.click_count||pC,s=n.interactive_elements_only||dC;if(s){var o=yp(t);if(!o||gp(o))return!1}var a=Date.now(),u=t.pageX,c=t.pageY,l=this.clicks[this.clicks.length-1];if(l&&a-l.timestamp=r)return this.clicks=[],!0}else this.clicks=[{x:u,y:c,timestamp:a}];return!1};function Pr(t,n){this.changeCallback=t||function(){},this.observerConfig=n,this.observedShadowRoots=null,this.shadowObservers=[]}Pr.prototype.getEventTarget=function(t){if(this.observedShadowRoots)return yp(t)},Pr.prototype.observeFromEvent=function(t){if(this.observedShadowRoots)for(var n=mp(t),i=0;i=n?this.hasChangesAfter(o.timestamp)||r.push(o):this.pendingClicks.push(o)}return r},ot.prototype.hasChangesAfter=function(t){return this.lastChangeEventTimestamp>=t-100},ot.prototype.recordChangeEvent=function(){this.lastChangeEventTimestamp=Date.now()},ot.prototype.triggerProcessing=function(t){this.processingActive||(this.processingActive=!0,this.processRecursively(t))},ot.prototype.processRecursively=function(t){if(!this.isTracking||!this.onDeadClickCallback){this.processingActive=!1;return}var n=t.timeout_ms,i=this;this.processingTimeout=setTimeout(function(){if(i.processingActive){for(var e=i.getDeadClicks(t),r=0;r0?i.processRecursively(t):i.processingActive=!1}},n)},ot.prototype.startTracking=function(){if(!this.isTracking){this.isTracking=!0;var t=this;gC.forEach(function(i){var e=function(){t.recordChangeEvent()};document.addEventListener(i,e,{capture:!0,passive:!0}),t.eventListeners.push({target:document,event:i,handler:e,options:{capture:!0,passive:!0}})}),yC.forEach(function(i){var e=function(){t.recordChangeEvent()};window.addEventListener(i,e),t.eventListeners.push({target:window,event:i,handler:e})}),mC.forEach(function(i){var e=function(){t.recordChangeEvent()};window.addEventListener(i,e,{passive:!0}),t.eventListeners.push({target:window,event:i,handler:e,options:{passive:!0}})});var n=function(){t.recordChangeEvent()};if(document.addEventListener("selectionchange",n),t.eventListeners.push({target:document,event:"selectionchange",handler:n}),window.MutationObserver)try{this.mutationObserver=new window.MutationObserver(function(){t.recordChangeEvent()}),this.mutationObserver.observe(document.body||document.documentElement,Op)}catch(i){re.critical("Error while setting up mutation observer",i)}if(window.customElements)try{this.shadowDOMObserver=new Pr(function(){t.recordChangeEvent()},Op),this.shadowDOMObserver.start()}catch(i){re.critical("Error while setting up shadow DOM observer",i),this.shadowDOMObserver=null}}},ot.prototype.stopTracking=function(){if(this.isTracking){this.isTracking=!1,this.pendingClicks=[],this.lastChangeEventTimestamp=0,this.processingActive=!1,this.processingTimeout&&(clearTimeout(this.processingTimeout),this.processingTimeout=null);for(var t=0;tthis.maxScrollViewDepth&&(this.maxScrollViewDepth=i),this.previousScrollHeight=B.body.scrollHeight}}.bind(this),n=vp(t);this.listenerScrollDepth=n.listener,C.addEventListener(n.eventType,this.listenerScrollDepth)}},we.prototype.initClickTracking=function(){C.removeEventListener(vt,this.listenerClick,!0),!(!this.getConfig(vs)&&!this.mp.get_config("record_heatmap_data"))&&(re.log("Initializing click tracking"),this.listenerClick=function(t){!this.getConfig(vs)&&!this.mp.is_recording_heatmap_data()||this.trackDomEvent(t,Up)}.bind(this),C.addEventListener(vt,this.listenerClick,!0))},we.prototype.initDeadClickTracking=function(){var t=this._getClickTrackingConfig(gs);if(!t&&!this.mp.get_config("record_heatmap_data")){this.stopDeadClickTracking();return}re.log("Initializing dead click tracking"),this._deadClickTracker||(this._deadClickTracker=new ot(function(n){this.trackDomEvent(n,Bp)}.bind(this)),this._deadClickTracker.startTracking()),this.listenerDeadClick||(this.listenerDeadClick=function(n){var i=this._getClickTrackingConfig(gs);if(!(!i&&!this.mp.is_recording_heatmap_data())&&!this.currentUrlBlocked()){var e=i||{};e.timeout_ms||(e.timeout_ms=vC),this._deadClickTracker.trackClick(n,e)}}.bind(this),C.addEventListener(vt,this.listenerDeadClick,!0))},we.prototype.initInputTracking=function(){C.removeEventListener(En,this.listenerChange,!0),this.getConfig(lu)&&(re.log("Initializing input tracking"),this.listenerChange=function(t){this.getConfig(lu)&&this.trackDomEvent(t,CC)}.bind(this),C.addEventListener(En,this.listenerChange,!0))},we.prototype.initPageviewTracking=function(){if(C.removeEventListener(Tt,this.listenerLocationchange),!(!this.pageviewTrackingConfig()&&!this.mp.get_config("record_heatmap_data"))){re.log("Initializing pageview tracking");var t="",n=!1;(this.pageviewTrackingConfig()||this.mp.is_recording_heatmap_data())&&!this.currentUrlBlocked()&&(n=this.mp.track_pageview(On)),n&&(t=h.info.currentUrl()),this.listenerLocationchange=Yt(function(){if(!this.currentUrlBlocked()){var i=h.info.currentUrl(),e=!1,r=i.split("#")[0].split("?")[0]!==t.split("#")[0].split("?")[0],s=this.pageviewTrackingConfig();if(!s&&this.mp.is_recording_heatmap_data()&&(s=cu),s===cu?e=i!==t:s===wC?e=i.split("#")[0]!==t.split("#")[0]:s===bC&&(e=r),e){var o=this.mp.track_pageview(On);o&&(t=i),r&&(this.lastScrollCheckpoint=0,re.log("Path change: re-initializing scroll depth checkpoints"))}}}.bind(this)),C.addEventListener(Tt,this.listenerLocationchange)}},we.prototype.initRageClickTracking=function(){C.removeEventListener(vt,this.listenerRageClick,!0);var t=this._getClickTrackingConfig(ms);!t&&!this.mp.get_config("record_heatmap_data")||(re.log("Initializing rage click tracking"),this._rageClickTracker||(this._rageClickTracker=new Ip),this.listenerRageClick=function(n){var i=this._getClickTrackingConfig(ms);!i&&!this.mp.is_recording_heatmap_data()||this.currentUrlBlocked()||this._rageClickTracker.isRageClick(n,i)&&this.trackDomEvent(n,qp)}.bind(this),C.addEventListener(vt,this.listenerRageClick,!0))},we.prototype.initScrollTracking=function(){if(C.removeEventListener(us,this.listenerScroll),C.removeEventListener(Za,this.listenerScroll),!!this.getConfig(fu)){re.log("Initializing scroll tracking"),this.lastScrollCheckpoint=0;var t=function(){if(this.getConfig(fu)&&!this.currentUrlBlocked()){var i=this.getConfig(Lp),e=(this.getConfig(Dp)||[]).slice().sort(function(l,f){return l-f}),r=C.scrollY,s=h.extend({$scroll_top:r},On);try{var o=B.body.scrollHeight,a=Math.round(r/(o-C.innerHeight)*100);if(s.$scroll_height=o,s.$scroll_percentage=a,a>this.lastScrollCheckpoint)for(var u=0;u=c&&this.lastScrollCheckpoint=i)return Ke.log("Persisted variants are expiring"),null;if(!t||e.distinctId!==t.distinct_id)return Ke.log("Persisted variants found, but for a different distinct_id so clearing."),n();var r=new Map;return h.each(e.flagVariants,function(s,o){r.set(o,{key:s.variant_key,value:s.variant_value,experiment_id:s.experiment_id,is_experiment_active:s.is_experiment_active,is_qa_tester:s.is_qa_tester,variant_source:"persistence",persisted_at_in_ms:e.persistedAt,ttl_in_ms:i})}),Ke.log("Loaded",r.size,"variants from IndexedDB for distinct_id",e.distinctId),{flags:r,pendingFirstTimeEvents:e.pendingFirstTimeEvents||{},persistedAtMs:e.persistedAt,ttlMs:i}},this)).catch(h.bind(function(e){return Ke.error("Failed to load persisted variants from IndexedDB, so clearing",e),n()},this))},Nt.prototype.save=function(t,n,i){if(this.getPolicy()===$t.NETWORK_ONLY)return Promise.resolve();var e={};n.forEach(function(s,o){e[o]={variant_key:s.key,variant_value:s.value,experiment_id:s.experiment_id,is_experiment_active:s.is_experiment_active,is_qa_tester:s.is_qa_tester}});var r={persistedAt:Date.now(),distinctId:t&&t.distinct_id,context:t,flagVariants:e,pendingFirstTimeEvents:i||{}};return this.idb.init().then(h.bind(function(){return this.idb.setItem(this.persistedVariantsKey,r)},this)).then(function(){Ke.log("Saved",n.size,"variants to IndexedDB for distinct_id",r.distinctId)}).catch(function(s){Ke.error("Failed to persist variants to IndexedDB:",s)})},Nt.prototype.clear=function(){if(this.isGloballyDisabled())return Promise.resolve();var t=this.persistedVariantsKey,n=new Ue(Gp,pu,Wp,{createIfMissing:!1});return n.init().then(function(){return n.removeItem(t)}).then(function(){Ke.log("Cleared persisted variants from IndexedDB")}).catch(function(i){Ke.log("No persisted variants cleared from IndexedDB:",i)})};var J=nt("flags"),_s="flags",ws="context",RC="persistence",du={};du[ws]={};var AC=function(t,n){return t+":"+n},MC=function(t){return t.split(":")[0]},TC="FLAG_NOT_FOUND",xn="NOT_READY",jp="BACKEND_ERROR",Lt=function(t,n){var i={variant_source:"fallback"};return n&&(i.fallback_reason=n),h.isObject(t)?h.extend({},t,i):h.extend({value:t},i)},A=function(t){this.fetch=C.fetch,this.getFullApiRoute=t.getFullApiRoute,this.getMpConfig=t.getConfigFunc,this.setMpConfig=t.setConfigFunc,this.getMpProperty=t.getPropertyFunc,this.track=t.trackingFunc,this.consentGate=t.consentGate,this.loadExtraBundle=t.loadExtraBundle||function(){},this.targetingSrc=t.targetingSrc||""};A.prototype.init=function(){if(this.consentGate.allowsFetching()){if(!this.minApisSupported()){J.critical("Feature Flags unavailable: missing minimum required APIs");return}return this.flags=null,this.trackedFeatures=new Set,this.pendingFirstTimeEvents={},this.activatedFirstTimeEvents={},this._loadedPersistedAtMs=null,this._loadedTtlMs=null,this.persistence=new Nt(this.getConfig(RC),this.getMpConfig("token"),h.bind(function(){return!this.consentGate.allowsPersistence()},this)),this.persistenceLoadedPromise=this.persistence.loadFlagsFromStorage(this._buildContext()).then(h.bind(function(t){t&&(this.flags=t.flags,this.pendingFirstTimeEvents=t.pendingFirstTimeEvents,this._loadedPersistedAtMs=t.persistedAtMs,this._loadedTtlMs=t.ttlMs)},this)),this.persistenceLoadedPromise.then(h.bind(function(){return this.fetchFlags()},this)).catch(function(){J.error("Error initializing feature flags")})}},A.prototype._buildContext=function(){return h.extend({distinct_id:this.getMpProperty("distinct_id"),device_id:this.getMpProperty("$device_id")},this.getConfig(ws))},A.prototype.reset=function(){return this.persistence?(this.flags=null,this.pendingFirstTimeEvents={},this.activatedFirstTimeEvents={},this.trackedFeatures=new Set,this.fetchPromise=null,this._fetchInProgressStartTime=null,this._loadedPersistedAtMs=null,this._loadedTtlMs=null,this.persistence.clear().then(h.bind(function(){return this.fetchFlags()},this)).catch(function(){J.error("Error during flags reset")})):Promise.resolve()},A.prototype.getFullConfig=function(){var t=this.getMpConfig(_s);return t?h.isObject(t)?h.extend({},du,t):du:{}},A.prototype.getConfig=function(t){return this.getFullConfig()[t]},A.prototype.isSystemEnabled=function(){return!!this.getMpConfig(_s)&&this.consentGate.allowsFetching()},A.prototype.updateContext=function(t,n){if(!this.isSystemEnabled())return J.critical("Feature Flags not enabled, cannot update context"),Promise.resolve();var i=this.getMpConfig(_s);h.isObject(i)||(i={});var e=n&&n.replace?{}:this.getConfig(ws);i[ws]=h.extend({},e,t);var r={};return r[_s]=i,this.setMpConfig(r),this.fetchFlags().catch(function(){J.error("Error fetching flags during updateContext")})},A.prototype.areFlagsReady=function(){return this.isSystemEnabled()||J.error("Feature Flags not enabled"),!!this.flags},A.prototype.clearPersistedVariants=function(){return new Nt(null,this.getMpConfig("token")).clear()},A.prototype.fetchFlags=function(){if(!this.isSystemEnabled())return Promise.resolve();var t=this._buildContext(),n=t.distinct_id,i=Yh();J.log("Fetching flags for distinct ID: "+n);var e=new URLSearchParams;e.set("context",JSON.stringify(t)),e.set("token",this.getMpConfig("token")),e.set("mp_lib","web"),e.set("$lib_version",Le.LIB_VERSION);var r=this.getFullApiRoute()+"?"+e.toString();return this._fetchInProgressStartTime=Date.now(),this.fetchPromise=this.fetch.call(C,r,{method:"GET",headers:{Authorization:"Basic "+btoa(this.getMpConfig("token")+":"),traceparent:i}}).then(function(s){return this.markFetchComplete(),s.json()}.bind(this)).then(function(s){var o=s.flags;if(!o)throw new Error("No flags in API response");var a=new Map,u={};h.each(o,function(l,f){var p=!1,g=f+":";if(h.each(this.activatedFirstTimeEvents,function(m,d){d.startsWith(g)&&(p=!0)}),p){var v=this.flags&&this.flags.get(f);v&&a.set(f,v)}else a.set(f,{key:l.variant_key,value:l.variant_value,experiment_id:l.experiment_id,is_experiment_active:l.is_experiment_active,is_qa_tester:l.is_qa_tester,variant_source:"network"})},this);var c=s.pending_first_time_events;c&&c.length>0&&h.each(c,function(l){var f=l.flag_key,p=AC(f,l.first_time_event_hash);this.activatedFirstTimeEvents[p]||(u[p]={flag_key:f,flag_id:l.flag_id,project_id:l.project_id,first_time_event_hash:l.first_time_event_hash,event_name:l.event_name,property_filters:l.property_filters,pending_variant:l.pending_variant})},this),this.activatedFirstTimeEvents&&h.each(this.activatedFirstTimeEvents,function(l,f){var p=MC(f);l&&!a.has(p)&&this.flags&&this.flags.has(p)&&a.set(p,this.flags.get(p))},this),this.flags=a,this.trackedFeatures=new Set,this.pendingFirstTimeEvents=u,this._loadedPersistedAtMs=null,this._loadedTtlMs=null,this._traceparent=i,this._loadTargetingIfNeeded(),this.persistence.save(t,this.flags,this.pendingFirstTimeEvents)}.bind(this)).catch(function(s){throw this._fetchInProgressStartTime&&this.markFetchComplete(),J.error(s),s}.bind(this)),this.fetchPromise},A.prototype.loadFlags=function(){return this.isSystemEnabled()?this.trackedFeatures?this._fetchInProgressStartTime?this.fetchPromise:this.fetchFlags():(J.error("loadFlags called before init"),Promise.resolve()):Promise.resolve()},A.prototype.markFetchComplete=function(){if(!this._fetchInProgressStartTime){J.error("Fetch in progress started time not set, cannot mark fetch complete");return}this._fetchStartTime=this._fetchInProgressStartTime,this._fetchCompleteTime=Date.now(),this._fetchLatency=this._fetchCompleteTime-this._fetchStartTime,this._fetchInProgressStartTime=null},A.prototype._loadTargetingIfNeeded=function(){var t=!1;h.each(this.pendingFirstTimeEvents,function(n){n.property_filters&&!h.isEmptyObject(n.property_filters)&&(t=!0)}),t&&this.getTargeting().then(function(){J.log("targeting loaded for property filter evaluation")})},A.prototype.getTargeting=function(){return zp(this.loadExtraBundle.bind(this),this.targetingSrc).catch(function(t){J.error("Failed to load targeting: "+t)}.bind(this))},A.prototype.checkFirstTimeEvents=function(t,n){return!this.pendingFirstTimeEvents||h.isEmptyObject(this.pendingFirstTimeEvents)?Promise.resolve():C[Xe]&&h.isFunction(C[Xe].then)?C[Xe].then(function(i){return this._processFirstTimeEventCheck(t,n,i)}.bind(this)).catch(function(){return this._processFirstTimeEventCheck(t,n,null)}.bind(this)):this._processFirstTimeEventCheck(t,n,null)},A.prototype._processFirstTimeEventCheck=function(t,n,i){var e=[];return h.each(this.pendingFirstTimeEvents,function(r,s){if(!this.activatedFirstTimeEvents[s]){var o=r.flag_key,a;if(!i&&r.property_filters&&!h.isEmptyObject(r.property_filters)){J.warn('Skipping event check for "'+o+'" - property filters require targeting library');return}if(!i)a={matches:t===r.event_name,error:null};else{var u={event_name:r.event_name,property_filters:r.property_filters};a=i.eventMatchesCriteria(t,n,u)}if(a.error){J.error('Error checking first-time event for flag "'+o+'": '+a.error);return}if(a.matches){J.log('First-time event matched for flag "'+o+'": '+t);var c={key:r.pending_variant.variant_key,value:r.pending_variant.variant_value,experiment_id:r.pending_variant.experiment_id,is_experiment_active:r.pending_variant.is_experiment_active};this.flags.set(o,c),this.trackedFeatures.delete(o),this.activatedFirstTimeEvents[s]=!0,e.push(this.recordFirstTimeEvent(r.flag_id,r.project_id,r.first_time_event_hash))}}},this),Promise.all(e)},A.prototype.getFirstTimeEventApiRoute=function(t){var n=this.getFullApiRoute().replace(/\/$/,"");return n+"/"+t+"/first-time-events"},A.prototype.recordFirstTimeEvent=function(t,n,i){if(!this.consentGate.allowsFetching())return Promise.resolve();var e=this.getMpProperty("distinct_id"),r=Yh(),s=new URLSearchParams;s.set("mp_lib","web"),s.set("$lib_version",Le.LIB_VERSION);var o=this.getFirstTimeEventApiRoute(t)+"?"+s.toString(),a={distinct_id:e,project_id:n,first_time_event_hash:i};return J.log("Recording first-time event for flag: "+t),this.fetch.call(C,o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Basic "+btoa(this.getMpConfig("token")+":"),traceparent:r},body:JSON.stringify(a)}).catch(function(u){J.error("Failed to record first-time event for flag "+t+": "+u)})},A.prototype.getVariant=function(t,n){if(!this.persistenceLoadedPromise)return new Promise(function(e){J.critical("Feature Flags not initialized"),e(Lt(n,xn))});var i=this.persistence.getPolicy();return this.persistenceLoadedPromise.then(h.bind(function(){if(i===$t.PERSISTENCE_UNTIL_NETWORK_SUCCESS)return this.areFlagsReady()&&!this._loadedPersistenceIsStale()?this.getVariantSync(t,n):this.fetchPromise?this.fetchPromise.then(h.bind(function(){return this.getVariantSync(t,n)},this)).catch(function(r){return J.error(r),Lt(n,jp)}):Lt(n,xn);var e=h.bind(function(){return this.getVariantSync(t,n)},this);return this.fetchPromise?this.fetchPromise.then(e).catch(h.bind(function(r){return J.error(r),this.areFlagsReady()?e():Lt(n,jp)},this)):Lt(n,xn)},this))},A.prototype._loadedPersistenceIsStale=function(){return!this._loadedPersistedAtMs||!this._loadedTtlMs?!1:Date.now()-this._loadedPersistedAtMs>=this._loadedTtlMs},A.prototype.getVariantSync=function(t,n){if(this._loadedPersistenceIsStale())return J.log('Loaded persisted variants are past TTL so returning fallback for "'+t+'"'),Lt(n,xn);if(!this.areFlagsReady())return J.log("Flags not loaded yet"),Lt(n,xn);var i=this.flags.get(t);return i?(this.trackFeatureCheck(t,i),i):(J.log('No flag found: "'+t+'"'),Lt(n,TC))},A.prototype.getAllVariants=function(){if(!this.persistenceLoadedPromise)return J.critical("Feature Flags not initialized"),Promise.resolve(new Map);var t=this.persistence.getPolicy();return this.persistenceLoadedPromise.then(h.bind(function(){if(t===$t.PERSISTENCE_UNTIL_NETWORK_SUCCESS)return this.areFlagsReady()&&!this._loadedPersistenceIsStale()?this.getAllVariantsSync():this.fetchPromise?this.fetchPromise.then(h.bind(function(){return this.getAllVariantsSync()},this)).catch(function(i){return J.error(i),new Map}):new Map;var n=h.bind(this.getAllVariantsSync,this);return this.fetchPromise?this.fetchPromise.then(n).catch(n):new Map},this))},A.prototype.getAllVariantsSync=function(){return this._loadedPersistenceIsStale()?(J.log("Loaded persisted variants are past TTL so returning empty Map"),new Map):this.flags||new Map},A.prototype.getVariantValue=function(t,n){return this.getVariant(t,{value:n}).then(function(i){return i.value}).catch(function(i){return J.error(i),n})},A.prototype.getFeatureData=function(t,n){return J.critical("mixpanel.flags.get_feature_data() is deprecated and will be removed in a future release. Use mixpanel.flags.get_variant_value() instead."),this.getVariantValue(t,n)},A.prototype.getVariantValueSync=function(t,n){return this.getVariantSync(t,{value:n}).value},A.prototype.isEnabled=function(t,n){return this.getVariantValue(t).then(function(){return this.isEnabledSync(t,n)}.bind(this)).catch(function(i){return J.error(i),n})},A.prototype.isEnabledSync=function(t,n){n=n||!1;var i=this.getVariantValueSync(t,n);return i!==!0&&i!==!1&&(J.error('Feature flag "'+t+'" value: '+i+" is not a boolean; returning fallback value: "+n),i=n),i};function Dt(t){return t!=null}A.prototype.trackFeatureCheck=function(t,n){if(!this.trackedFeatures.has(t)){this.trackedFeatures.add(t);var i={"Experiment name":t,"Variant name":n.key,$experiment_type:"feature_flag","Variant fetch start time":Dt(this._fetchStartTime)?new Date(this._fetchStartTime).toISOString():null,"Variant fetch complete time":Dt(this._fetchCompleteTime)?new Date(this._fetchCompleteTime).toISOString():null,"Variant fetch latency (ms)":this._fetchLatency,"Variant fetch traceparent":this._traceparent};Dt(n.experiment_id)&&(i.$experiment_id=n.experiment_id),Dt(n.is_experiment_active)&&(i.$is_experiment_active=n.is_experiment_active),Dt(n.is_qa_tester)&&(i.$is_qa_tester=n.is_qa_tester),Dt(n.variant_source)&&(i.$variant_source=n.variant_source),Dt(n.persisted_at_in_ms)&&(i.$persisted_at_in_ms=n.persisted_at_in_ms),Dt(n.ttl_in_ms)&&(i.$ttl_in_ms=n.ttl_in_ms),this.track("$experiment_started",i)}},A.prototype.whenReady=function(){return this.fetchPromise?this.fetchPromise:Promise.resolve()},A.prototype.minApisSupported=function(){return!!this.fetch&&typeof Promise!="undefined"&&typeof Map!="undefined"&&typeof Set!="undefined"},Ga(A),A.prototype.are_flags_ready=A.prototype.areFlagsReady,A.prototype.get_variant=A.prototype.getVariant,A.prototype.get_variant_sync=A.prototype.getVariantSync,A.prototype.get_all_variants=A.prototype.getAllVariants,A.prototype.get_all_variants_sync=A.prototype.getAllVariantsSync,A.prototype.get_variant_value=A.prototype.getVariantValue,A.prototype.get_variant_value_sync=A.prototype.getVariantValueSync,A.prototype.is_enabled=A.prototype.isEnabled,A.prototype.is_enabled_sync=A.prototype.isEnabledSync,A.prototype.load_flags=A.prototype.loadFlags,A.prototype.update_context=A.prototype.updateContext,A.prototype.when_ready=A.prototype.whenReady,A.prototype.get_feature_data=A.prototype.getFeatureData,A.prototype.getTargeting=A.prototype.getTargeting;var PC=nt("recorder"),Hp="mp_iframe_handshake_request",Kp="mp_iframe_handshake_response",xe=function(t){this.mixpanelInstance=t.mixpanelInstance,this.getMpConfig=t.getConfigFunc,this.getTabId=t.getTabIdFunc,this.reportError=t.reportErrorFunc,this.getDistinctId=t.getDistinctIdFunc,this.consentGate=t.consentGate,this.loadExtraBundle=t.loadExtraBundle,this.recorderSrc=t.recorderSrc,this.targetingSrc=t.targetingSrc,this.libBasePath=t.libBasePath,this._recorder=null,this._parentReplayId=null,this._parentFrameRetryInterval=null};xe.prototype.shouldLoadRecorder=function(){if(!this.consentGate.allowsPersistence())return $.log("Load recorder check skipped without persistence"),D.resolve(!1);var t=new Ue(Ha,Ka,Ya),n=this.getTabId();return t.init().then(function(){return t.getAll()}).then(function(i){for(var e=0;e0;if(r&&(this._setupParentFrameListener(e),C.parent!==C))return this._setupChildFrameListener(e,i),this._sendParentFrameRequestWithRetry(e),D.resolve();var s=h.isUndefined(n)?this.getMpConfig("record_sessions_percent"):n,o=s>0&&Math.random()*100<=s;return t||o?i(!0):this.shouldLoadRecorder().then(h.bind(function(a){return a?i(!1):D.resolve()},this))},xe.prototype.isRecording=function(){if(!this._recorder||!h.isFunction(this._recorder.isRecording))return!1;try{return this._recorder.isRecording()}catch(t){return this.reportError("Error checking if recording is active",t),!1}},xe.prototype.startRecordingOnEvent=function(t,n){var i=this.isRecording(),e=this.getMpConfig("recording_event_triggers");if(!i&&e){var r=e[t];if(r&&typeof r.percentage=="number"){var s=r.percentage,o=r.property_filters;if(o&&!h.isEmptyObject(o)){var a=this.targetingSrc||this.libBasePath+Nu;zp(this.loadExtraBundle,a).then(function(u){try{var c=u.eventMatchesCriteria(t,n,{event_name:t,property_filters:o});c.matches&&this.checkAndStartSessionRecording(!1,s)}catch(l){$.critical("Could not parse recording event trigger properties logic:",l)}}.bind(this)).catch(function(u){$.critical("Failed to load targeting library:",u)})}else this.checkAndStartSessionRecording(!1,s)}}},xe.prototype.stopSessionRecording=function(){return this._recorder?this._recorder.stopRecording():D.resolve()},xe.prototype.pauseSessionRecording=function(){return this._recorder?this._recorder.pauseRecording():D.resolve()},xe.prototype.resumeSessionRecording=function(){return this._recorder?this._recorder.resumeRecording():D.resolve()},xe.prototype.isRecordingHeatmapData=function(){return this.getSessionReplayId()&&this.getMpConfig("record_heatmap_data")},xe.prototype.getSessionRecordingProperties=function(){var t={},n=this.getSessionReplayId();return n&&(t.$mp_replay_id=n),t},xe.prototype.getSessionReplayUrl=function(){var t=null,n=this.getSessionReplayId();if(n){var i=h.HTTPBuildQuery({replay_id:n,distinct_id:this.getDistinctId(),token:this.getMpConfig("token")});t="https://mixpanel.com/projects/replay-redirect?"+i}return t},xe.prototype.getSessionReplayId=function(){if(this._parentReplayId)return this._parentReplayId;var t=null;return this._recorder&&(t=this._recorder.replayId),t||null},xe.prototype.getRecorder=function(){return this._recorder},xe.prototype._setupChildFrameListener=function(t,n){if(!this._childFrameMessageHandler){var i=this;this._childFrameMessageHandler=function(e){if(t.indexOf(e.origin)!==-1){var r=e.data;r&&r.type===Kp&&r.token===i.getMpConfig("token")&&r.replayId&&(i._parentReplayId=r.replayId,r.distinctId&&i.mixpanelInstance.identify(r.distinctId),i._parentFrameRetryActive=!1,C.removeEventListener("message",i._childFrameMessageHandler),i._childFrameMessageHandler=null,n(!0))}},C.addEventListener("message",this._childFrameMessageHandler)}},xe.prototype._sendParentFrameRequest=function(t){var n={};n.type=Hp,n.token=this.getMpConfig("token");for(var i=0;i=i||(n._sendParentFrameRequest(t),r*=2,s())},r)}s()},xe.prototype._setupParentFrameListener=function(t){if(!this._parentFrameMessageHandler){var n=this;this._parentFrameMessageHandler=function(i){if(t.indexOf(i.origin)!==-1){var e=i.data;if(e&&e.type===Hp&&e.token===n.getMpConfig("token")){var r=n.getSessionReplayId();if(r){var s={};s.type=Kp,s.token=n.getMpConfig("token"),s.replayId=r,s.distinctId=n.getDistinctId(),i.source.postMessage(s,i.origin)}}}},C.addEventListener("message",this._parentFrameMessageHandler)}},Ga(xe);var gt=function(){};gt.prototype.create_properties=function(){},gt.prototype.event_handler=function(){},gt.prototype.after_track_handler=function(){},gt.prototype.init=function(t){return this.mp=t,this},gt.prototype.track=function(t,n,i,e){var r=this,s=h.dom_query(t);if(s.length===0){$.error("The DOM query ("+t+") returned 0 elements");return}return h.each(s,function(o){h.register_event(o,this.override_event,function(a){var u={},c=r.create_properties(i,this),l=r.mp.get_config("track_links_timeout");r.event_handler(a,this,u),C.setTimeout(r.track_callback(e,c,u,!0),l),r.mp.track(n,c,r.track_callback(e,c,u))})},this),!0},gt.prototype.track_callback=function(t,n,i,e){e=e||!1;var r=this;return function(){i.callback_fired||(i.callback_fired=!0,!(t&&t(e,n)===!1)&&r.after_track_handler(n,i,e))}},gt.prototype.create_properties=function(t,n){var i;return typeof t=="function"?i=t(n):i=h.extend({},t),i};var $r=function(){this.override_event="click"};h.inherit($r,gt),$r.prototype.create_properties=function(t,n){var i=$r.superclass.create_properties.apply(this,arguments);return n.href&&(i.url=n.href),i},$r.prototype.event_handler=function(t,n,i){i.new_tab=t.which===2||t.metaKey||t.ctrlKey||n.target==="_blank",i.href=n.href,i.new_tab||t.preventDefault()},$r.prototype.after_track_handler=function(t,n){n.new_tab||!n.href||setTimeout(function(){C.location=n.href},0)};var bs=function(){this.override_event="submit"};h.inherit(bs,gt),bs.prototype.event_handler=function(t,n,i){i.element=n,t.preventDefault()},bs.prototype.after_track_handler=function(t,n){setTimeout(function(){n.element.submit()},0)};var Ft="$set",Nr="$set_once",Ye="$unset",Zt="$add",at="$append",Qt="$union",mt="$remove",$C="$delete",Yp={set_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[Ft]=e,i},unset_action:function(t){var n={},i=[];return h.isArray(t)||(t=[t]),h.each(t,function(e){this._is_reserved_property(e)||i.push(e)},this),n[Ye]=i,n},set_once_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[Nr]=e,i},union_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=h.isArray(r)?r:[r])},this):e[t]=h.isArray(n)?n:[n],i[Qt]=e,i},append_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[at]=e,i},remove_action:function(t,n){var i={},e={};return h.isObject(t)?h.each(t,function(r,s){this._is_reserved_property(s)||(e[s]=r)},this):e[t]=n,i[mt]=e,i},delete_action:function(){var t={};return t[$C]="",t}};function Te(){}h.extend(Te.prototype,Yp),Te.prototype._init=function(t,n,i,e){this._mixpanel=t,this._group_key=n,this._group_id=i,this.consentGate=e},Te.prototype.set=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.set_action(t,n);return this._send_request(e,i)},Te.prototype.set_once=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.set_once_action(t,n);return this._send_request(e,i)},Te.prototype.unset=function(t,n){if(!this.consentGate.allowsApiCalls()){h.isFunction(n)&&n(0);return}var i=this.unset_action(t);return this._send_request(i,n)},Te.prototype.union=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.union_action(t,n);return this._send_request(e,i)},Te.prototype.delete=function(t){if(!this.consentGate.allowsApiCalls()){h.isFunction(t)&&t(0);return}var n=this.delete_action();return this._send_request(n,t)},Te.prototype.remove=function(t,n,i){if(!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.remove_action(t,n);return this._send_request(e,i)},Te.prototype._send_request=function(t,n){t.$group_key=this._group_key,t.$group_id=this._group_id,t.$token=this._get_config("token");var i=h.encodeDates(t);return this._mixpanel._track_or_batch({type:"groups",data:i,endpoint:this._mixpanel.get_api_host("groups")+"/"+this._get_config("api_routes").groups,batcher:this._mixpanel.request_batchers.groups},n)},Te.prototype._is_reserved_property=function(t){return t==="$group_key"||t==="$group_id"},Te.prototype._get_config=function(t){return this._mixpanel.get_config(t)},Te.prototype.toString=function(){return this._mixpanel.toString()+".group."+this._group_key+"."+this._group_id};var ut=Te.prototype;ut.remove=ut.remove,ut.set=ut.set,ut.set_once=ut.set_once,ut.union=ut.union,ut.unset=ut.unset,Te.prototype.toString=Te.prototype.toString;function he(){}h.extend(he.prototype,Yp),he.prototype._init=function(t,n){this._mixpanel=t,this.consentGate=n},he.prototype.set=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.set_action(t,n);return this._get_config("save_referrer")&&this._mixpanel.persistence.update_referrer_info(document.referrer),e[Ft]=h.extend({},h.info.people_properties(),e[Ft]),this._send_request(e,i)},he.prototype.set_once=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.set_once_action(t,n);return this._send_request(e,i)},he.prototype.unset=function(t,n){if(!this.consentGate.allowsApiCalls()){h.isFunction(n)&&n(0);return}var i=this.unset_action(t);return this._send_request(i,n)},he.prototype.increment=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e={},r={};return h.isObject(t)?h.each(t,function(s,o){if(!this._is_reserved_property(o))if(isNaN(parseFloat(s))){$.error("Invalid increment value passed to mixpanel.people.increment - must be a number");return}else r[o]=s},this):(h.isUndefined(n)&&(n=1),r[t]=n),e[Zt]=r,this._send_request(e,i)},he.prototype.append=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.append_action(t,n);return this._send_request(e,i)},he.prototype.remove=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.remove_action(t,n);return this._send_request(e,i)},he.prototype.union=function(t,n,i){if(h.isObject(t)&&(i=n),!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}var e=this.union_action(t,n);return this._send_request(e,i)},he.prototype.track_charge=function(t,n,i){if(!this.consentGate.allowsApiCalls()){h.isFunction(i)&&i(0);return}$.error("mixpanel.people.track_charge() is deprecated and no longer has any effect.")},he.prototype.clear_charges=function(t){return this.set("$transactions",[],t)},he.prototype.delete_user=function(){if(!this._identify_called()){$.error("mixpanel.people.delete_user() requires you to call identify() first");return}var t={$delete:this._mixpanel.get_distinct_id()};return this._send_request(t)},he.prototype.toString=function(){return this._mixpanel.toString()+".people"},he.prototype._send_request=function(t,n){t.$token=this._get_config("token"),t.$distinct_id=this._mixpanel.get_distinct_id();var i=this._mixpanel.get_property("$device_id"),e=this._mixpanel.get_property("$user_id"),r=this._mixpanel.get_property("$had_persisted_distinct_id");i&&(t.$device_id=i),e&&(t.$user_id=e),r&&(t.$had_persisted_distinct_id=r);var s=h.encodeDates(t);return this._identify_called()?this._mixpanel._track_or_batch({type:"people",data:s,endpoint:this._mixpanel.get_api_host("people")+"/"+this._get_config("api_routes").engage,batcher:this._mixpanel.request_batchers.people},n):(this._enqueue(s),h.isUndefined(n)||(this._get_config("verbose")?n({status:-1,error:null}):n(-1)),h.truncate(s,255))},he.prototype._get_config=function(t){return this._mixpanel.get_config(t)},he.prototype._identify_called=function(){return this._mixpanel._flags.identify_called===!0},he.prototype._enqueue=function(t){Ft in t?this._mixpanel.persistence._add_to_people_queue(Ft,t):Nr in t?this._mixpanel.persistence._add_to_people_queue(Nr,t):Ye in t?this._mixpanel.persistence._add_to_people_queue(Ye,t):Zt in t?this._mixpanel.persistence._add_to_people_queue(Zt,t):at in t?this._mixpanel.persistence._add_to_people_queue(at,t):mt in t?this._mixpanel.persistence._add_to_people_queue(mt,t):Qt in t?this._mixpanel.persistence._add_to_people_queue(Qt,t):$.error("Invalid call to _enqueue():",t)},he.prototype._flush_one_queue=function(t,n,i,e){var r=this,s=h.extend({},this._mixpanel.persistence.load_queue(t)),o=s;!h.isUndefined(s)&&h.isObject(s)&&!h.isEmptyObject(s)&&(r._mixpanel.persistence._pop_from_people_queue(t,s),r._mixpanel.persistence.save(),e&&(o=e(s)),n.call(r,o,function(a,u){a===0&&r._mixpanel.persistence._add_to_people_queue(t,s),h.isUndefined(i)||i(a,u)}))},he.prototype._flush=function(t,n,i,e,r,s,o){var a=this;this._flush_one_queue(Ft,this.set,t),this._flush_one_queue(Nr,this.set_once,e),this._flush_one_queue(Ye,this.unset,s,function(d){return h.keys(d)}),this._flush_one_queue(Zt,this.increment,n),this._flush_one_queue(Qt,this.union,r);var u=this._mixpanel.persistence.load_queue(at);if(!h.isUndefined(u)&&h.isArray(u)&&u.length)for(var c,l=function(d,y){d===0&&a._mixpanel.persistence._add_to_people_queue(at,c),h.isUndefined(i)||i(d,y)},f=u.length-1;f>=0;f--)u=this._mixpanel.persistence.load_queue(at),c=u.pop(),a._mixpanel.persistence.save(),h.isEmptyObject(c)||a.append(c,l);var p=this._mixpanel.persistence.load_queue(mt);if(!h.isUndefined(p)&&h.isArray(p)&&p.length)for(var g,v=function(d,y){d===0&&a._mixpanel.persistence._add_to_people_queue(mt,g),h.isUndefined(o)||o(d,y)},m=p.length-1;m>=0;m--)p=this._mixpanel.persistence.load_queue(mt),g=p.pop(),a._mixpanel.persistence.save(),h.isEmptyObject(g)||a.remove(g,v)},he.prototype._is_reserved_property=function(t){return t==="$distinct_id"||t==="$token"||t==="$device_id"||t==="$user_id"||t==="$had_persisted_distinct_id"};var Ie=he.prototype;Ie.set=Ie.set,Ie.set_once=Ie.set_once,Ie.unset=Ie.unset,Ie.increment=Ie.increment,Ie.append=Ie.append,Ie.remove=Ie.remove,Ie.union=Ie.union,Ie.track_charge=Ie.track_charge,Ie.clear_charges=Ie.clear_charges,Ie.delete_user=Ie.delete_user,he.prototype.toString=he.prototype.toString;var vu="__mps",gu="__mpso",mu="__mpus",yu="__mpa",_u="__mpap",wu="__mpr",bu="__mpu",Jp="$people_distinct_id",Ss="__alias",kn="__timers",NC=[vu,gu,mu,yu,_u,wu,bu,Jp,Ss,kn],Su={parse:function(){return null},set:function(){}},q=function(t,n){this.props={},this.campaign_params_saved=!1,t.persistence_name?this.name="mp_"+t.persistence_name:this.name="mp_"+t.token+"_mixpanel";var i=t.persistence;i!=="cookie"&&i!=="localStorage"&&($.critical("Unknown persistence type "+i+"; falling back to cookie"),t.persistence="cookie"),this.storage_type=t.persistence,this.closed=!0,this.storage=Su,this.update_config(t),n&&n.closed||this.open()};q.prototype._choose_backend=function(){this.storage_type==="localStorage"&&h.localStorage.is_supported()?this.backend=h.localStorage:this.backend=h.cookie,this.storage=this.backend},q.prototype.properties=function(){var t={};return this.load(),h.each(this.props,function(n,i){h.include(NC,i)||(t[i]=n)}),t},q.prototype.load=function(){var t=this.storage.parse(this.name);t&&(this.props=h.extend({},t))},q.prototype.upgrade=function(){var t,n;this.backend===h.localStorage?(t=h.cookie.parse(this.name),h.cookie.remove(this.name),h.cookie.remove(this.name,!0),t&&this.register_once(t)):this.backend===h.cookie&&(n=h.localStorage.parse(this.name),h.localStorage.remove(this.name),n&&this.register_once(n))},q.prototype.save=function(){this.storage.set(this.name,Ar(this.props),this.expire_days,this.cross_subdomain,this.secure,this.cross_site,this.cookie_domain)},q.prototype.load_prop=function(t){return this.load(),this.props[t]},q.prototype.remove=function(){this.backend&&(this.backend.remove(this.name,!1,this.cookie_domain),this.backend.remove(this.name,!0,this.cookie_domain))},q.prototype.clear=function(){this.remove(),this.props={}},q.prototype.register_once=function(t,n,i){return h.isObject(t)?(typeof n=="undefined"&&(n="None"),this.expire_days=typeof i=="undefined"?this.default_expiry:i,this.load(),h.each(t,function(e,r){(!this.props.hasOwnProperty(r)||this.props[r]===n)&&(this.props[r]=e)},this),this.save(),!0):!1},q.prototype.register=function(t,n){return h.isObject(t)?(this.expire_days=typeof n=="undefined"?this.default_expiry:n,this.load(),h.extend(this.props,t),this.save(),!0):!1},q.prototype.unregister=function(t){this.load(),t in this.props&&(delete this.props[t],this.save())},q.prototype.update_search_keyword=function(t){this.register(h.info.searchInfo(t))},q.prototype.update_referrer_info=function(t){this.register_once({$initial_referrer:t||"$direct",$initial_referring_domain:h.info.referringDomain(t)||"$direct"},"")},q.prototype.get_referrer_info=function(){return h.strip_empty_properties({$initial_referrer:this.props.$initial_referrer,$initial_referring_domain:this.props.$initial_referring_domain})},q.prototype.update_config=function(t){this.default_expiry=this.expire_days=t.cookie_expiration,this.set_disabled(t.disable_persistence),this.set_cookie_domain(t.cookie_domain),this.set_cross_site(t.cross_site_cookie),this.set_cross_subdomain(t.cross_subdomain_cookie),this.set_secure(t.secure_cookie)},q.prototype.set_disabled=function(t){this.disabled=t,this._update_storage()},q.prototype.close=function(){this.closed||(this.closed=!0,this._update_storage())},q.prototype.open=function(){if(this.closed){if(this.closed=!1,!this.backend){var t=this.props;this.props={},this._choose_backend(),this.load(),h.extend(this.props,t),this.storage=Su,this.upgrade(),this.remove_stored_entry()}this._update_storage()}},q.prototype.remove_stored_entry=function(){h.cookie.remove(this.name),h.cookie.remove(this.name,!0),this.cookie_domain&&h.cookie.remove(this.name,!1,this.cookie_domain),h.localStorage.remove(this.name)},q.prototype._update_storage=function(){this.disabled||this.closed?(this.storage=Su,this.remove()):(this.storage=this.backend,this.save())},q.prototype.set_cookie_domain=function(t){t!==this.cookie_domain&&(this.remove(),this.cookie_domain=t,this.save())},q.prototype.set_cross_site=function(t){t!==this.cross_site&&(this.cross_site=t,this.remove(),this.save())},q.prototype.set_cross_subdomain=function(t){t!==this.cross_subdomain&&(this.cross_subdomain=t,this.remove(),this.save())},q.prototype.get_cross_subdomain=function(){return this.cross_subdomain},q.prototype.set_secure=function(t){t!==this.secure&&(this.secure=!!t,this.remove(),this.save())},q.prototype._add_to_people_queue=function(t,n){var i=this._get_queue_key(t),e=n[t],r=this._get_or_create_queue(Ft),s=this._get_or_create_queue(Nr),o=this._get_or_create_queue(Ye),a=this._get_or_create_queue(Zt),u=this._get_or_create_queue(Qt),c=this._get_or_create_queue(mt,[]),l=this._get_or_create_queue(at,[]);i===vu?(h.extend(r,e),this._pop_from_people_queue(Zt,e),this._pop_from_people_queue(Qt,e),this._pop_from_people_queue(Ye,e)):i===gu?(h.each(e,function(f,p){p in s||(s[p]=f)}),this._pop_from_people_queue(Ye,e)):i===mu?h.each(e,function(f){h.each([r,s,a,u],function(p){f in p&&delete p[f]}),h.each(l,function(p){f in p&&delete p[f]}),o[f]=!0}):i===yu?(h.each(e,function(f,p){p in r?r[p]+=f:(p in a||(a[p]=0),a[p]+=f)},this),this._pop_from_people_queue(Ye,e)):i===bu?(h.each(e,function(f,p){h.isArray(f)&&(p in u||(u[p]=[]),h.each(f,function(g){h.include(u[p],g)||u[p].push(g)}))}),this._pop_from_people_queue(Ye,e)):i===wu?(c.push(e),this._pop_from_people_queue(at,e)):i===_u&&(l.push(e),this._pop_from_people_queue(Ye,e)),$.log("MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):"),$.log(n),this.save()},q.prototype._pop_from_people_queue=function(t,n){var i=this.props[this._get_queue_key(t)];h.isUndefined(i)||h.each(n,function(e,r){t===at||t===mt?h.each(i,function(s){s[r]===e&&delete s[r]}):delete i[r]},this)},q.prototype.load_queue=function(t){return this.load_prop(this._get_queue_key(t))},q.prototype._get_queue_key=function(t){if(t===Ft)return vu;if(t===Nr)return gu;if(t===Ye)return mu;if(t===Zt)return yu;if(t===at)return _u;if(t===mt)return wu;if(t===Qt)return bu;$.error("Invalid queue:",t)},q.prototype._get_or_create_queue=function(t,n){var i=this._get_queue_key(t);return n=h.isUndefined(n)?{}:n,this.props[i]||(this.props[i]=n)},q.prototype.set_event_timer=function(t,n){var i=this.load_prop(kn)||{};i[t]=n,this.props[kn]=i,this.save()},q.prototype.remove_event_timer=function(t){var n=this.load_prop(kn)||{},i=n[t];return h.isUndefined(i)||(delete this.props[kn][t],this.save()),i};var Xp="no_consent_required",Zp="require_consent",LC=["api_calls","send","fetch","store"],Qp="none",Cs="opted_in",Rn="opted_out",Es="objected",Cu="full",ed="api_calls_stopped",Eu="blocked",Is={full:{api_calls:!0,send:!0,fetch:!0,store:!0},api_calls_stopped:{api_calls:!1,send:!0,fetch:!0,store:!0},blocked:{api_calls:!1,send:!1,fetch:!1,store:!1}},An={no_consent_required:{none:Cu,opted_in:Cu,opted_out:ed,objected:ed},require_consent:{none:Eu,opted_in:Cu,opted_out:Eu,objected:Eu}};function DC(t){return t?An.hasOwnProperty(t)?t:($.critical("Unknown consent_mode "+t+"; using '"+Zp+"'"),Zp):Xp}function td(t,n){return t?($.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'),Es):n==="1"?Cs:n==="0"?($.warn("You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data."),Rn):Qp}var rd="__mp_opt_in_out_";function FC(t,n){id(!0,t,n)}function UC(t,n){id(!1,t,n)}function BC(t,n,i){if(n!=="localStorage")return n;var e=kr(Rr())?"localStorage":"cookie",r=nd(t,{persistenceType:e,persistencePrefix:i})!==null;return r?e:e==="localStorage"?"cookie":"localStorage"}function qC(t,n){n=n||{},Iu(n).remove(Ou(t,n),!!n.crossSubdomainCookie,n.cookieDomain)}function Iu(t){return t=t||{},t.persistenceType==="localStorage"?h.localStorage:h.cookie}function Ou(t,n){return n=n||{},(n.persistencePrefix||rd)+t}function nd(t,n){return Iu(n).get(Ou(t,n))}function xu(t,n){return n=h.extend({ignore_dnt:t("ignore_dnt")},n),zC({ignoreDnt:n.ignore_dnt,window:t("window")})}function zC(t){if(t&&t.ignoreDnt)return!1;var n=t&&t.window||C,i=n.navigator||{},e=!1;return h.each([i.doNotTrack,i.msDoNotTrack,n.doNotTrack],function(r){h.includes([!0,1,"1","yes"],r)&&(e=!0)}),e}function id(t,n,i){if(!h.isString(n)||!n.length){$.error("gdpr."+(t?"optIn":"optOut")+" called with an invalid token");return}i=i||{},Iu(i).set(Ou(n,i),t?1:0,h.isNumber(i.cookieExpiration)?i.cookieExpiration:null,!!i.crossSubdomainCookie,!!i.secureCookie,!!i.crossSiteCookie,i.cookieDomain),i.track&&t&&i.track(i.trackEventName||"$opt_in",i.trackProperties,{send_immediately:!0})}var Be=function(t,n){this.mode=t,this.getConfig=n.getConfigFunc,this.track=n.trackFunc,this.setPersistenceDisabled=n.setPersistenceDisabledFunc,this.deleteUser=n.deleteUserFunc};Be.prototype.init=function(){var t=this.getConfig("opt_out_tracking_persistence_type")==="localStorage";t&&h.localStorage.is_supported()&&(!this.hasOptedIn({persistence_type:"localStorage"})&&this.hasOptedIn({persistence_type:"cookie"})&&this.optIn({enable_persistence:!1}),!this.hasOptedOut({persistence_type:"localStorage"})&&this.hasOptedOut({persistence_type:"cookie"})&&this.optOut({clear_persistence:!1}),this.clear({persistence_type:"cookie",enable_persistence:!1})),this.hasOptedOut()?this._updatePersistence({clear_persistence:!0}):!this.hasOptedIn()&&(this._optsOutByDefault()||h.cookie.get("mp_optout"))&&(h.cookie.remove("mp_optout"),this.optOut({clear_persistence:this.getConfig("opt_out_persistence_by_default")}))},Be.prototype._optsOutByDefault=function(){return!this.getConfig("consent_mode")&&!!this.getConfig("opt_out_tracking_by_default")},Be.prototype.state=function(){return An[this.mode][this._readDecision()]},Be.prototype.hasOptedIn=function(t){return this._readFlag(t)==="1"},Be.prototype.hasOptedOut=function(t){var n=this._readDecision(t);return n===Rn||n===Es},Be.prototype.optIn=function(t){t=h.extend({enable_persistence:!0},t),this._writeFlag(FC,t),this._updatePersistence(t)},Be.prototype.optOut=function(t){t=h.extend({clear_persistence:!0,delete_user:!0},t),t.delete_user&&this.deleteUser(),this._writeFlag(UC,t),this._updatePersistence(t)},Be.prototype.clear=function(t){t=h.extend({enable_persistence:!0},t),this._writeFlag(qC,t),this._updatePersistence(t)},Be.prototype._updatePersistence=function(t){t.clear_persistence?this.setPersistenceDisabled(!0):t.enable_persistence&&this.setPersistenceDisabled(!1)},Be.prototype._writeFlag=function(t,n){var i=this.getConfig;n=h.extend({track:this.track,persistence_type:i("opt_out_tracking_persistence_type"),cookie_prefix:i("opt_out_tracking_cookie_prefix"),cookie_expiration:i("cookie_expiration"),cross_site_cookie:i("cross_site_cookie"),cross_subdomain_cookie:i("cross_subdomain_cookie"),cookie_domain:i("cookie_domain"),secure_cookie:i("secure_cookie")},n),h.localStorage.is_supported()||(n.persistence_type="cookie"),t(i("token"),{track:n.track,trackEventName:n.track_event_name,trackProperties:n.track_properties,persistenceType:n.persistence_type,persistencePrefix:n.cookie_prefix,cookieDomain:n.cookie_domain,cookieExpiration:n.cookie_expiration,crossSiteCookie:n.cross_site_cookie,crossSubdomainCookie:n.cross_subdomain_cookie,secureCookie:n.secure_cookie})},Be.prototype._readDecision=function(t){return td(xu(this.getConfig,t),this._readFlag(t))},Be.prototype._readFlag=function(t){t=h.extend({cookie_prefix:this.getConfig("opt_out_tracking_cookie_prefix")},t);var n=this.getConfig("token"),i=t.persistence_type;return i?h.localStorage.is_supported()||(i="cookie"):i=BC(n,this.getConfig("opt_out_tracking_persistence_type"),t.cookie_prefix),nd(n,{persistenceType:i,persistencePrefix:t.cookie_prefix})};var ke=function(t,n){this.mode=t,this.getConfig=n.getConfigFunc,this.track=n.trackFunc,this.startTracking=n.startTrackingFunc,this.stopTracking=n.stopTrackingFunc,this.purgeIdentifiers=n.purgeIdentifiersFunc,this.appliedState=null};ke.prototype.init=function(){this._reconcile()},ke.prototype.state=function(){return this.appliedState===null&&(this.appliedState=An[this.mode][this._readDecision()]),this.appliedState},ke.prototype.hasOptedIn=function(){return this._readFlag()==="1"},ke.prototype.hasOptedOut=function(t){var n=this._readDecision(t);return n===Rn||n===Es},ke.prototype.optIn=function(t){this._decide(Cs,t)},ke.prototype.optOut=function(){this._decide(Rn)},ke.prototype.clear=function(){this._decide(Qp)},ke.prototype._decide=function(t,n){n=n||{};var i=this._allowsStore();this._writeDecision(t),this.appliedState=An[this.mode][xu(this.getConfig)?Es:t];var e=this._allowsStore();i&&!e&&this.stopTracking(),this._reconcile(),!i&&e&&this.startTracking();var r=h.isUndefined(n.track)?this.track:n.track;t===Cs&&e&&r&&r(n.track_event_name||"$opt_in",n.track_properties,{send_immediately:!0})},ke.prototype._allowsStore=function(){return Is[this.state()].store===!0},ke.prototype._reconcile=function(){this._allowsStore()||this.purgeIdentifiers()},ke.prototype._writeDecision=function(t){var n=null;t===Cs?n="1":t===Rn&&(n="0"),this._readFlag()!==n&&this._writeDecisionKey(this._decisionKey(),n)},ke.prototype._writeDecisionKey=function(t,n){var i=this.getConfig,e=i("cookie_domain");h.cookie.remove(t),h.cookie.remove(t,!0),e&&h.cookie.remove(t,!1,e),this._decisionInLocalStorage()?n===null?h.localStorage.remove(t):h.localStorage.set(t,n):n!==null&&h.cookie.set(t,n,i("cookie_expiration"),i("cross_subdomain_cookie"),i("secure_cookie"),i("cross_site_cookie"),e)},ke.prototype._decisionInLocalStorage=function(){return this.getConfig("persistence")==="localStorage"&&!!Rr()},ke.prototype._decisionStore=function(){return this._decisionInLocalStorage()?h.localStorage:h.cookie},ke.prototype._decisionKey=function(){return(this.getConfig("opt_out_tracking_cookie_prefix")||rd)+this.getConfig("token")},ke.prototype._readDecision=function(t){return td(xu(this.getConfig,t),this._readFlag())},ke.prototype._readFlag=function(){return this._decisionStore().get(this._decisionKey())};function GC(t){var n=h.values(An[t]),i={};return h.each(LC,function(e){var r=Is[n[0]][e],s=!0;h.each(n,function(o){s=s&&Is[o][e]===r}),s&&(i[e]=r)}),i}var Je=function(t){this.getConfig=t.getConfigFunc,this.mode=DC(t.getConfigFunc("consent_mode")),this.fixedAnswers=GC(this.mode),this.decisions=this.mode===Xp?new Be(this.mode,t):new ke(this.mode,t),h.extend(this,Ep(h.bind(this.allows,this),this.getConfig)),this.heldIdentify=null};Je.prototype.allows=function(t){return this.fixedAnswers.hasOwnProperty(t)?this.fixedAnswers[t]:Is[this.state()][t]},Je.prototype.state=function(){return this.decisions.state()},Je.prototype.holdIdentify=function(t){this.heldIdentify=t},Je.prototype.takeHeldIdentify=function(){var t=this.heldIdentify;return this.heldIdentify=null,t},Je.prototype.init=function(){this.decisions.init()},Je.prototype.hasOptedIn=function(t){return this.decisions.hasOptedIn(t)},Je.prototype.hasOptedOut=function(t){return this.decisions.hasOptedOut(t)},Je.prototype.optIn=function(t){this.decisions.optIn(t)},Je.prototype.optOut=function(t){this.decisions.optOut(t)},Je.prototype.clear=function(t){this.decisions.clear(t)};var Os,ku=function(t,n){throw new Error(t+" not available in this build.")},be,sd=0,od=1,qe="mixpanel",ad="base64",WC="json",ud="$device:",VC="strict",jC="fallback",HC="disabled",Lr=C.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest,cd=!Lr&&rt.indexOf("MSIE")===-1&&rt.indexOf("Mozilla")===-1,xs=null;dt.sendBeacon&&(xs=function(){return dt.sendBeacon.apply(dt,arguments)});var ld={track:"track/",engage:"engage/",groups:"groups/",record:"record/",flags:"flags/",settings:"settings/"},Ru={api_host:"https://api-js.mixpanel.com",api_hosts:{},api_routes:ld,api_extra_query_params:{},api_method:"POST",api_transport:"XHR",api_payload_format:ad,app_host:"https://mixpanel.com",autocapture:!1,cdn:"https://cdn.mxpnl.com",cross_site_cookie:!1,cross_subdomain_cookie:!0,error_reporter:Mt,flags:!1,persistence:"cookie",persistence_name:"",cookie_domain:"",cookie_name:"",loaded:Mt,mp_loader:null,track_marketing:!0,track_pageview:!1,skip_first_touch_marketing:!1,store_google:!0,stop_utm_persistence:!1,save_referrer:!0,test:!1,verbose:!1,img:!1,debug:!1,track_links_timeout:300,cookie_expiration:365,upgrade:!1,disable_persistence:!1,disable_cookie:!1,secure_cookie:!1,ip:!0,opt_out_tracking_by_default:!1,opt_out_persistence_by_default:!1,opt_out_tracking_persistence_type:"localStorage",opt_out_tracking_cookie_prefix:null,consent_mode:null,property_blacklist:[],xhr_headers:{},ignore_dnt:!1,batch_requests:!0,batch_size:50,batch_flush_interval_ms:5e3,batch_request_timeout_ms:9e4,batch_autostart:!0,hooks:{},record_allowed_iframe_origins:[],record_block_class:new RegExp("^(mp-block|fs-exclude|amp-block|rr-block|ph-no-capture)$"),record_block_selector:"img, video, audio",record_canvas:!1,record_collect_fonts:!1,record_console:!0,record_heatmap_data:!1,recording_event_triggers:{},record_idle_timeout_ms:1800*1e3,record_mask_inputs:!0,record_max_ms:wn,record_min_ms:0,record_network:!1,record_network_options:{},record_sessions_percent:0,recorder_src:null,targeting_src:null,lib_base_path:"https://cdn.mxpnl.com/libs/",remote_settings_mode:HC},fd=!1;function x(){}var ks=function(t,n,i){var e,r=i===qe?be:be[i];if(r&&Os===sd)e=r;else{if(r&&!h.isArray(r)){$.error("You have already initialized "+i);return}e=new x}e._cached_groups={},e._init(t,n,i),e.people=new he,e.people._init(e,e._consent),e._set_first_touch_people_properties(),Le.DEBUG=Le.DEBUG||e.get_config("debug");var s=Os===sd?"module":"snippet";return C.dispatchEvent(new C.CustomEvent("$mp_sdk_to_extension_event",{detail:{instance:e,source:s,token:t,name:i,info:h.info}})),!h.isUndefined(r)&&h.isArray(r)&&(e._execute_array.call(e.people,r.people),e._execute_array(r)),e};x.prototype.init=function(t,n,i){if(h.isUndefined(i)){this.report_error("You must name your new library: init(token, config, name)");return}if(i===qe){this.report_error("You must initialize the main mixpanel object right after you include the Mixpanel js snippet");return}var e=ks(t,n,i);return be[i]=e,e._loaded(),e},x.prototype._init=function(t,n,i){n=n||{},this.__loaded=!0,this.config={};var e={};if(!("api_payload_format"in n)){var r=n.api_host||Ru.api_host;r.match(/\.mixpanel\.com/)&&(e.api_payload_format=WC)}this.hooks={},this.set_config(h.extend({},Ru,e,n,{name:i,token:t,callback_fn:(i===qe?i:qe+"."+i)+"._jsc"})),this._consent=new Je({getConfigFunc:h.bind(this.get_config,this),trackFunc:h.bind(function(){return this.track.apply(this,arguments)},this),setPersistenceDisabledFunc:h.bind(this._set_persistence_disabled,this),deleteUserFunc:h.bind(this._delete_user_for_opt_out,this),startTrackingFunc:h.bind(this._start_tracking,this),stopTrackingFunc:h.bind(this._stop_tracking,this),purgeIdentifiersFunc:h.bind(this._purge_stored_identifiers,this)}),this.recorderManager=new xe({mixpanelInstance:this,getConfigFunc:h.bind(this.get_config,this),setConfigFunc:h.bind(this.set_config,this),getTabIdFunc:h.bind(this.get_tab_id,this),reportErrorFunc:h.bind(this.report_error,this),getDistinctIdFunc:h.bind(this.get_distinct_id,this),consentGate:this._consent,recorderSrc:this.get_config("recorder_src"),targetingSrc:this.get_config("targeting_src"),libBasePath:this.get_config("lib_base_path"),loadExtraBundle:ku}),this._jsc=Mt,this.__dom_loaded_queue=[],this.__request_queue=[],this.__disabled_events=[],this._flags={disable_all_events:!1,identify_called:!1},this._remote_settings_strict_disabled=!1,this.request_batchers={};var s=this._consent.allowsStoring();s&&this._init_batching(),this.persistence=this.cookie=new q(this.config,{closed:!s}),this.unpersisted_superprops={},this.flags=new A({getFullApiRoute:h.bind(function(){return this.get_api_host("flags")+"/"+this.get_config("api_routes").flags},this),getConfigFunc:h.bind(this.get_config,this),setConfigFunc:h.bind(this.set_config,this),getPropertyFunc:h.bind(this.get_property,this),trackingFunc:h.bind(this.track,this),consentGate:this._consent,loadExtraBundle:ku,targetingSrc:this.get_config("targeting_src")||this.get_config("lib_base_path")+Nu}),this.flags=this.flags,this._consent.init(),s&&this._start_services(),this.autocapture=new we(this),this.autocapture.init()},x.prototype._set_first_touch_people_properties=function(){if(!this.get_config("skip_first_touch_marketing")){var t=h.info.campaignParams(null),n={},i=!1;h.each(t,function(e,r){n["initial_"+r]=e,e&&(i=!0)}),i&&this.people.set_once(n)}},x.prototype._start_services=function(){this.get_distinct_id()||this._init_device_id(),this.flags.init(),this._init_tab_id();var t=this.get_config("remote_settings_mode");t===VC||t===jC?this.__session_recording_init_promise=this._fetch_remote_settings(t).then(h.bind(function(){return this._check_and_start_session_recording()},this)):this.__session_recording_init_promise=this._check_and_start_session_recording()},x.prototype._start_tracking=function(){this._batch_requests||this._init_batching(),this.persistence.open(),this._start_services();var t=this._consent.takeHeldIdentify();t&&this.identify.apply(this,t),this._set_first_touch_people_properties(),this.people.set_once(this.persistence.get_referrer_info())},x.prototype._stop_tracking=function(){this.stop_batch_senders(),this.flags.reset(),this.persistence.close(),this.recorderManager.stopSessionRecording()},x.prototype._purge_stored_identifiers=function(){this.persistence.remove_stored_entry(),h.each(this.get_batcher_configs(),function(t){h.localStorage.remove(t.queue_key)}),this._remove_tab_id(),this.flags.clearPersistedVariants()},x.prototype._remove_tab_id=function(){this.tab_id=null;var t=this._tab_id_key_suffix();h.sessionStorage.remove("mp_tab_id_"+t),h.sessionStorage.remove("mp_gen_new_tab_id_"+t)},x.prototype._init_batching=function(){if(this._batch_requests=this.get_config("batch_requests"),!!this._batch_requests){if(!h.localStorage.is_supported(!0)||!Lr){this._batch_requests=!1,$.log("Turning off Mixpanel request-queueing; needs XHR and localStorage support"),h.each(this.get_batcher_configs(),function(e){$.log("Clearing batch queue "+e.queue_key),h.localStorage.remove(e.queue_key)});return}if(!this.are_batchers_initialized()){var t=h.bind(function(e){return new We(e.queue_key,{libConfig:this.config,errorReporter:this.get_config("error_reporter"),sendRequestFunc:h.bind(function(r,s,o){var a=this.get_config("api_routes");this._send_request(this.get_api_host(e.api_name)+"/"+a[e.api_name],this._encode_data_for_request(r),s,this._prepare_callback(o,r))},this),beforeSendHook:h.bind(function(r){var s=this._run_hook("before_send_"+e.type,r);return s?s[0]:null},this),stopAllBatchingFunc:h.bind(this.stop_batch_senders,this),usePersistence:!0,consentGate:this._consent})},this),n=this.get_batcher_configs();if(this.request_batchers={events:t(n.events),people:t(n.people),groups:t(n.groups)},xs&&C.addEventListener){var i=h.bind(function(){this.request_batchers.events.stopped||this.request_batchers.events.flush({unloading:!0})},this);C.addEventListener("pagehide",function(e){e.persisted&&i()}),C.addEventListener("visibilitychange",function(){B.visibilityState==="hidden"&&i()})}}(this.get_config("batch_autostart")||this._batchers_were_started)&&this.start_batch_senders()}},x.prototype._init_device_id=function(){var t=h.UUID();this.register_once({distinct_id:ud+t,$device_id:t},"")},x.prototype._tab_id_key_suffix=function(){return this.get_config("name")+"_"+this.get_config("token")},x.prototype._init_tab_id=function(){if(!this._consent.allowsPersistence())$.log("Tab ID initialization skipped without persistence");else if(h.sessionStorage.is_supported())try{var t=this._tab_id_key_suffix(),n="mp_tab_id_"+t,i="mp_gen_new_tab_id_"+t;(h.sessionStorage.get(i)||!h.sessionStorage.get(n))&&h.sessionStorage.set(n,"$tab-"+h.UUID()),h.sessionStorage.set(i,"1"),this.tab_id=h.sessionStorage.get(n),C.addEventListener("beforeunload",function(){h.sessionStorage.remove(i)})}catch(e){this.report_error("Error initializing tab id",e)}else this.report_error("Session storage is not supported, cannot keep track of unique tab ID.")},x.prototype.get_tab_id=function(){return this.tab_id||null},x.prototype._check_and_start_session_recording=function(t){if(this._consent.allowsApiCalls())return this.recorderManager.checkAndStartSessionRecording(t)},x.prototype._start_recording_on_event=Yt(function(t,n){this.__session_recording_init_promise&&this.__session_recording_init_promise.then(h.bind(function(){if(!this._remote_settings_strict_disabled)return this.recorderManager.startRecordingOnEvent(t,n)},this))}),x.prototype.start_session_recording=function(){return this._check_and_start_session_recording(!0)},x.prototype.stop_session_recording=function(){return this.recorderManager.stopSessionRecording()},x.prototype.pause_session_recording=function(){return this.recorderManager.pauseSessionRecording()},x.prototype.resume_session_recording=function(){return this.recorderManager.resumeSessionRecording()},x.prototype.is_recording_heatmap_data=function(){return this.recorderManager.isRecordingHeatmapData()},x.prototype.get_session_recording_properties=function(){return this.recorderManager.getSessionRecordingProperties()},x.prototype.get_session_replay_url=function(){return this.recorderManager.getSessionReplayUrl()},x.prototype.__get_recorder=function(){return this.recorderManager.getRecorder()},x.prototype.__get_recording_init_promise=function(){return this.__session_recording_init_promise},x.prototype._loaded=function(){if(this.get_config("loaded")(this),this._set_default_superprops(),this.people.set_once(this.persistence.get_referrer_info()),this.get_config("store_google")&&this.get_config("stop_utm_persistence")){var t=h.info.campaignParams(null);h.each(t,function(n,i){this.unregister(i)}.bind(this))}},x.prototype._set_default_superprops=function(){this.persistence.update_search_keyword(B.referrer),this.get_config("store_google")&&!this.get_config("stop_utm_persistence")&&this.register(h.info.campaignParams()),this.get_config("save_referrer")&&this.persistence.update_referrer_info(B.referrer)},x.prototype._dom_loaded=function(){h.each(this.__dom_loaded_queue,function(t){this._track_dom.apply(this,t)},this),this._consent.allowsApiCalls()&&h.each(this.__request_queue,function(t){this._send_request.apply(this,t)},this),delete this.__dom_loaded_queue,delete this.__request_queue},x.prototype._track_dom=function(t,n){if(this.get_config("img"))return this.report_error("You can't use DOM tracking functions with img = true."),!1;if(!fd)return this.__dom_loaded_queue.push([t,n]),!1;var i=new t().init(this);return i.track.apply(i,n)},x.prototype._prepare_callback=function(t,n){if(h.isUndefined(t))return null;if(Lr){var i=function(o){t(o,n)};return i}else{var e=this._jsc,r=""+Math.floor(Math.random()*1e8),s=this.get_config("callback_fn")+"["+r+"]";return e[r]=function(o){delete e[r],t(o,n)},s}},x.prototype._send_request=function(t,n,i,e){var r=!0;if(!this._consent.allowsSending())return $.log("Request dropped without consent"),h.isFunction(e)&&e(0),!1;if(cd)return this.__request_queue.push(arguments),r;var s={method:this.get_config("api_method"),transport:this.get_config("api_transport"),verbose:this.get_config("verbose")},o=null;!e&&(h.isFunction(i)||typeof i=="string")&&(e=i,i=null),i=h.extend(s,i||{}),Lr||(i.method="GET");var a=i.method==="POST",u=xs&&a&&i.transport.toLowerCase()==="sendbeacon",c=i.verbose;n.verbose&&(c=!0),this.get_config("test")&&(n.test=1),c&&(n.verbose=1),this.get_config("img")&&(n.img=1),Lr||(e?n.callback=e:(c||this.get_config("test"))&&(n.callback="(function(){})")),n.ip=this.get_config("ip")?1:0,n._=new Date().getTime().toString(),a&&(o="data="+encodeURIComponent(n.data),delete n.data),h.extend(n,this.get_config("api_extra_query_params")),t+="?"+h.HTTPBuildQuery(n);var l=this;if("img"in n){var f=B.createElement("img");f.src=t,B.body.appendChild(f)}else if(u){try{r=xs(t,o)}catch(y){l.report_error(y),r=!1}try{e&&e(r?1:0)}catch(y){l.report_error(y)}}else if(Lr)try{var p=new XMLHttpRequest;p.open(i.method,t,!0);var g=this.get_config("xhr_headers");if(a&&(g["Content-Type"]="application/x-www-form-urlencoded"),h.each(g,function(y,_){p.setRequestHeader(_,y)}),i.timeout_ms&&typeof p.timeout!="undefined"){p.timeout=i.timeout_ms;var v=new Date().getTime()}p.withCredentials=!0,p.onreadystatechange=function(){if(p.readyState===4)if(p.status===200){if(e)if(c){var y;try{y=h.JSONDecode(p.responseText)}catch(S){if(l.report_error(S),i.ignore_json_errors)y=p.responseText;else return}e(y)}else e(Number(p.responseText))}else{var _;if(p.timeout&&!p.status&&new Date().getTime()-v>=p.timeout?_="timeout":_="Bad HTTP status: "+p.status+" "+p.statusText,l.report_error(_),e)if(c){var w=p.responseHeaders||{};e({status:0,httpStatusCode:p.status,error:_,retryAfter:w["Retry-After"]})}else e(0)}},p.send(o)}catch(y){l.report_error(y),r=!1}else{var m=B.createElement("script");m.type="text/javascript",m.async=!0,m.defer=!0,m.src=t;var d=B.getElementsByTagName("script")[0];d.parentNode.insertBefore(m,d)}return r},x.prototype._fetch_remote_settings=function(t){if(!this._consent.allowsFetching())return Promise.resolve();var n=this,i=function(){t==="strict"&&(n.set_config({record_sessions_percent:0}),n._remote_settings_strict_disabled=!0)};if(!C.AbortController)return $.critical("Remote settings unavailable: missing minimum required APIs"),i(),Promise.resolve();var e=this.get_api_host("settings")+"/"+this.get_config("api_routes").settings,r={$lib_version:Le.LIB_VERSION,mp_lib:"web",sdk_config:"1"},s=h.HTTPBuildQuery(r),o=e+"?"+s,a=new AbortController,u=setTimeout(function(){a.abort()},500),c={method:"GET",headers:{Authorization:"Basic "+btoa(n.get_config("token")+":")},signal:a.signal};return C.fetch(o,c).then(function(l){if(clearTimeout(u),!l.ok){$.critical("Network response was not ok"),i();return}return l.json()}).then(function(l){if(l&&l.sdk_config&&l.sdk_config.config){var f=l.sdk_config.config,p={};h.each(f,function(g,v){Ru.hasOwnProperty(v)&&(p[v]=g)}),h.isEmptyObject(p)?($.critical("No valid config keys found in remote settings."),i()):n.set_config(p)}else i()}).catch(function(l){clearTimeout(u),$.critical("Failed to fetch remote settings",l),i()})},x.prototype._execute_array=function(t){var n,i=[],e=[],r=[];h.each(t,function(o){o&&(n=o[0],h.isArray(n)?r.push(o):typeof o=="function"?o.call(this):h.isArray(o)&&n==="alias"?i.push(o):h.isArray(o)&&n.indexOf("track")!==-1&&typeof this[n]=="function"?r.push(o):e.push(o))},this);var s=function(o,a){h.each(o,function(u){if(h.isArray(u[0])){var c=a;h.each(u,function(l){c=c[l[0]].apply(c,l.slice(1))})}else this[u[0]].apply(this,u.slice(1))},a)};s(i,this),s(e,this),s(r,this)},x.prototype.are_batchers_initialized=function(){return!!this.request_batchers.events},x.prototype.get_batcher_configs=function(){var t="__mpq_"+this.get_config("token");return this._batcher_configs=this._batcher_configs||{events:{type:"events",api_name:"track",queue_key:t+"_ev"},people:{type:"people",api_name:"engage",queue_key:t+"_pp"},groups:{type:"groups",api_name:"groups",queue_key:t+"_gr"}},this._batcher_configs},x.prototype.start_batch_senders=function(){this._batchers_were_started=!0,this.are_batchers_initialized()&&(this._batch_requests=!0,h.each(this.request_batchers,function(t){t.start()}))},x.prototype.stop_batch_senders=function(){this._batch_requests=!1,h.each(this.request_batchers,function(t){t.stop(),t.clear()})},x.prototype.push=function(t){this._execute_array([t])},x.prototype.enable=function(t){var n,i,e,r;if(typeof t=="undefined")this._flags.disable_all_events=!1;else{for(n={},i=[],e=0;e-1&&(e.splice(r,1),this.register({group_key:e})),e.length===0&&this.unregister(t)}return this.people.remove(t,n,i)},x.prototype.track_with_groups=function(t,n,i,e){var r=h.extend({},n||{});return h.each(i,function(s,o){s!=null&&(r[o]=s)}),this.track(t,r,e)},x.prototype._create_map_key=function(t,n){return t+"_"+JSON.stringify(n)},x.prototype._remove_group_from_cache=function(t,n){delete this._cached_groups[this._create_map_key(t,n)]},x.prototype.get_group=function(t,n){var i=this._create_map_key(t,n),e=this._cached_groups[i];return(e===void 0||e._group_key!==t||e._group_id!==n)&&(e=new Te,e._init(this,t,n,this._consent),this._cached_groups[i]=e),e},x.prototype.track_pageview=function(t,n){typeof t!="object"&&(t={}),n=n||{};var i=n.event_name||"$mp_web_page_view",e=h.extend(h.info.mpPageViewProperties(),h.info.campaignParams(),h.info.clickParams()),r=h.extend({},e,t);return this.is_recording_heatmap_data()&&(r.$captured_for_heatmap=!0),this.track(i,r)},x.prototype.track_links=function(t,n,i){return this._track_dom.call(this,$r,arguments)},x.prototype.track_forms=function(t,n,i){return this._track_dom.call(this,bs,arguments)},x.prototype.time_event=function(t){if(h.isUndefined(t)){this.report_error("No event name provided to mixpanel.time_event");return}this._event_is_disabled(t)||this.persistence.set_event_timer(t,new Date().getTime())};var KC={persistent:!0},Au=function(t){var n;return h.isObject(t)?n=t:h.isUndefined(t)?n={}:n={days:t},h.extend({},KC,n)};x.prototype.register=function(t,n){var i=this._run_hook("before_register",t,n);if(i!==null){t=i[0],n=i[1];var e=Au(n);e.persistent?this.persistence.register(t,e.days):h.extend(this.unpersisted_superprops,t)}},x.prototype.register_once=function(t,n,i){var e=this._run_hook("before_register_once",t,n,i);if(e!==null){t=e[0],n=e[1],i=e[2];var r=Au(i);r.persistent?this.persistence.register_once(t,n,r.days):(typeof n=="undefined"&&(n="None"),h.each(t,function(s,o){(!this.unpersisted_superprops.hasOwnProperty(o)||this.unpersisted_superprops[o]===n)&&(this.unpersisted_superprops[o]=s)},this))}},x.prototype.unregister=function(t,n){var i=this._run_hook("before_unregister",t,n);i!==null&&(t=i[0],n=i[1],n=Au(n),n.persistent?this.persistence.unregister(t):delete this.unpersisted_superprops[t])},x.prototype._register_single=function(t,n){var i={};i[t]=n,this.register(i)},x.prototype.identify=function(t,n,i,e,r,s,o,a){if(!this._consent.allowsStoring()){this._consent.holdIdentify(Array.prototype.slice.call(arguments)),$.log("identify() held until consent");return}var u=this._run_hook("before_identify",t);if(u===null)return-1;t=u[0];var c=this.get_distinct_id();if(t&&c!==t){if(typeof t=="string"&&t.indexOf(ud)===0)return this.report_error("distinct_id cannot have $device: prefix"),-1;this.register({$user_id:t})}if(!this.get_property("$device_id")){var l=c;this.register_once({$had_persisted_distinct_id:!0,$device_id:l},"")}t!==c&&t!==this.get_property(Ss)&&(this.unregister(Ss),this.register({distinct_id:t})),this._flags.identify_called=!0,this.people._flush(n,i,e,r,s,o,a),t!==c&&this.track("$identify",{distinct_id:t,$anon_distinct_id:c},{skip_hooks:!0}),t!==c&&this.flags.fetchFlags().catch(function(){$.error("[flags] Error fetching flags during identify")})},x.prototype.reset=function(){this.stop_session_recording(),this.persistence.clear(),this._flags.identify_called=!1,this._consent.takeHeldIdentify(),this._consent.allowsStoring()&&this._init_device_id(),this._check_and_start_session_recording(),this.flags.reset()},x.prototype.get_distinct_id=function(){return this.get_property("distinct_id")},x.prototype.alias=function(t,n){if(!this._consent.allowsStoring()){$.log("alias() dropped without consent");return}if(t===this.get_property(Jp))return this.report_error("Attempting to create alias for existing People user - aborting."),-2;var i=this;return h.isUndefined(n)&&(n=this.get_distinct_id()),t!==n?(this._register_single(Ss,t),this.track("$create_alias",{alias:t,distinct_id:n},{skip_hooks:!0},function(){i.identify(t)})):(this.report_error("alias matches current distinct_id - skipping api call."),this.identify(t),-1)},x.prototype.name_tag=function(t){this._register_single("mp_name_tag",t)},x.prototype.set_config=function(t){if(h.isObject(t)){this._consent&&"consent_mode"in t&&t.consent_mode!==this.get_config("consent_mode")&&($.critical("consent_mode can only be set at init; ignoring the change"),t=h.extend({},t),delete t.consent_mode),h.extend(this.config,t);var n=t.batch_size;n&&h.each(this.request_batchers,function(i){i.resetBatchSize()}),this.get_config("persistence_name")||(this.config.persistence_name=this.config.cookie_name),this.get_config("disable_persistence")||(this.config.disable_persistence=this.config.disable_cookie),this.persistence&&this.persistence.update_config(this.config),Le.DEBUG=Le.DEBUG||this.get_config("debug"),("autocapture"in t||"record_heatmap_data"in t)&&this.autocapture&&this.autocapture.init(),h.isObject(t.hooks)&&(this.hooks={},h.each(t.hooks,function(i,e){if(h.isFunction(i))this.hooks[e]=[i];else if(h.isArray(i)){this.hooks[e]=[];for(var r=0;r|null} */ @@ -20851,25 +20853,47 @@ define((function () { 'use strict'; var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -20969,622 +20993,312 @@ define((function () { 'use strict'; storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME] }; + var logger$9 = console_with_prefix('lock'); + /** - * GDPR utils + * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser + * window/tab at a time will be able to access shared resources. * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. + * Based on the Alur and Taubenfeld fast lock + * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html) + * with an added timeout to ensure there will be eventual progress in the event + * that a window is closed in the middle of the callback. * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. + * Implementation based on the original version by David Wolever (https://github.com/wolever) + * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432. + * + * @example + * const myLock = new SharedLock('some-key'); + * myLock.withLock(function() { + * console.log('I hold the mutex!'); + * }); + * + * @constructor */ + var SharedLock = function(key, options) { + options = options || {}; + this.storageKey = key; + this.storage = options.storage || getLocalStorage(); + this.pollIntervalMS = options.pollIntervalMS || 100; + this.timeoutMS = options.timeoutMS || 2000; - /** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ + // dependency-inject promise implementation for testing purposes + this.promiseImpl = options.promiseImpl || PromisePolyfill; + }; - /** Public **/ + // pass in a specific pid to test contention scenarios; otherwise + // it is chosen randomly for each acquisition attempt + SharedLock.prototype.withLock = function(lockedCB, pid) { + var Promise = this.promiseImpl; + return new Promise(_.bind(function (resolve, reject) { + var i = pid || (new Date().getTime() + '|' + Math.random()); + var startTime = new Date().getTime(); + var key = this.storageKey; + var pollIntervalMS = this.pollIntervalMS; + var timeoutMS = this.timeoutMS; + var storage = this.storage; - var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; + var keyX = key + ':X'; + var keyY = key + ':Y'; + var keyZ = key + ':Z'; - /** - * Opt the user in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ - function optIn(token, options) { - _optInOut(true, token, options); - } + var delay = function(cb) { + if (new Date().getTime() - startTime > timeoutMS) { + logger$9.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']'); + storage.removeItem(keyZ); + storage.removeItem(keyY); + loop(); + return; + } + setTimeout(function() { + try { + cb(); + } catch(err) { + reject(err); + } + }, pollIntervalMS * (Math.random() + 0.1)); + }; - /** - * Opt the user out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not - */ - function optOut(token, options) { - _optInOut(false, token, options); - } + var waitFor = function(predicate, cb) { + if (predicate()) { + cb(); + } else { + delay(function() { + waitFor(predicate, cb); + }); + } + }; - /** - * Check whether the user has opted in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {boolean} whether the user has opted in to the given opt type - */ - function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; - } + var getSetY = function() { + var valY = storage.getItem(keyY); + if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases) + return false; + } else { + storage.setItem(keyY, i); + if (storage.getItem(keyY) === i) { + return true; + } else { + if (!localStorageSupported(storage, true)) { + reject(new Error('localStorage support dropped while acquiring lock')); + } + return false; + } + } + }; - /** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ - function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); - } - return optedOut; - } + var loop = function() { + storage.setItem(keyX, i); - /** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); - } + waitFor(getSetY, function() { + if (storage.getItem(keyX) === i) { + criticalSection(); + return; + } - /** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); - } + delay(function() { + if (storage.getItem(keyY) !== i) { + loop(); + return; + } + waitFor(function() { + return !storage.getItem(keyZ); + }, criticalSection); + }); + }); + }; - /** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); - } + var criticalSection = function() { + storage.setItem(keyZ, '1'); + var removeLock = function () { + storage.removeItem(keyZ); + if (storage.getItem(keyY) === i) { + storage.removeItem(keyY); + } + if (storage.getItem(keyX) === i) { + storage.removeItem(keyX); + } + }; - /** - * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ - function clearOptInOut(token, options) { - options = options || {}; - _getStorage(options).remove( - _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain - ); - } + lockedCB() + .then(function (ret) { + removeLock(); + resolve(ret); + }) + .catch(function (err) { + removeLock(); + reject(err); + }); + }; - /** Private **/ + try { + if (localStorageSupported(storage, true)) { + loop(); + } else { + throw new Error('localStorage support check failed'); + } + } catch(err) { + reject(err); + } + }, this)); + }; /** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage + * @type {import('./wrapper').StorageWrapper} */ - function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; - } + var LocalStorageWrapper = function (storageOverride) { + this.storage = storageOverride || getLocalStorage(); + }; - /** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type - */ - function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; - } + LocalStorageWrapper.prototype.init = function () { + if (!this.storage) { + return PromisePolyfill.reject(new Error('localStorage is not available')); + } + return PromisePolyfill.resolve(); + }; - /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type - */ - function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); - } + LocalStorageWrapper.prototype.isInitialized = function () { + return true; + }; - /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read - */ - function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; - } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; - } + LocalStorageWrapper.prototype.setItem = function (key, value) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + try { + this.storage.setItem(key, JSONStringify(value)); + } catch (e) { + reject(e); + } + resolve(); + }, this)); + }; - /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true - */ - function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; - } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; + LocalStorageWrapper.prototype.getItem = function (key) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + var item; + try { + item = JSONParse(this.storage.getItem(key)); + } catch (e) { + reject(e); + } + resolve(item); + }, this)); + }; - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; + LocalStorageWrapper.prototype.removeItem = function (key) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + try { + this.storage.removeItem(key); + } catch (e) { + reject(e); } - }); + resolve(); + }, this)); + }; - return hasDntOn; - } + var logger$8 = console_with_prefix('batch'); /** - * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type - * @param {boolean} optValue - whether to opt the user in or out for the given opt type - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + * RequestQueue: queue for batching API requests with localStorage backup for retries. + * Maintains an in-memory queue which represents the source of truth for the current + * page, but also writes all items out to a copy in the browser's localStorage, which + * can be read on subsequent pageloads and retried. For batchability, all the request + * items in the queue should be of the same type (events, people updates, group updates) + * so they can be sent in a single request to the same API endpoint. + * + * LocalStorage keying and locking: In order for reloads and subsequent pageloads of + * the same site to access the same persisted data, they must share the same localStorage + * key (for instance based on project token and queue type). Therefore access to the + * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent + * simultaneously open windows/tabs from overwriting each other's data (which would lead + * to data loss in some situations). + * @constructor */ - function _optInOut(optValue, token, options) { - if (!_.isString(token) || !token.length) { - console$1.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); - return; - } - + var RequestQueue = function (storageKey, options) { options = options || {}; - - _getStorage(options).set( - _getStorageKey(token, options), - optValue ? 1 : 0, - _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, - !!options.crossSubdomainCookie, - !!options.secureCookie, - !!options.crossSiteCookie, - options.cookieDomain - ); - - if (options.track && optValue) { // only track event if opting in (optValue=true) - options.track(options.trackEventName || '$opt_in', options.trackProperties, { - 'send_immediately': true + this.storageKey = storageKey; + this.usePersistence = options.usePersistence; + if (this.usePersistence) { + this.queueStorage = options.queueStorage || new LocalStorageWrapper(); + this.lock = new SharedLock(storageKey, { + storage: options.sharedLockStorage, + timeoutMS: options.sharedLockTimeoutMS, }); } - } - - /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out - */ - function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; + this.reportError = options.errorReporter || _.bind(logger$8.error, logger$8); + this.consentGate = options.consentGate; - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console$1.error('Unexpected error when checking tracking opt-out status: ' + err); - } + this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios - if (!optedOut) { - return method.apply(this, arguments); - } + this.memQueue = []; + this.initialized = false; - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { - callback(0); - } + if (options.enqueueThrottleMs) { + this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs); + } else { + this.enqueuePersisted = _.bind(function (queueEntry) { + return this._enqueuePersisted([queueEntry]); + }, this); + } + }; - return; - }; - } + RequestQueue.prototype.ensureInit = function () { + if (this.initialized || !this.usePersistence) { + return PromisePolyfill.resolve(); + } - var logger$9 = console_with_prefix('lock'); + return this.queueStorage + .init() + .then(_.bind(function () { + this.initialized = true; + }, this)) + .catch(_.bind(function (err) { + this.reportError('Error initializing queue persistence. Disabling persistence', err); + this.initialized = true; + this.usePersistence = false; + }, this)); + }; /** - * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser - * window/tab at a time will be able to access shared resources. - * - * Based on the Alur and Taubenfeld fast lock - * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html) - * with an added timeout to ensure there will be eventual progress in the event - * that a window is closed in the middle of the callback. - * - * Implementation based on the original version by David Wolever (https://github.com/wolever) - * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432. - * - * @example - * const myLock = new SharedLock('some-key'); - * myLock.withLock(function() { - * console.log('I hold the mutex!'); - * }); + * Add one item to queues (memory and localStorage). The queued entry includes + * the given item along with an auto-generated ID and a "flush-after" timestamp. + * It is expected that the item will be sent over the network and dequeued + * before the flush-after time; if this doesn't happen it is considered orphaned + * (e.g., the original tab where it was enqueued got closed before it could be + * sent) and the item can be sent by any tab that finds it in localStorage. * - * @constructor + * The final callback param is called with a param indicating success or + * failure of the enqueue operation; it is asynchronous because the localStorage + * lock is asynchronous. */ - var SharedLock = function(key, options) { - options = options || {}; + RequestQueue.prototype.enqueue = function (item, flushInterval) { + var queueEntry = { + 'id': cheap_guid(), + 'flushAfter': new Date().getTime() + flushInterval * 2, + 'payload': item + }; - this.storageKey = key; - this.storage = options.storage || getLocalStorage(); - this.pollIntervalMS = options.pollIntervalMS || 100; - this.timeoutMS = options.timeoutMS || 2000; + if (!this._persists()) { + this.memQueue.push(queueEntry); + return PromisePolyfill.resolve(true); + } else { + return this.enqueuePersisted(queueEntry); + } + }; - // dependency-inject promise implementation for testing purposes - this.promiseImpl = options.promiseImpl || PromisePolyfill; - }; - - // pass in a specific pid to test contention scenarios; otherwise - // it is chosen randomly for each acquisition attempt - SharedLock.prototype.withLock = function(lockedCB, pid) { - var Promise = this.promiseImpl; - return new Promise(_.bind(function (resolve, reject) { - var i = pid || (new Date().getTime() + '|' + Math.random()); - var startTime = new Date().getTime(); - var key = this.storageKey; - var pollIntervalMS = this.pollIntervalMS; - var timeoutMS = this.timeoutMS; - var storage = this.storage; - - var keyX = key + ':X'; - var keyY = key + ':Y'; - var keyZ = key + ':Z'; - - var delay = function(cb) { - if (new Date().getTime() - startTime > timeoutMS) { - logger$9.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']'); - storage.removeItem(keyZ); - storage.removeItem(keyY); - loop(); - return; - } - setTimeout(function() { - try { - cb(); - } catch(err) { - reject(err); - } - }, pollIntervalMS * (Math.random() + 0.1)); - }; - - var waitFor = function(predicate, cb) { - if (predicate()) { - cb(); - } else { - delay(function() { - waitFor(predicate, cb); - }); - } - }; - - var getSetY = function() { - var valY = storage.getItem(keyY); - if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases) - return false; - } else { - storage.setItem(keyY, i); - if (storage.getItem(keyY) === i) { - return true; - } else { - if (!localStorageSupported(storage, true)) { - reject(new Error('localStorage support dropped while acquiring lock')); - } - return false; - } - } - }; - - var loop = function() { - storage.setItem(keyX, i); - - waitFor(getSetY, function() { - if (storage.getItem(keyX) === i) { - criticalSection(); - return; - } - - delay(function() { - if (storage.getItem(keyY) !== i) { - loop(); - return; - } - waitFor(function() { - return !storage.getItem(keyZ); - }, criticalSection); - }); - }); - }; - - var criticalSection = function() { - storage.setItem(keyZ, '1'); - var removeLock = function () { - storage.removeItem(keyZ); - if (storage.getItem(keyY) === i) { - storage.removeItem(keyY); - } - if (storage.getItem(keyX) === i) { - storage.removeItem(keyX); - } - }; - - lockedCB() - .then(function (ret) { - removeLock(); - resolve(ret); - }) - .catch(function (err) { - removeLock(); - reject(err); - }); - }; - - try { - if (localStorageSupported(storage, true)) { - loop(); - } else { - throw new Error('localStorage support check failed'); - } - } catch(err) { - reject(err); - } - }, this)); - }; - - /** - * @type {import('./wrapper').StorageWrapper} - */ - var LocalStorageWrapper = function (storageOverride) { - this.storage = storageOverride || getLocalStorage(); - }; - - LocalStorageWrapper.prototype.init = function () { - if (!this.storage) { - return PromisePolyfill.reject(new Error('localStorage is not available')); - } - return PromisePolyfill.resolve(); - }; - - LocalStorageWrapper.prototype.isInitialized = function () { - return true; - }; - - LocalStorageWrapper.prototype.setItem = function (key, value) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - try { - this.storage.setItem(key, JSONStringify(value)); - } catch (e) { - reject(e); - } - resolve(); - }, this)); - }; - - LocalStorageWrapper.prototype.getItem = function (key) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - var item; - try { - item = JSONParse(this.storage.getItem(key)); - } catch (e) { - reject(e); - } - resolve(item); - }, this)); - }; - - LocalStorageWrapper.prototype.removeItem = function (key) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - try { - this.storage.removeItem(key); - } catch (e) { - reject(e); - } - resolve(); - }, this)); - }; - - var logger$8 = console_with_prefix('batch'); - - /** - * RequestQueue: queue for batching API requests with localStorage backup for retries. - * Maintains an in-memory queue which represents the source of truth for the current - * page, but also writes all items out to a copy in the browser's localStorage, which - * can be read on subsequent pageloads and retried. For batchability, all the request - * items in the queue should be of the same type (events, people updates, group updates) - * so they can be sent in a single request to the same API endpoint. - * - * LocalStorage keying and locking: In order for reloads and subsequent pageloads of - * the same site to access the same persisted data, they must share the same localStorage - * key (for instance based on project token and queue type). Therefore access to the - * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent - * simultaneously open windows/tabs from overwriting each other's data (which would lead - * to data loss in some situations). - * @constructor - */ - var RequestQueue = function (storageKey, options) { - options = options || {}; - this.storageKey = storageKey; - this.usePersistence = options.usePersistence; - if (this.usePersistence) { - this.queueStorage = options.queueStorage || new LocalStorageWrapper(); - this.lock = new SharedLock(storageKey, { - storage: options.sharedLockStorage, - timeoutMS: options.sharedLockTimeoutMS, - }); - } - this.reportError = options.errorReporter || _.bind(logger$8.error, logger$8); - - this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios - - this.memQueue = []; - this.initialized = false; - - if (options.enqueueThrottleMs) { - this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs); - } else { - this.enqueuePersisted = _.bind(function (queueEntry) { - return this._enqueuePersisted([queueEntry]); - }, this); - } - }; - - RequestQueue.prototype.ensureInit = function () { - if (this.initialized || !this.usePersistence) { - return PromisePolyfill.resolve(); - } - - return this.queueStorage - .init() - .then(_.bind(function () { - this.initialized = true; - }, this)) - .catch(_.bind(function (err) { - this.reportError('Error initializing queue persistence. Disabling persistence', err); - this.initialized = true; - this.usePersistence = false; - }, this)); - }; - - /** - * Add one item to queues (memory and localStorage). The queued entry includes - * the given item along with an auto-generated ID and a "flush-after" timestamp. - * It is expected that the item will be sent over the network and dequeued - * before the flush-after time; if this doesn't happen it is considered orphaned - * (e.g., the original tab where it was enqueued got closed before it could be - * sent) and the item can be sent by any tab that finds it in localStorage. - * - * The final callback param is called with a param indicating success or - * failure of the enqueue operation; it is asynchronous because the localStorage - * lock is asynchronous. - */ - RequestQueue.prototype.enqueue = function (item, flushInterval) { - var queueEntry = { - 'id': cheap_guid(), - 'flushAfter': new Date().getTime() + flushInterval * 2, - 'payload': item - }; - - if (!this.usePersistence) { - this.memQueue.push(queueEntry); - return PromisePolyfill.resolve(true); - } else { - return this.enqueuePersisted(queueEntry); - } + /** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ + RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); }; RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -21684,7 +21398,7 @@ define((function () { 'use strict'; }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -21772,7 +21486,7 @@ define((function () { 'use strict'; */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -21827,11 +21541,14 @@ define((function () { 'use strict'; RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); - }, this)) - .then(function () { - return true; - }) + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); + }, this)) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -21876,7 +21593,8 @@ define((function () { 'use strict'; sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -23908,6 +23626,8 @@ define((function () { 'use strict'; /** * @typedef {Object} SessionRecordingOptions * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib + * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks + * before it stores or sends * @property {String} [options.replayId] - unique uuid for a single replay * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length @@ -23938,6 +23658,7 @@ define((function () { 'use strict'; */ var SessionRecording = function(options) { this._mixpanel = options.mixpanelInstance; + this.consentGate = options.consentGate; this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC; this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC; this._onBatchSent = options.onBatchSent || NOOP_FUNC; @@ -23964,7 +23685,7 @@ define((function () { 'use strict'; // disable persistence if localStorage is not supported // request-queue will automatically disable persistence if indexedDB fails to initialize - var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence'); + var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence(); // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId; @@ -23978,6 +23699,7 @@ define((function () { 'use strict'; sharedLockStorage: options.sharedLockStorage, usePersistence: usePersistence, stopAllBatchingFunc: this.stopRecording.bind(this), + consentGate: this.consentGate, // increased throttle and shared lock timeout because recording events are very high frequency. // this will minimize the amount of lock contention between enqueued events. @@ -24033,13 +23755,6 @@ define((function () { 'use strict'; return this._mixpanel.get_config(configVar); }; - // Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which - // reaches into this class instance and expects the snake case version of the function. - // eslint-disable-next-line camelcase - SessionRecording.prototype.get_config = function(configVar) { - return this.getConfig(configVar); - }; - SessionRecording.prototype.startRecording = function (shouldStopBatcher) { if (this._rrwebRecord === null) { this.reportError('rrweb record function not provided. '); @@ -24214,19 +23929,15 @@ define((function () { 'use strict'; /** - * Flushes the current batch of events to the server, but passes an opt-out callback to make sure - * we stop recording and dump any queued events if the user has opted out. + * Flushes the current batch of events to the server, or stops recording if consent stops the calls. */ SessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) { - var onOptOut = function (code) { - // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out - if (code === 0) { - this.stopRecording(); - cb({error: 'Tracking has been opted out, stopping recording.'}); - } - }.bind(this); - - this._flushEvents(data, options, cb, onOptOut); + if (!this.consentGate.allowsApiCalls()) { + this.stopRecording(); + cb({error: 'Tracking has been opted out, stopping recording.'}); + return; + } + this._flushEvents(data, options, cb); }; /** @@ -24282,7 +23993,12 @@ define((function () { 'use strict'; return this.getConfig('api_routes')['record']; }; + // consent can be withdrawn while the batch is compressed, so it is checked again before sending SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) { + if (!this.consentGate.allowsApiCalls()) { + callback(0); + return; + } var onSuccess = function (response, responseBody) { // Update batch specific props only if the request was successful to guarantee ordering. // RequestBatcher will always flush the next batch after the previous one succeeds. @@ -24319,7 +24035,7 @@ define((function () { 'use strict'; }); }; - SessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) { + SessionRecording.prototype._flushEvents = function(data, options, callback) { var numEvents = data.length; if (numEvents > 0) { @@ -24386,7 +24102,7 @@ define((function () { 'use strict'; sendUncompressed(); } } - }); + }; SessionRecording.prototype.reportError = function(msg, err) { @@ -24441,9 +24157,10 @@ define((function () { 'use strict'; */ SessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) { return function(text, element) { - // prevent visual artifacts from random whitespace + // whitespace-only text has nothing to mask, and dropping it would join adjacent words + // (e.g. a space text node between two inline elements) if (!text.trim().length) { - return ''; + return text; } var shouldMask = true; @@ -24471,11 +24188,12 @@ define((function () { 'use strict'; this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA); this.errorReporter = options.errorReporter; this.mixpanelInstance = options.mixpanelInstance; + this.consentGate = options.consentGate; this.sharedLockStorage = options.sharedLockStorage; }; RecordingRegistry.prototype.isPersistenceEnabled = function() { - return !this.mixpanelInstance.get_config('disable_persistence'); + return this.consentGate.allowsPersistence(); }; RecordingRegistry.prototype.handleError = function (err) { @@ -24486,6 +24204,7 @@ define((function () { 'use strict'; * @param {import('./session-recording').SerializedRecording} serializedRecording */ RecordingRegistry.prototype.setActiveRecording = function (serializedRecording) { + // a recording that resumes after consent stops storage writes nothing if (!this.isPersistenceEnabled()) { return PromisePolyfill.resolve(); } @@ -24522,13 +24241,10 @@ define((function () { 'use strict'; }; RecordingRegistry.prototype.clearActiveRecording = function () { - if (this.isPersistenceEnabled()) { - // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. - // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. - return this.markActiveRecordingExpired(); - } else { - return this.deleteActiveRecording(); - } + // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. + // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. + // without persistence the entry is left as it is, and its unsent events wait for a load that allows them. + return this.markActiveRecordingExpired(); }; RecordingRegistry.prototype.markActiveRecordingExpired = function () { @@ -24542,16 +24258,6 @@ define((function () { 'use strict'; .catch(this.handleError.bind(this)); }; - RecordingRegistry.prototype.deleteActiveRecording = function () { - // avoid initializing IDB if this registry instance hasn't already written a recording - if (this.idb.isInitialized()) { - return this.idb.removeItem(this.mixpanelInstance.get_tab_id()) - .catch(this.handleError.bind(this)); - } else { - return PromisePolyfill.resolve(); - } - }; - /** * Flush any inactive recordings from the registry to minimize data loss. * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch. @@ -24574,6 +24280,7 @@ define((function () { 'use strict'; .map(function (serializedRecording) { var sessionRecording = SessionRecording.deserialize(serializedRecording, { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, sharedLockStorage: this.sharedLockStorage }); return sessionRecording.unloadPersistedData() @@ -24589,6 +24296,79 @@ define((function () { 'use strict'; .catch(this.handleError.bind(this)); }; + /** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + + /** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ + function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console$1.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; + } + + /** + * The consent gate the recorder bundle builds when it starts, and hands to its services. The core + * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name, + * the bundle being built separately. A core without it only knows the opt-out, through + * has_opted_out_tracking(). + * @param {Object} mixpanelInstance + * @returns {ConsentGate} + */ + function consentGateFor(mixpanelInstance) { + return buildConsentGate( + function(capability) { + var consentAllows = mixpanelInstance['_consent_allows']; + if (typeof consentAllows === 'function') { + return !!consentAllows.call(mixpanelInstance, capability); + } + return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking(); + }, + function(key) { + return mixpanelInstance.get_config(key); + } + ); + } + var logger$3 = console_with_prefix('recorder'); /** @@ -24599,12 +24379,14 @@ define((function () { 'use strict'; this.mixpanelInstance = mixpanelInstance; this.rrwebRecord = rrwebRecord || record; this.sharedLockStorage = sharedLockStorage; + this.consentGate = consentGateFor(mixpanelInstance); /** * @member {import('./registry').RecordingRegistry} */ this.recordingRegistry = new RecordingRegistry({ mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, errorReporter: logger$3.error, sharedLockStorage: sharedLockStorage }); @@ -24641,6 +24423,7 @@ define((function () { 'use strict'; */ var sessionRecordingOptions = { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, onBatchSent: onBatchSent, onIdleTimeout: onIdleTimeout, onMaxLengthReached: onMaxLengthReached, @@ -26662,16 +26445,23 @@ define((function () { 'use strict'; }); }; + /** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger$2.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger$2.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger$2.log('No persisted variants cleared from IndexedDB:', error); }); }; @@ -26734,11 +26524,15 @@ define((function () { 'use strict'; this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger$1.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -26754,7 +26548,7 @@ define((function () { 'use strict'; this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -26822,7 +26616,7 @@ define((function () { 'use strict'; }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -26853,6 +26647,14 @@ define((function () { 'use strict'; return !!this.flags; }; + /** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ + FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); + }; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -27148,6 +26950,9 @@ define((function () { 'use strict'; }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); @@ -27428,6 +27233,8 @@ define((function () { 'use strict'; this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -27439,8 +27246,8 @@ define((function () { 'use strict'; }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console$1.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console$1.log('Load recorder check skipped without persistence'); return PromisePolyfill.resolve(false); } @@ -27467,6 +27274,10 @@ define((function () { 'use strict'; }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console$1.log('Session recording skipped without consent'); + return PromisePolyfill.resolve(); + } if (!win['MutationObserver']) { console$1.critical('Browser does not support MutationObserver; skipping session recording'); return PromisePolyfill.resolve(); @@ -27475,6 +27286,11 @@ define((function () { 'use strict'; var loadRecorder = _.bind(function(startNewIfInactive) { return new PromisePolyfill(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new win[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); @@ -28004,13 +27820,19 @@ define((function () { 'use strict'; _.extend(MixpanelGroup.prototype, apiActions); - MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { + /** + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate + */ + MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { this._mixpanel = mixpanel_instance; this._group_key = group_key; this._group_id = group_id; + this.consentGate = consentGate; }; - MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** * Set properties on a group. * @@ -28030,15 +27852,20 @@ define((function () { 'use strict'; * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(prop, to, callback) { - var data = this.set_action(prop, to); + MixpanelGroup.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** * Set properties on a group, only if they do not yet exist. * This will not overwrite previous group property values, unlike @@ -28060,15 +27887,20 @@ define((function () { 'use strict'; * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(prop, to, callback) { - var data = this.set_once_action(prop, to); + MixpanelGroup.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( /** * Unset properties on a group permanently. * @@ -28080,12 +27912,17 @@ define((function () { 'use strict'; * @param {String} prop The name of the property. * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(prop, callback) { + MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( /** * Merge a given list with a list-valued group property, excluding duplicate values. * @@ -28099,15 +27936,20 @@ define((function () { 'use strict'; * @param {Array} values Values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(list_name, values, callback) { + MixpanelGroup.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( /** * Permanently delete a group. * @@ -28118,13 +27960,18 @@ define((function () { 'use strict'; * * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(callback) { + MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } // bracket notation above prevents a minification error related to reserved words var data = this.delete_action(); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( /** * Remove a property from a group. The value will be ignored if doesn't exist. * @@ -28137,10 +27984,16 @@ define((function () { 'use strict'; * @param {Object} value Value to remove from the given group property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function(list_name, value, callback) { + MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); - }); + }; MixpanelGroup.prototype._send_request = function(data, callback) { data['$group_key'] = this._group_key; @@ -28189,11 +28042,15 @@ define((function () { 'use strict'; _.extend(MixpanelPeople.prototype, apiActions); - MixpanelPeople.prototype._init = function(mixpanel_instance) { + /** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ + MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; + this.consentGate = consentGate; }; - MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( /** * Set properties on a user record. * @@ -28214,11 +28071,17 @@ define((function () { 'use strict'; * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, to, callback) { - var data = this.set_action(prop, to); + MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); // make sure that the referrer info has been updated and saved if (this._get_config('save_referrer')) { this._mixpanel['persistence'].update_referrer_info(document.referrer); @@ -28231,9 +28094,8 @@ define((function () { 'use strict'; data[SET_ACTION] ); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( /** * Set properties on a user record, only if they do not yet exist. * This will not overwrite previous people property values, unlike @@ -28256,15 +28118,20 @@ define((function () { 'use strict'; * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, to, callback) { - var data = this.set_once_action(prop, to); + MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -28279,12 +28146,17 @@ define((function () { 'use strict'; * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, callback) { + MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -28311,7 +28183,16 @@ define((function () { 'use strict'; * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, by, callback) { + MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -28325,7 +28206,6 @@ define((function () { 'use strict'; } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -28337,9 +28217,8 @@ define((function () { 'use strict'; data[ADD_ACTION] = $add; return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -28360,15 +28239,20 @@ define((function () { 'use strict'; * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, value, callback) { + MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -28381,15 +28265,20 @@ define((function () { 'use strict'; * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, value, callback) { + MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -28417,15 +28306,20 @@ define((function () { 'use strict'; * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, values, callback) { + MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -28447,9 +28341,15 @@ define((function () { 'use strict'; * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ - function(amount, properties, callback) { // eslint-disable-line no-unused-vars + MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console$1.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); - }); + }; /** * Permanently clear all revenue report transactions from the @@ -28663,428 +28563,1340 @@ define((function () { 'use strict'; /* eslint camelcase: "off" */ - /* - * Constants + /* + * Constants + */ + /** @const */ var SET_QUEUE_KEY = '__mps'; + /** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; + /** @const */ var UNSET_QUEUE_KEY = '__mpus'; + /** @const */ var ADD_QUEUE_KEY = '__mpa'; + /** @const */ var APPEND_QUEUE_KEY = '__mpap'; + /** @const */ var REMOVE_QUEUE_KEY = '__mpr'; + /** @const */ var UNION_QUEUE_KEY = '__mpu'; + // This key is deprecated, but we want to check for it to see whether aliasing is allowed. + /** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; + /** @const */ var ALIAS_ID_KEY = '__alias'; + /** @const */ var EVENT_TIMERS_KEY = '__timers'; + /** @const */ var RESERVED_PROPERTIES = [ + SET_QUEUE_KEY, + SET_ONCE_QUEUE_KEY, + UNSET_QUEUE_KEY, + ADD_QUEUE_KEY, + APPEND_QUEUE_KEY, + REMOVE_QUEUE_KEY, + UNION_QUEUE_KEY, + PEOPLE_DISTINCT_ID_KEY, + ALIAS_ID_KEY, + EVENT_TIMERS_KEY + ]; + + // the store while persistence is off: nothing is read or written + /** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} + }; + + /** + * Mixpanel Persistence Object + * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() + */ + var MixpanelPersistence = function(config, options) { + this['props'] = {}; + this.campaign_params_saved = false; + + if (config['persistence_name']) { + this.name = 'mp_' + config['persistence_name']; + } else { + this.name = 'mp_' + config['token'] + '_mixpanel'; + } + + var storage_type = config['persistence']; + if (storage_type !== 'cookie' && storage_type !== 'localStorage') { + console$1.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); + config['persistence'] = 'cookie'; + } + this.storage_type = config['persistence']; + + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } + }; + + MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; + } else { + this.backend = _.cookie; + } + this.storage = this.backend; + }; + + MixpanelPersistence.prototype.properties = function() { + var p = {}; + + this.load(); + + // Filter out reserved properties + _.each(this['props'], function(v, k) { + if (!_.include(RESERVED_PROPERTIES, k)) { + p[k] = v; + } + }); + return p; + }; + + MixpanelPersistence.prototype.load = function() { + var entry = this.storage.parse(this.name); + + if (entry) { + this['props'] = _.extend({}, entry); + } + }; + + MixpanelPersistence.prototype.upgrade = function() { + var old_cookie, + old_localstorage; + + // if transferring from cookie to localStorage or vice-versa, copy existing + // super properties over to new storage mode + if (this.backend === _.localStorage) { + old_cookie = _.cookie.parse(this.name); + + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + + if (old_cookie) { + this.register_once(old_cookie); + } + } else if (this.backend === _.cookie) { + old_localstorage = _.localStorage.parse(this.name); + + _.localStorage.remove(this.name); + + if (old_localstorage) { + this.register_once(old_localstorage); + } + } + }; + + MixpanelPersistence.prototype.save = function() { + this.storage.set( + this.name, + JSONStringify(this['props']), + this.expire_days, + this.cross_subdomain, + this.secure, + this.cross_site, + this.cookie_domain + ); + }; + + MixpanelPersistence.prototype.load_prop = function(key) { + this.load(); + return this['props'][key]; + }; + + MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } + // remove both domain and subdomain cookies + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); + }; + + // removes the storage entry and deletes all loaded data + // forced name for tests + MixpanelPersistence.prototype.clear = function() { + this.remove(); + this['props'] = {}; + }; + + /** + * @param {Object} props + * @param {*=} default_value + * @param {number=} days + */ + MixpanelPersistence.prototype.register_once = function(props, default_value, days) { + if (_.isObject(props)) { + if (typeof(default_value) === 'undefined') { default_value = 'None'; } + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + + _.each(props, function(val, prop) { + if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { + this['props'][prop] = val; + } + }, this); + + this.save(); + + return true; + } + return false; + }; + + /** + * @param {Object} props + * @param {number=} days + */ + MixpanelPersistence.prototype.register = function(props, days) { + if (_.isObject(props)) { + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + _.extend(this['props'], props); + this.save(); + + return true; + } + return false; + }; + + MixpanelPersistence.prototype.unregister = function(prop) { + this.load(); + if (prop in this['props']) { + delete this['props'][prop]; + this.save(); + } + }; + + MixpanelPersistence.prototype.update_search_keyword = function(referrer) { + this.register(_.info.searchInfo(referrer)); + }; + + // EXPORTED METHOD, we test this directly. + MixpanelPersistence.prototype.update_referrer_info = function(referrer) { + // If referrer doesn't exist, we want to note the fact that it was type-in traffic. + this.register_once({ + '$initial_referrer': referrer || '$direct', + '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' + }, ''); + }; + + MixpanelPersistence.prototype.get_referrer_info = function() { + return _.strip_empty_properties({ + '$initial_referrer': this['props']['$initial_referrer'], + '$initial_referring_domain': this['props']['$initial_referring_domain'] + }); + }; + + MixpanelPersistence.prototype.update_config = function(config) { + this.default_expiry = this.expire_days = config['cookie_expiration']; + this.set_disabled(config['disable_persistence']); + this.set_cookie_domain(config['cookie_domain']); + this.set_cross_site(config['cross_site_cookie']); + this.set_cross_subdomain(config['cross_subdomain_cookie']); + this.set_secure(config['secure_cookie']); + }; + + /** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ + MixpanelPersistence.prototype.set_disabled = function(disabled) { + this.disabled = disabled; + this._update_storage(); + }; + + /** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ + MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); + }; + + /** + * Read and write storage again, saving the props in memory to it. + */ + MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); + }; + + /** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ + MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); + }; + + MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; + this.remove(); + } else { + this.storage = this.backend; + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { + if (cookie_domain !== this.cookie_domain) { + this.remove(); + this.cookie_domain = cookie_domain; + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cross_site = function(cross_site) { + if (cross_site !== this.cross_site) { + this.cross_site = cross_site; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { + if (cross_subdomain !== this.cross_subdomain) { + this.cross_subdomain = cross_subdomain; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype.get_cross_subdomain = function() { + return this.cross_subdomain; + }; + + MixpanelPersistence.prototype.set_secure = function(secure) { + if (secure !== this.secure) { + this.secure = secure ? true : false; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { + var q_key = this._get_queue_key(queue), + q_data = data[queue], + set_q = this._get_or_create_queue(SET_ACTION), + set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), + unset_q = this._get_or_create_queue(UNSET_ACTION), + add_q = this._get_or_create_queue(ADD_ACTION), + union_q = this._get_or_create_queue(UNION_ACTION), + remove_q = this._get_or_create_queue(REMOVE_ACTION, []), + append_q = this._get_or_create_queue(APPEND_ACTION, []); + + if (q_key === SET_QUEUE_KEY) { + // Update the set queue - we can override any existing values + _.extend(set_q, q_data); + // if there was a pending increment, override it + // with the set. + this._pop_from_people_queue(ADD_ACTION, q_data); + // if there was a pending union, override it + // with the set. + this._pop_from_people_queue(UNION_ACTION, q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === SET_ONCE_QUEUE_KEY) { + // only queue the data if there is not already a set_once call for it. + _.each(q_data, function(v, k) { + if (!(k in set_once_q)) { + set_once_q[k] = v; + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNSET_QUEUE_KEY) { + _.each(q_data, function(prop) { + + // undo previously-queued actions on this key + _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { + if (prop in enqueued_obj) { + delete enqueued_obj[prop]; + } + }); + _.each(append_q, function(append_obj) { + if (prop in append_obj) { + delete append_obj[prop]; + } + }); + + unset_q[prop] = true; + + }); + } else if (q_key === ADD_QUEUE_KEY) { + _.each(q_data, function(v, k) { + // If it exists in the set queue, increment + // the value + if (k in set_q) { + set_q[k] += v; + } else { + // If it doesn't exist, update the add + // queue + if (!(k in add_q)) { + add_q[k] = 0; + } + add_q[k] += v; + } + }, this); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNION_QUEUE_KEY) { + _.each(q_data, function(v, k) { + if (_.isArray(v)) { + if (!(k in union_q)) { + union_q[k] = []; + } + // Prevent duplicate values + _.each(v, function(item) { + if (!_.include(union_q[k], item)) { + union_q[k].push(item); + } + }); + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === REMOVE_QUEUE_KEY) { + remove_q.push(q_data); + this._pop_from_people_queue(APPEND_ACTION, q_data); + } else if (q_key === APPEND_QUEUE_KEY) { + append_q.push(q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } + + console$1.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); + console$1.log(data); + + this.save(); + }; + + MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { + var q = this['props'][this._get_queue_key(queue)]; + if (!_.isUndefined(q)) { + _.each(data, function(v, k) { + if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { + // list actions: only remove if both k+v match + // e.g. remove should not override append in a case like + // append({foo: 'bar'}); remove({foo: 'qux'}) + _.each(q, function(queued_action) { + if (queued_action[k] === v) { + delete queued_action[k]; + } + }); + } else { + delete q[k]; + } + }, this); + } + }; + + MixpanelPersistence.prototype.load_queue = function(queue) { + return this.load_prop(this._get_queue_key(queue)); + }; + + MixpanelPersistence.prototype._get_queue_key = function(queue) { + if (queue === SET_ACTION) { + return SET_QUEUE_KEY; + } else if (queue === SET_ONCE_ACTION) { + return SET_ONCE_QUEUE_KEY; + } else if (queue === UNSET_ACTION) { + return UNSET_QUEUE_KEY; + } else if (queue === ADD_ACTION) { + return ADD_QUEUE_KEY; + } else if (queue === APPEND_ACTION) { + return APPEND_QUEUE_KEY; + } else if (queue === REMOVE_ACTION) { + return REMOVE_QUEUE_KEY; + } else if (queue === UNION_ACTION) { + return UNION_QUEUE_KEY; + } else { + console$1.error('Invalid queue:', queue); + } + }; + + MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { + var key = this._get_queue_key(queue); + default_val = _.isUndefined(default_val) ? {} : default_val; + return this['props'][key] || (this['props'][key] = default_val); + }; + + MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + timers[event_name] = timestamp; + this['props'][EVENT_TIMERS_KEY] = timers; + this.save(); + }; + + MixpanelPersistence.prototype.remove_event_timer = function(event_name) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + var timestamp = timers[event_name]; + if (!_.isUndefined(timestamp)) { + delete this['props'][EVENT_TIMERS_KEY][event_name]; + this.save(); + } + return timestamp; + }; + + /** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + + + /** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; + /** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + + /** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + + /** @const */ var DECISION_NONE = 'none'; + /** @const */ var DECISION_OPTED_IN = 'opted_in'; + /** @const */ var DECISION_OPTED_OUT = 'opted_out'; + // Do Not Track counts as an objection + /** @const */ var DECISION_OBJECTED = 'objected'; + + /** @const */ var STATE_FULL = 'full'; + /** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; + /** @const */ var STATE_BLOCKED = 'blocked'; + + /** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} + }; + + /** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ + /** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} + }; + + /** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ + function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console$1.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; + } + + /** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ + function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; + } + + /** + * GDPR utils + * + * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection + * and privacy for all individuals within the European Union. It addresses the export of personal + * data outside the EU. The GDPR aims primarily to give control back to citizens and residents + * over their personal data and to simplify the regulatory environment for international business + * by unifying the regulation within the EU. + * + * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. + * These functions are used internally by the SDK and are not intended to be publicly exposed. + */ + + + /** + * A function used to track a Mixpanel event (e.g. MixpanelLib.track) + * @callback trackFunction + * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. + * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. + * @param {Function} [callback] If provided, the callback function will be called after tracking the event. + */ + + /** Public **/ + + var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; + + /** + * Opt the user in to data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function optIn(token, options) { + _optInOut(true, token, options); + } + + /** + * Opt the user out of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not + */ + function optOut(token, options) { + _optInOut(false, token, options); + } + + /** + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ + function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; + } + + /** + * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function clearOptInOut(token, options) { + options = options || {}; + _getStorage(options).remove( + _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain + ); + } + + /** Private **/ + + /** + * Get storage util + * @param {Object} [options] + * @param {string} [options.persistenceType] + * @returns {object} either _.cookie or _.localstorage + */ + function _getStorage(options) { + options = options || {}; + return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; + } + + /** + * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the name of the cookie for the given opt type + */ + function _getStorageKey(token, options) { + options = options || {}; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; + } + + /** + * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the value of the cookie for the given opt type + */ + function readOptInOutFlag(token, options) { + return _getStorage(options).get(_getStorageKey(token, options)); + } + + /** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ + function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); + } + + /** + * Check whether the user has set the DNT/doNotTrack setting to true in their browser + * @param {Object} [options] + * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests + * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false + * @returns {boolean} whether the DNT setting is true + */ + function hasDoNotTrackFlagOn(options) { + if (options && options.ignoreDnt) { + return false; + } + var win$1 = (options && options.window) || win; + var nav = win$1['navigator'] || {}; + var hasDntOn = false; + + _.each([ + nav['doNotTrack'], // standard + nav['msDoNotTrack'], + win$1['doNotTrack'] + ], function(dntValue) { + if (_.includes([true, 1, '1', 'yes'], dntValue)) { + hasDntOn = true; + } + }); + + return hasDntOn; + } + + /** + * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type + * @param {boolean} optValue - whether to opt the user in or out for the given opt type + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function _optInOut(optValue, token, options) { + if (!_.isString(token) || !token.length) { + console$1.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + return; + } + + options = options || {}; + + _getStorage(options).set( + _getStorageKey(token, options), + optValue ? 1 : 0, + _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, + !!options.crossSubdomainCookie, + !!options.secureCookie, + !!options.crossSiteCookie, + options.cookieDomain + ); + + if (options.track && optValue) { // only track event if opting in (optValue=true) + options.track(options.trackEventName || '$opt_in', options.trackProperties, { + 'send_immediately': true + }); + } + } + + /** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. */ - /** @const */ var SET_QUEUE_KEY = '__mps'; - /** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; - /** @const */ var UNSET_QUEUE_KEY = '__mpus'; - /** @const */ var ADD_QUEUE_KEY = '__mpa'; - /** @const */ var APPEND_QUEUE_KEY = '__mpap'; - /** @const */ var REMOVE_QUEUE_KEY = '__mpr'; - /** @const */ var UNION_QUEUE_KEY = '__mpu'; - // This key is deprecated, but we want to check for it to see whether aliasing is allowed. - /** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; - /** @const */ var ALIAS_ID_KEY = '__alias'; - /** @const */ var EVENT_TIMERS_KEY = '__timers'; - /** @const */ var RESERVED_PROPERTIES = [ - SET_QUEUE_KEY, - SET_ONCE_QUEUE_KEY, - UNSET_QUEUE_KEY, - ADD_QUEUE_KEY, - APPEND_QUEUE_KEY, - REMOVE_QUEUE_KEY, - UNION_QUEUE_KEY, - PEOPLE_DISTINCT_ID_KEY, - ALIAS_ID_KEY, - EVENT_TIMERS_KEY - ]; + /** - * Mixpanel Persistence Object * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges */ - var MixpanelPersistence = function(config) { - this['props'] = {}; - this.campaign_params_saved = false; - - if (config['persistence_name']) { - this.name = 'mp_' + config['persistence_name']; - } else { - this.name = 'mp_' + config['token'] + '_mixpanel'; - } + var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; + }; - var storage_type = config['persistence']; - if (storage_type !== 'cookie' && storage_type !== 'localStorage') { - console$1.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; + /** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ + OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; - } else { - this.storage = _.cookie; + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); }; - MixpanelPersistence.prototype.properties = function() { - var p = {}; - - this.load(); - - // Filter out reserved properties - _.each(this['props'], function(v, k) { - if (!_.include(RESERVED_PROPERTIES, k)) { - p[k] = v; - } - }); - return p; + // opt_out_tracking_by_default applies only without consent_mode, which replaces it + OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); }; - MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } + /** + * @returns {string} + */ + OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; + }; - var entry = this.storage.parse(this.name); + /** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ + OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; + }; - if (entry) { - this['props'] = _.extend({}, entry); - } + /** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ + OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; - MixpanelPersistence.prototype.upgrade = function() { - var old_cookie, - old_localstorage; + /** + * @param {Object} [options] opt_in_tracking() options + */ + OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); + }; - // if transferring from cookie to localStorage or vice-versa, copy existing - // super properties over to new storage mode - if (this.storage === _.localStorage) { - old_cookie = _.cookie.parse(this.name); + /** + * @param {Object} [options] opt_out_tracking() options + */ + OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); - _.cookie.remove(this.name); - _.cookie.remove(this.name, true); + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } - if (old_cookie) { - this.register_once(old_cookie); - } - } else if (this.storage === _.cookie) { - old_localstorage = _.localStorage.parse(this.name); + this._writeFlag(optOut, options); + this._updatePersistence(options); + }; - _.localStorage.remove(this.name); + /** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ + OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); + }; - if (old_localstorage) { - this.register_once(old_localstorage); - } + /** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ + OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); } }; - MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - - this.storage.set( - this.name, - JSONStringify(this['props']), - this.expire_days, - this.cross_subdomain, - this.secure, - this.cross_site, - this.cookie_domain - ); - }; + /** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ + OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); - MixpanelPersistence.prototype.load_prop = function(key) { - this.load(); - return this['props'][key]; - }; + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } - MixpanelPersistence.prototype.remove = function() { - // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); }; - // removes the storage entry and deletes all loaded data - // forced name for tests - MixpanelPersistence.prototype.clear = function() { - this.remove(); - this['props'] = {}; + /** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ + OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); }; /** - * @param {Object} props - * @param {*=} default_value - * @param {number=} days - */ - MixpanelPersistence.prototype.register_once = function(props, default_value, days) { - if (_.isObject(props)) { - if (typeof(default_value) === 'undefined') { default_value = 'None'; } - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ + OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); - this.load(); + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } - _.each(props, function(val, prop) { - if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { - this['props'][prop] = val; - } - }, this); + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); + }; - this.save(); + /** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ - return true; - } - return false; - }; /** - * @param {Object} props - * @param {number=} days - */ - MixpanelPersistence.prototype.register = function(props, days) { - if (_.isObject(props)) { - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ + var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; + }; - this.load(); - _.extend(this['props'], props); - this.save(); + // delete what an earlier page stored without consent + ConsentDecisions.prototype.init = function() { + this._reconcile(); + }; - return true; + /** + * @returns {string} + */ + ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; } - return false; + return this.appliedState; }; - MixpanelPersistence.prototype.unregister = function(prop) { - this.load(); - if (prop in this['props']) { - delete this['props'][prop]; - this.save(); - } + /** + * @returns {boolean} + */ + ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; }; - MixpanelPersistence.prototype.update_search_keyword = function(referrer) { - this.register(_.info.searchInfo(referrer)); + /** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ + ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; - // EXPORTED METHOD, we test this directly. - MixpanelPersistence.prototype.update_referrer_info = function(referrer) { - // If referrer doesn't exist, we want to note the fact that it was type-in traffic. - this.register_once({ - '$initial_referrer': referrer || '$direct', - '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' - }, ''); + /** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ + ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); }; - MixpanelPersistence.prototype.get_referrer_info = function() { - return _.strip_empty_properties({ - '$initial_referrer': this['props']['$initial_referrer'], - '$initial_referring_domain': this['props']['$initial_referring_domain'] - }); + ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); }; - MixpanelPersistence.prototype.update_config = function(config) { - this.default_expiry = this.expire_days = config['cookie_expiration']; - this.set_disabled(config['disable_persistence']); - this.set_cookie_domain(config['cookie_domain']); - this.set_cross_site(config['cross_site_cookie']); - this.set_cross_subdomain(config['cross_subdomain_cookie']); - this.set_secure(config['secure_cookie']); + ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); }; - MixpanelPersistence.prototype.set_disabled = function(disabled) { - this.disabled = disabled; - if (this.disabled) { - this.remove(); - } else { - this.save(); + /** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ + ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } + }; + + ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; }; - MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { - if (cookie_domain !== this.cookie_domain) { - this.remove(); - this.cookie_domain = cookie_domain; - this.save(); + /** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ + ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); } }; - MixpanelPersistence.prototype.set_cross_site = function(cross_site) { - if (cross_site !== this.cross_site) { - this.cross_site = cross_site; - this.remove(); - this.save(); + /** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ + ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; } + this._writeDecisionKey(this._decisionKey(), flag); }; - MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { - if (cross_subdomain !== this.cross_subdomain) { - this.cross_subdomain = cross_subdomain; - this.remove(); - this.save(); + /** + * @param {string} key + * @param {string|null} value null to remove it + */ + ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); } }; - MixpanelPersistence.prototype.get_cross_subdomain = function() { - return this.cross_subdomain; + // the store the persistence uses, chosen without the localStorage support probe, which writes a key + ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); }; - MixpanelPersistence.prototype.set_secure = function(secure) { - if (secure !== this.secure) { - this.secure = secure ? true : false; - this.remove(); - this.save(); - } + ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; }; - MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { - var q_key = this._get_queue_key(queue), - q_data = data[queue], - set_q = this._get_or_create_queue(SET_ACTION), - set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), - unset_q = this._get_or_create_queue(UNSET_ACTION), - add_q = this._get_or_create_queue(ADD_ACTION), - union_q = this._get_or_create_queue(UNION_ACTION), - remove_q = this._get_or_create_queue(REMOVE_ACTION, []), - append_q = this._get_or_create_queue(APPEND_ACTION, []); + ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); + }; - if (q_key === SET_QUEUE_KEY) { - // Update the set queue - we can override any existing values - _.extend(set_q, q_data); - // if there was a pending increment, override it - // with the set. - this._pop_from_people_queue(ADD_ACTION, q_data); - // if there was a pending union, override it - // with the set. - this._pop_from_people_queue(UNION_ACTION, q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === SET_ONCE_QUEUE_KEY) { - // only queue the data if there is not already a set_once call for it. - _.each(q_data, function(v, k) { - if (!(k in set_once_q)) { - set_once_q[k] = v; - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNSET_QUEUE_KEY) { - _.each(q_data, function(prop) { + /** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ + ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); + }; - // undo previously-queued actions on this key - _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { - if (prop in enqueued_obj) { - delete enqueued_obj[prop]; - } - }); - _.each(append_q, function(append_obj) { - if (prop in append_obj) { - delete append_obj[prop]; - } - }); + /** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ + ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); + }; - unset_q[prop] = true; + /** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + + /** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ + function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; }); - } else if (q_key === ADD_QUEUE_KEY) { - _.each(q_data, function(v, k) { - // If it exists in the set queue, increment - // the value - if (k in set_q) { - set_q[k] += v; - } else { - // If it doesn't exist, update the add - // queue - if (!(k in add_q)) { - add_q[k] = 0; - } - add_q[k] += v; - } - }, this); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNION_QUEUE_KEY) { - _.each(q_data, function(v, k) { - if (_.isArray(v)) { - if (!(k in union_q)) { - union_q[k] = []; - } - // Prevent duplicate values - _.each(v, function(item) { - if (!_.include(union_q[k], item)) { - union_q[k].push(item); - } - }); - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === REMOVE_QUEUE_KEY) { - remove_q.push(q_data); - this._pop_from_people_queue(APPEND_ACTION, q_data); - } else if (q_key === APPEND_QUEUE_KEY) { - append_q.push(q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); + if (same) { + answers[capability] = answer; + } + }); + return answers; + } + + /** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ + var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; + }; + + /** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ + ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; } + return CONSENT_STATES[this.state()][capability]; + }; - console$1.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); - console$1.log(data); + /** + * @returns {string} + */ + ConsentManager.prototype.state = function() { + return this.decisions.state(); + }; - this.save(); + /** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ + ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; }; - MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { - var q = this['props'][this._get_queue_key(queue)]; - if (!_.isUndefined(q)) { - _.each(data, function(v, k) { - if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { - // list actions: only remove if both k+v match - // e.g. remove should not override append in a case like - // append({foo: 'bar'}); remove({foo: 'qux'}) - _.each(q, function(queued_action) { - if (queued_action[k] === v) { - delete queued_action[k]; - } - }); - } else { - delete q[k]; - } - }, this); - } + /** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ + ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; }; - MixpanelPersistence.prototype.load_queue = function(queue) { - return this.load_prop(this._get_queue_key(queue)); + /** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ + ConsentManager.prototype.init = function() { + this.decisions.init(); }; - MixpanelPersistence.prototype._get_queue_key = function(queue) { - if (queue === SET_ACTION) { - return SET_QUEUE_KEY; - } else if (queue === SET_ONCE_ACTION) { - return SET_ONCE_QUEUE_KEY; - } else if (queue === UNSET_ACTION) { - return UNSET_QUEUE_KEY; - } else if (queue === ADD_ACTION) { - return ADD_QUEUE_KEY; - } else if (queue === APPEND_ACTION) { - return APPEND_QUEUE_KEY; - } else if (queue === REMOVE_ACTION) { - return REMOVE_QUEUE_KEY; - } else if (queue === UNION_ACTION) { - return UNION_QUEUE_KEY; - } else { - console$1.error('Invalid queue:', queue); - } + /** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ + ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); }; - MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { - var key = this._get_queue_key(queue); - default_val = _.isUndefined(default_val) ? {} : default_val; - return this['props'][key] || (this['props'][key] = default_val); + /** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ + ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); }; - MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - timers[event_name] = timestamp; - this['props'][EVENT_TIMERS_KEY] = timers; - this.save(); + /** + * @param {Object} [options] opt_in_tracking() options + */ + ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); }; - MixpanelPersistence.prototype.remove_event_timer = function(event_name) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - var timestamp = timers[event_name]; - if (!_.isUndefined(timestamp)) { - delete this['props'][EVENT_TIMERS_KEY][event_name]; - this.save(); - } - return timestamp; + /** + * @param {Object} [options] opt_out_tracking() options + */ + ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); + }; + + /** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ + ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); }; /* eslint camelcase: "off" */ @@ -29205,6 +30017,7 @@ define((function () { 'use strict'; 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -29271,26 +30084,9 @@ define((function () { 'use strict'; instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -29385,6 +30181,19 @@ define((function () { 'use strict'; 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -29392,6 +30201,7 @@ define((function () { 'use strict'; getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -29409,64 +30219,16 @@ define((function () { 'use strict'; }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console$1.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console$1.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && win.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - win.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - win.addEventListener('visibilitychange', function() { - if (document$1['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - var uuid = _.UUID(); - if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -29476,12 +30238,52 @@ define((function () { 'use strict'; setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); + }; + + MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } + }; + + // the services that store or send on their own; at init, and again on an opt-in under 'require_consent' + MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -29493,21 +30295,174 @@ define((function () { 'use strict'; } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } + }; - this.autocapture = new Autocapture(this); - this.autocapture.init(); + /** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ + MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); + }; + + /** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ + MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); + }; + + /** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ + MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); + }; + + MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); + }; + + MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console$1.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console$1.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + consentGate: this._consent, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + + if (sendBeacon && win.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + win.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + win.addEventListener('visibilitychange', function() { + if (document$1['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } + } + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { + this.start_batch_senders(); + } + }; + + MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); }; /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ + MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); + }; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console$1.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console$1.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -29538,9 +30493,12 @@ define((function () { 'use strict'; return this.tab_id || null; }; - MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { + MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); - }); + }; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -29630,7 +30588,7 @@ define((function () { 'use strict'; this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -29692,6 +30650,15 @@ define((function () { 'use strict'; MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console$1.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -29849,6 +30816,10 @@ define((function () { 'use strict'; }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -29986,48 +30957,6 @@ define((function () { 'use strict'; return this._batcher_configs; }; - MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } - }; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -30165,7 +31094,6 @@ define((function () { 'use strict'; return request_enqueued_or_initiated && truncated_data; }; - MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -30190,7 +31118,17 @@ define((function () { 'use strict'; * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ - function(event_name, properties, options, callback) { + MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -30202,10 +31140,6 @@ define((function () { 'use strict'; } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -30296,9 +31230,8 @@ define((function () { 'use strict'; } return ret; - }); + }; - MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -30314,7 +31247,13 @@ define((function () { 'use strict'; * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ - function(group_key, group_ids, callback) { + MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -30322,9 +31261,8 @@ define((function () { 'use strict'; prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); - }); + }; - MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -30337,7 +31275,13 @@ define((function () { 'use strict'; * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(group_key, group_id, callback) { + MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -30351,9 +31295,8 @@ define((function () { 'use strict'; } } return this['people'].union(group_key, group_id, callback); - }); + }; - MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -30366,7 +31309,13 @@ define((function () { 'use strict'; * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(group_key, group_id, callback) { + MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -30380,9 +31329,8 @@ define((function () { 'use strict'; } } return this['people'].remove(group_key, group_id, callback); - }); + }; - MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -30396,7 +31344,7 @@ define((function () { 'use strict'; * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(event_name, properties, groups, callback) { + MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -30404,7 +31352,7 @@ define((function () { 'use strict'; } }); return this.track(event_name, tracking_props, callback); - }); + }; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -30431,13 +31379,12 @@ define((function () { 'use strict'; var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; - MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -30483,7 +31430,7 @@ define((function () { 'use strict'; * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ - function(properties, options) { + MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -30507,7 +31454,7 @@ define((function () { 'use strict'; } return this.track(event_name, event_properties); - }); + }; /** * Track clicks on a set of document elements. Selector must be a @@ -30770,6 +31717,10 @@ define((function () { 'use strict'; * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -30782,6 +31733,12 @@ define((function () { 'use strict'; // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console$1.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -30846,11 +31803,11 @@ define((function () { 'use strict'; this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -30912,6 +31869,11 @@ define((function () { 'use strict'; * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console$1.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -31041,6 +32003,11 @@ define((function () { 'use strict'; * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -31092,6 +32059,11 @@ define((function () { 'use strict'; */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console$1.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -31220,105 +32192,42 @@ define((function () { 'use strict'; _.include(this.__disabled_events, event_name); }; - // perform some housekeeping around GDPR opt-in/out state - MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } + /** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ + MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ - MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; + MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; - // call a base gdpr function after constructing the appropriate token and options args - MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; + // delete the identified user's profile and charges, which the opt-out about to happen would block + MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); }; /** @@ -31340,6 +32249,10 @@ define((function () { 'use strict'; * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -31354,12 +32267,7 @@ define((function () { 'use strict'; * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -31377,6 +32285,10 @@ define((function () { 'use strict'; * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -31389,19 +32301,7 @@ define((function () { 'use strict'; * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -31413,13 +32313,15 @@ define((function () { 'use strict'; * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -31431,13 +32333,16 @@ define((function () { 'use strict'; * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -31456,6 +32361,11 @@ define((function () { 'use strict'; * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -31467,12 +32377,7 @@ define((function () { 'use strict'; * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -31536,6 +32441,7 @@ define((function () { 'use strict'; MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; + MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/dist/mixpanel.cjs.d.ts b/dist/mixpanel.cjs.d.ts index 6c9c4660..a0156e5f 100644 --- a/dist/mixpanel.cjs.d.ts +++ b/dist/mixpanel.cjs.d.ts @@ -10,6 +10,15 @@ export type Query = string | Element | Element[]; export type RemoteSettingType = "disabled" | "fallback" | "strict"; +/** + * What the SDK does before the visitor decides. "no_consent_required" tracks until + * opt_out_tracking(). "require_consent" stores and sends nothing until opt_in_tracking(); with it, + * opt_out_tracking_persistence_type and opt_out_persistence_by_default are ignored, and + * opt_out_tracking_cookie_prefix still names the stored flag. Unset means "no_consent_required"; + * opt_out_tracking_by_default applies only when consent_mode is unset. + */ +export type ConsentMode = "no_consent_required" | "require_consent" | null; + export interface EventTriggerProps { percentage: number; @@ -267,6 +276,7 @@ export interface Config { opt_out_persistence_by_default: boolean; opt_out_tracking_persistence_type: Persistence; opt_out_tracking_cookie_prefix: string; + consent_mode: ConsentMode; inapp_protocol: string; inapp_link_new_window: boolean; ignore_dnt: boolean; diff --git a/dist/mixpanel.cjs.js b/dist/mixpanel.cjs.js index d2bb699d..c0294edb 100644 --- a/dist/mixpanel.cjs.js +++ b/dist/mixpanel.cjs.js @@ -27,7 +27,7 @@ if (typeof(window) === 'undefined') { var Config = { DEBUG: false, - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules @@ -20836,11 +20836,13 @@ _['NPO'] = NpoPromise; /** * @type {import('./wrapper').StorageWrapper} */ -var IDBStorageWrapper = function (dbName, storeName, versionData) { +var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -20851,25 +20853,47 @@ IDBStorageWrapper.prototype._openDb = function () { var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -20969,622 +20993,312 @@ var RECORDER_VERSION_DATA = { storeNames: [RECORDING_EVENTS_STORE_NAME, RECORDING_REGISTRY_STORE_NAME] }; +var logger$9 = console_with_prefix('lock'); + /** - * GDPR utils + * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser + * window/tab at a time will be able to access shared resources. * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. + * Based on the Alur and Taubenfeld fast lock + * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html) + * with an added timeout to ensure there will be eventual progress in the event + * that a window is closed in the middle of the callback. * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. + * Implementation based on the original version by David Wolever (https://github.com/wolever) + * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432. + * + * @example + * const myLock = new SharedLock('some-key'); + * myLock.withLock(function() { + * console.log('I hold the mutex!'); + * }); + * + * @constructor */ +var SharedLock = function(key, options) { + options = options || {}; + this.storageKey = key; + this.storage = options.storage || getLocalStorage(); + this.pollIntervalMS = options.pollIntervalMS || 100; + this.timeoutMS = options.timeoutMS || 2000; -/** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ + // dependency-inject promise implementation for testing purposes + this.promiseImpl = options.promiseImpl || PromisePolyfill; +}; -/** Public **/ +// pass in a specific pid to test contention scenarios; otherwise +// it is chosen randomly for each acquisition attempt +SharedLock.prototype.withLock = function(lockedCB, pid) { + var Promise = this.promiseImpl; + return new Promise(_.bind(function (resolve, reject) { + var i = pid || (new Date().getTime() + '|' + Math.random()); + var startTime = new Date().getTime(); + var key = this.storageKey; + var pollIntervalMS = this.pollIntervalMS; + var timeoutMS = this.timeoutMS; + var storage = this.storage; -var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; + var keyX = key + ':X'; + var keyY = key + ':Y'; + var keyZ = key + ':Z'; -/** - * Opt the user in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function optIn(token, options) { - _optInOut(true, token, options); -} + var delay = function(cb) { + if (new Date().getTime() - startTime > timeoutMS) { + logger$9.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']'); + storage.removeItem(keyZ); + storage.removeItem(keyY); + loop(); + return; + } + setTimeout(function() { + try { + cb(); + } catch(err) { + reject(err); + } + }, pollIntervalMS * (Math.random() + 0.1)); + }; -/** - * Opt the user out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not - */ -function optOut(token, options) { - _optInOut(false, token, options); -} + var waitFor = function(predicate, cb) { + if (predicate()) { + cb(); + } else { + delay(function() { + waitFor(predicate, cb); + }); + } + }; -/** - * Check whether the user has opted in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {boolean} whether the user has opted in to the given opt type - */ -function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; -} + var getSetY = function() { + var valY = storage.getItem(keyY); + if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases) + return false; + } else { + storage.setItem(keyY, i); + if (storage.getItem(keyY) === i) { + return true; + } else { + if (!localStorageSupported(storage, true)) { + reject(new Error('localStorage support dropped while acquiring lock')); + } + return false; + } + } + }; -/** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ -function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); - } - return optedOut; -} + var loop = function() { + storage.setItem(keyX, i); -/** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); -} + waitFor(getSetY, function() { + if (storage.getItem(keyX) === i) { + criticalSection(); + return; + } -/** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} + delay(function() { + if (storage.getItem(keyY) !== i) { + loop(); + return; + } + waitFor(function() { + return !storage.getItem(keyZ); + }, criticalSection); + }); + }); + }; -/** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ -function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); -} + var criticalSection = function() { + storage.setItem(keyZ, '1'); + var removeLock = function () { + storage.removeItem(keyZ); + if (storage.getItem(keyY) === i) { + storage.removeItem(keyY); + } + if (storage.getItem(keyX) === i) { + storage.removeItem(keyX); + } + }; -/** - * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ -function clearOptInOut(token, options) { - options = options || {}; - _getStorage(options).remove( - _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain - ); -} + lockedCB() + .then(function (ret) { + removeLock(); + resolve(ret); + }) + .catch(function (err) { + removeLock(); + reject(err); + }); + }; -/** Private **/ + try { + if (localStorageSupported(storage, true)) { + loop(); + } else { + throw new Error('localStorage support check failed'); + } + } catch(err) { + reject(err); + } + }, this)); +}; /** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage + * @type {import('./wrapper').StorageWrapper} */ -function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; -} +var LocalStorageWrapper = function (storageOverride) { + this.storage = storageOverride || getLocalStorage(); +}; -/** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type - */ -function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; -} +LocalStorageWrapper.prototype.init = function () { + if (!this.storage) { + return PromisePolyfill.reject(new Error('localStorage is not available')); + } + return PromisePolyfill.resolve(); +}; -/** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type - */ -function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); -} +LocalStorageWrapper.prototype.isInitialized = function () { + return true; +}; -/** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read - */ -function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; - } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; -} +LocalStorageWrapper.prototype.setItem = function (key, value) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + try { + this.storage.setItem(key, JSONStringify(value)); + } catch (e) { + reject(e); + } + resolve(); + }, this)); +}; -/** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true - */ -function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; - } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; +LocalStorageWrapper.prototype.getItem = function (key) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + var item; + try { + item = JSONParse(this.storage.getItem(key)); + } catch (e) { + reject(e); + } + resolve(item); + }, this)); +}; - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; +LocalStorageWrapper.prototype.removeItem = function (key) { + return new PromisePolyfill(_.bind(function (resolve, reject) { + try { + this.storage.removeItem(key); + } catch (e) { + reject(e); } - }); + resolve(); + }, this)); +}; - return hasDntOn; -} +var logger$8 = console_with_prefix('batch'); /** - * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type - * @param {boolean} optValue - whether to opt the user in or out for the given opt type - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + * RequestQueue: queue for batching API requests with localStorage backup for retries. + * Maintains an in-memory queue which represents the source of truth for the current + * page, but also writes all items out to a copy in the browser's localStorage, which + * can be read on subsequent pageloads and retried. For batchability, all the request + * items in the queue should be of the same type (events, people updates, group updates) + * so they can be sent in a single request to the same API endpoint. + * + * LocalStorage keying and locking: In order for reloads and subsequent pageloads of + * the same site to access the same persisted data, they must share the same localStorage + * key (for instance based on project token and queue type). Therefore access to the + * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent + * simultaneously open windows/tabs from overwriting each other's data (which would lead + * to data loss in some situations). + * @constructor */ -function _optInOut(optValue, token, options) { - if (!_.isString(token) || !token.length) { - console$1.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); - return; - } - +var RequestQueue = function (storageKey, options) { options = options || {}; - - _getStorage(options).set( - _getStorageKey(token, options), - optValue ? 1 : 0, - _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, - !!options.crossSubdomainCookie, - !!options.secureCookie, - !!options.crossSiteCookie, - options.cookieDomain - ); - - if (options.track && optValue) { // only track event if opting in (optValue=true) - options.track(options.trackEventName || '$opt_in', options.trackProperties, { - 'send_immediately': true + this.storageKey = storageKey; + this.usePersistence = options.usePersistence; + if (this.usePersistence) { + this.queueStorage = options.queueStorage || new LocalStorageWrapper(); + this.lock = new SharedLock(storageKey, { + storage: options.sharedLockStorage, + timeoutMS: options.sharedLockTimeoutMS, }); } -} - -/** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out - */ -function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; + this.reportError = options.errorReporter || _.bind(logger$8.error, logger$8); + this.consentGate = options.consentGate; - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console$1.error('Unexpected error when checking tracking opt-out status: ' + err); - } + this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios - if (!optedOut) { - return method.apply(this, arguments); - } + this.memQueue = []; + this.initialized = false; - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { - callback(0); - } + if (options.enqueueThrottleMs) { + this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs); + } else { + this.enqueuePersisted = _.bind(function (queueEntry) { + return this._enqueuePersisted([queueEntry]); + }, this); + } +}; - return; - }; -} +RequestQueue.prototype.ensureInit = function () { + if (this.initialized || !this.usePersistence) { + return PromisePolyfill.resolve(); + } -var logger$9 = console_with_prefix('lock'); + return this.queueStorage + .init() + .then(_.bind(function () { + this.initialized = true; + }, this)) + .catch(_.bind(function (err) { + this.reportError('Error initializing queue persistence. Disabling persistence', err); + this.initialized = true; + this.usePersistence = false; + }, this)); +}; /** - * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser - * window/tab at a time will be able to access shared resources. - * - * Based on the Alur and Taubenfeld fast lock - * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html) - * with an added timeout to ensure there will be eventual progress in the event - * that a window is closed in the middle of the callback. - * - * Implementation based on the original version by David Wolever (https://github.com/wolever) - * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432. - * - * @example - * const myLock = new SharedLock('some-key'); - * myLock.withLock(function() { - * console.log('I hold the mutex!'); - * }); + * Add one item to queues (memory and localStorage). The queued entry includes + * the given item along with an auto-generated ID and a "flush-after" timestamp. + * It is expected that the item will be sent over the network and dequeued + * before the flush-after time; if this doesn't happen it is considered orphaned + * (e.g., the original tab where it was enqueued got closed before it could be + * sent) and the item can be sent by any tab that finds it in localStorage. * - * @constructor + * The final callback param is called with a param indicating success or + * failure of the enqueue operation; it is asynchronous because the localStorage + * lock is asynchronous. */ -var SharedLock = function(key, options) { - options = options || {}; +RequestQueue.prototype.enqueue = function (item, flushInterval) { + var queueEntry = { + 'id': cheap_guid(), + 'flushAfter': new Date().getTime() + flushInterval * 2, + 'payload': item + }; - this.storageKey = key; - this.storage = options.storage || getLocalStorage(); - this.pollIntervalMS = options.pollIntervalMS || 100; - this.timeoutMS = options.timeoutMS || 2000; + if (!this._persists()) { + this.memQueue.push(queueEntry); + return PromisePolyfill.resolve(true); + } else { + return this.enqueuePersisted(queueEntry); + } +}; - // dependency-inject promise implementation for testing purposes - this.promiseImpl = options.promiseImpl || PromisePolyfill; -}; - -// pass in a specific pid to test contention scenarios; otherwise -// it is chosen randomly for each acquisition attempt -SharedLock.prototype.withLock = function(lockedCB, pid) { - var Promise = this.promiseImpl; - return new Promise(_.bind(function (resolve, reject) { - var i = pid || (new Date().getTime() + '|' + Math.random()); - var startTime = new Date().getTime(); - var key = this.storageKey; - var pollIntervalMS = this.pollIntervalMS; - var timeoutMS = this.timeoutMS; - var storage = this.storage; - - var keyX = key + ':X'; - var keyY = key + ':Y'; - var keyZ = key + ':Z'; - - var delay = function(cb) { - if (new Date().getTime() - startTime > timeoutMS) { - logger$9.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']'); - storage.removeItem(keyZ); - storage.removeItem(keyY); - loop(); - return; - } - setTimeout(function() { - try { - cb(); - } catch(err) { - reject(err); - } - }, pollIntervalMS * (Math.random() + 0.1)); - }; - - var waitFor = function(predicate, cb) { - if (predicate()) { - cb(); - } else { - delay(function() { - waitFor(predicate, cb); - }); - } - }; - - var getSetY = function() { - var valY = storage.getItem(keyY); - if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases) - return false; - } else { - storage.setItem(keyY, i); - if (storage.getItem(keyY) === i) { - return true; - } else { - if (!localStorageSupported(storage, true)) { - reject(new Error('localStorage support dropped while acquiring lock')); - } - return false; - } - } - }; - - var loop = function() { - storage.setItem(keyX, i); - - waitFor(getSetY, function() { - if (storage.getItem(keyX) === i) { - criticalSection(); - return; - } - - delay(function() { - if (storage.getItem(keyY) !== i) { - loop(); - return; - } - waitFor(function() { - return !storage.getItem(keyZ); - }, criticalSection); - }); - }); - }; - - var criticalSection = function() { - storage.setItem(keyZ, '1'); - var removeLock = function () { - storage.removeItem(keyZ); - if (storage.getItem(keyY) === i) { - storage.removeItem(keyY); - } - if (storage.getItem(keyX) === i) { - storage.removeItem(keyX); - } - }; - - lockedCB() - .then(function (ret) { - removeLock(); - resolve(ret); - }) - .catch(function (err) { - removeLock(); - reject(err); - }); - }; - - try { - if (localStorageSupported(storage, true)) { - loop(); - } else { - throw new Error('localStorage support check failed'); - } - } catch(err) { - reject(err); - } - }, this)); -}; - -/** - * @type {import('./wrapper').StorageWrapper} - */ -var LocalStorageWrapper = function (storageOverride) { - this.storage = storageOverride || getLocalStorage(); -}; - -LocalStorageWrapper.prototype.init = function () { - if (!this.storage) { - return PromisePolyfill.reject(new Error('localStorage is not available')); - } - return PromisePolyfill.resolve(); -}; - -LocalStorageWrapper.prototype.isInitialized = function () { - return true; -}; - -LocalStorageWrapper.prototype.setItem = function (key, value) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - try { - this.storage.setItem(key, JSONStringify(value)); - } catch (e) { - reject(e); - } - resolve(); - }, this)); -}; - -LocalStorageWrapper.prototype.getItem = function (key) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - var item; - try { - item = JSONParse(this.storage.getItem(key)); - } catch (e) { - reject(e); - } - resolve(item); - }, this)); -}; - -LocalStorageWrapper.prototype.removeItem = function (key) { - return new PromisePolyfill(_.bind(function (resolve, reject) { - try { - this.storage.removeItem(key); - } catch (e) { - reject(e); - } - resolve(); - }, this)); -}; - -var logger$8 = console_with_prefix('batch'); - -/** - * RequestQueue: queue for batching API requests with localStorage backup for retries. - * Maintains an in-memory queue which represents the source of truth for the current - * page, but also writes all items out to a copy in the browser's localStorage, which - * can be read on subsequent pageloads and retried. For batchability, all the request - * items in the queue should be of the same type (events, people updates, group updates) - * so they can be sent in a single request to the same API endpoint. - * - * LocalStorage keying and locking: In order for reloads and subsequent pageloads of - * the same site to access the same persisted data, they must share the same localStorage - * key (for instance based on project token and queue type). Therefore access to the - * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent - * simultaneously open windows/tabs from overwriting each other's data (which would lead - * to data loss in some situations). - * @constructor - */ -var RequestQueue = function (storageKey, options) { - options = options || {}; - this.storageKey = storageKey; - this.usePersistence = options.usePersistence; - if (this.usePersistence) { - this.queueStorage = options.queueStorage || new LocalStorageWrapper(); - this.lock = new SharedLock(storageKey, { - storage: options.sharedLockStorage, - timeoutMS: options.sharedLockTimeoutMS, - }); - } - this.reportError = options.errorReporter || _.bind(logger$8.error, logger$8); - - this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios - - this.memQueue = []; - this.initialized = false; - - if (options.enqueueThrottleMs) { - this.enqueuePersisted = batchedThrottle(_.bind(this._enqueuePersisted, this), options.enqueueThrottleMs); - } else { - this.enqueuePersisted = _.bind(function (queueEntry) { - return this._enqueuePersisted([queueEntry]); - }, this); - } -}; - -RequestQueue.prototype.ensureInit = function () { - if (this.initialized || !this.usePersistence) { - return PromisePolyfill.resolve(); - } - - return this.queueStorage - .init() - .then(_.bind(function () { - this.initialized = true; - }, this)) - .catch(_.bind(function (err) { - this.reportError('Error initializing queue persistence. Disabling persistence', err); - this.initialized = true; - this.usePersistence = false; - }, this)); -}; - -/** - * Add one item to queues (memory and localStorage). The queued entry includes - * the given item along with an auto-generated ID and a "flush-after" timestamp. - * It is expected that the item will be sent over the network and dequeued - * before the flush-after time; if this doesn't happen it is considered orphaned - * (e.g., the original tab where it was enqueued got closed before it could be - * sent) and the item can be sent by any tab that finds it in localStorage. - * - * The final callback param is called with a param indicating success or - * failure of the enqueue operation; it is asynchronous because the localStorage - * lock is asynchronous. - */ -RequestQueue.prototype.enqueue = function (item, flushInterval) { - var queueEntry = { - 'id': cheap_guid(), - 'flushAfter': new Date().getTime() + flushInterval * 2, - 'payload': item - }; - - if (!this.usePersistence) { - this.memQueue.push(queueEntry); - return PromisePolyfill.resolve(true); - } else { - return this.enqueuePersisted(queueEntry); - } +/** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ +RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); }; RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -21684,7 +21398,7 @@ RequestQueue.prototype.removeItemsByID = function (ids) { }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -21772,7 +21486,7 @@ var updatePayloads = function (existingItems, itemsToUpdate) { */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -21827,11 +21541,14 @@ RequestQueue.prototype.readFromStorage = function () { RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); - }, this)) - .then(function () { - return true; - }) + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); + }, this)) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -21876,7 +21593,8 @@ var RequestBatcher = function(storageKey, options) { sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -23908,6 +23626,8 @@ function isUserEvent(ev) { /** * @typedef {Object} SessionRecordingOptions * @property {Object} [options.mixpanelInstance] - reference to the core MixpanelLib + * @property {import('../consent-gate').ConsentGate} options.consentGate - what the recording asks + * before it stores or sends * @property {String} [options.replayId] - unique uuid for a single replay * @property {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout * @property {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length @@ -23938,6 +23658,7 @@ function isUserEvent(ev) { */ var SessionRecording = function(options) { this._mixpanel = options.mixpanelInstance; + this.consentGate = options.consentGate; this._onIdleTimeout = options.onIdleTimeout || NOOP_FUNC; this._onMaxLengthReached = options.onMaxLengthReached || NOOP_FUNC; this._onBatchSent = options.onBatchSent || NOOP_FUNC; @@ -23964,7 +23685,7 @@ var SessionRecording = function(options) { // disable persistence if localStorage is not supported // request-queue will automatically disable persistence if indexedDB fails to initialize - var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && !this.getConfig('disable_persistence'); + var usePersistence = localStorageSupported(options.sharedLockStorage || getLocalStorage(), true) && this.consentGate.allowsPersistence(); // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings this.batcherKey = '__mprec_' + this.getConfig('name') + '_' + this.getConfig('token') + '_' + this.replayId; @@ -23978,6 +23699,7 @@ var SessionRecording = function(options) { sharedLockStorage: options.sharedLockStorage, usePersistence: usePersistence, stopAllBatchingFunc: this.stopRecording.bind(this), + consentGate: this.consentGate, // increased throttle and shared lock timeout because recording events are very high frequency. // this will minimize the amount of lock contention between enqueued events. @@ -24033,13 +23755,6 @@ SessionRecording.prototype.getConfig = function(configVar) { return this._mixpanel.get_config(configVar); }; -// Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which -// reaches into this class instance and expects the snake case version of the function. -// eslint-disable-next-line camelcase -SessionRecording.prototype.get_config = function(configVar) { - return this.getConfig(configVar); -}; - SessionRecording.prototype.startRecording = function (shouldStopBatcher) { if (this._rrwebRecord === null) { this.reportError('rrweb record function not provided. '); @@ -24214,19 +23929,15 @@ SessionRecording.prototype.isRrwebStopped = function () { /** - * Flushes the current batch of events to the server, but passes an opt-out callback to make sure - * we stop recording and dump any queued events if the user has opted out. + * Flushes the current batch of events to the server, or stops recording if consent stops the calls. */ SessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) { - var onOptOut = function (code) { - // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out - if (code === 0) { - this.stopRecording(); - cb({error: 'Tracking has been opted out, stopping recording.'}); - } - }.bind(this); - - this._flushEvents(data, options, cb, onOptOut); + if (!this.consentGate.allowsApiCalls()) { + this.stopRecording(); + cb({error: 'Tracking has been opted out, stopping recording.'}); + return; + } + this._flushEvents(data, options, cb); }; /** @@ -24282,7 +23993,12 @@ SessionRecording.prototype._getApiRoute = function () { return this.getConfig('api_routes')['record']; }; +// consent can be withdrawn while the batch is compressed, so it is checked again before sending SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) { + if (!this.consentGate.allowsApiCalls()) { + callback(0); + return; + } var onSuccess = function (response, responseBody) { // Update batch specific props only if the request was successful to guarantee ordering. // RequestBatcher will always flush the next batch after the previous one succeeds. @@ -24319,7 +24035,7 @@ SessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, r }); }; -SessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) { +SessionRecording.prototype._flushEvents = function(data, options, callback) { var numEvents = data.length; if (numEvents > 0) { @@ -24386,7 +24102,7 @@ SessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (da sendUncompressed(); } } -}); +}; SessionRecording.prototype.reportError = function(msg, err) { @@ -24441,9 +24157,10 @@ SessionRecording.prototype._getRecordMinMs = function() { */ SessionRecording.prototype._getMaskFn = function(shouldMaskFn, privacyConfig) { return function(text, element) { - // prevent visual artifacts from random whitespace + // whitespace-only text has nothing to mask, and dropping it would join adjacent words + // (e.g. a space text node between two inline elements) if (!text.trim().length) { - return ''; + return text; } var shouldMask = true; @@ -24471,11 +24188,12 @@ var RecordingRegistry = function (options) { this.idb = new IDBStorageWrapper(MIXPANEL_BROWSER_DB_NAME, RECORDING_REGISTRY_STORE_NAME, RECORDER_VERSION_DATA); this.errorReporter = options.errorReporter; this.mixpanelInstance = options.mixpanelInstance; + this.consentGate = options.consentGate; this.sharedLockStorage = options.sharedLockStorage; }; RecordingRegistry.prototype.isPersistenceEnabled = function() { - return !this.mixpanelInstance.get_config('disable_persistence'); + return this.consentGate.allowsPersistence(); }; RecordingRegistry.prototype.handleError = function (err) { @@ -24486,6 +24204,7 @@ RecordingRegistry.prototype.handleError = function (err) { * @param {import('./session-recording').SerializedRecording} serializedRecording */ RecordingRegistry.prototype.setActiveRecording = function (serializedRecording) { + // a recording that resumes after consent stops storage writes nothing if (!this.isPersistenceEnabled()) { return PromisePolyfill.resolve(); } @@ -24522,13 +24241,10 @@ RecordingRegistry.prototype.getActiveRecording = function () { }; RecordingRegistry.prototype.clearActiveRecording = function () { - if (this.isPersistenceEnabled()) { - // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. - // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. - return this.markActiveRecordingExpired(); - } else { - return this.deleteActiveRecording(); - } + // mark recording as expired instead of deleting it in case the page unloads mid-flush and doesn't make it to ingestion. + // this will ensure the next pageload will flush the remaining events, but not try to continue the recording. + // without persistence the entry is left as it is, and its unsent events wait for a load that allows them. + return this.markActiveRecordingExpired(); }; RecordingRegistry.prototype.markActiveRecordingExpired = function () { @@ -24542,16 +24258,6 @@ RecordingRegistry.prototype.markActiveRecordingExpired = function () { .catch(this.handleError.bind(this)); }; -RecordingRegistry.prototype.deleteActiveRecording = function () { - // avoid initializing IDB if this registry instance hasn't already written a recording - if (this.idb.isInitialized()) { - return this.idb.removeItem(this.mixpanelInstance.get_tab_id()) - .catch(this.handleError.bind(this)); - } else { - return PromisePolyfill.resolve(); - } -}; - /** * Flush any inactive recordings from the registry to minimize data loss. * The main idea here is that we can flush remaining rrweb events on the next page load if a tab is closed mid-batch. @@ -24574,6 +24280,7 @@ RecordingRegistry.prototype.flushInactiveRecordings = function () { .map(function (serializedRecording) { var sessionRecording = SessionRecording.deserialize(serializedRecording, { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, sharedLockStorage: this.sharedLockStorage }); return sessionRecording.unloadPersistedData() @@ -24589,6 +24296,79 @@ RecordingRegistry.prototype.flushInactiveRecordings = function () { .catch(this.handleError.bind(this)); }; +/** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + +/** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ +function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console$1.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; +} + +/** + * The consent gate the recorder bundle builds when it starts, and hands to its services. The core + * passes the bundle only its instance, so this asks the core's _consent_allows by its quoted name, + * the bundle being built separately. A core without it only knows the opt-out, through + * has_opted_out_tracking(). + * @param {Object} mixpanelInstance + * @returns {ConsentGate} + */ +function consentGateFor(mixpanelInstance) { + return buildConsentGate( + function(capability) { + var consentAllows = mixpanelInstance['_consent_allows']; + if (typeof consentAllows === 'function') { + return !!consentAllows.call(mixpanelInstance, capability); + } + return capability !== 'api_calls' || !mixpanelInstance.has_opted_out_tracking(); + }, + function(key) { + return mixpanelInstance.get_config(key); + } + ); +} + var logger$3 = console_with_prefix('recorder'); /** @@ -24599,12 +24379,14 @@ var MixpanelRecorder = function(mixpanelInstance, rrwebRecord, sharedLockStorage this.mixpanelInstance = mixpanelInstance; this.rrwebRecord = rrwebRecord || record; this.sharedLockStorage = sharedLockStorage; + this.consentGate = consentGateFor(mixpanelInstance); /** * @member {import('./registry').RecordingRegistry} */ this.recordingRegistry = new RecordingRegistry({ mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, errorReporter: logger$3.error, sharedLockStorage: sharedLockStorage }); @@ -24641,6 +24423,7 @@ MixpanelRecorder.prototype.startRecording = function(options) { */ var sessionRecordingOptions = { mixpanelInstance: this.mixpanelInstance, + consentGate: this.consentGate, onBatchSent: onBatchSent, onIdleTimeout: onIdleTimeout, onMaxLengthReached: onMaxLengthReached, @@ -26662,16 +26445,23 @@ FeatureFlagPersistence.prototype.save = function(context, flagsMap, pendingFirst }); }; +/** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger$2.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger$2.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger$2.log('No persisted variants cleared from IndexedDB:', error); }); }; @@ -26734,11 +26524,15 @@ var FeatureFlagManager = function(initOptions) { this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger$1.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -26754,7 +26548,7 @@ FeatureFlagManager.prototype.init = function() { this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -26822,7 +26616,7 @@ FeatureFlagManager.prototype.getConfig = function(key) { }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -26853,6 +26647,14 @@ FeatureFlagManager.prototype.areFlagsReady = function() { return !!this.flags; }; +/** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ +FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); +}; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -27148,6 +26950,9 @@ FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) { }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); @@ -27428,6 +27233,8 @@ var RecorderManager = function(initOptions) { this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -27439,8 +27246,8 @@ var RecorderManager = function(initOptions) { }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console$1.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console$1.log('Load recorder check skipped without persistence'); return PromisePolyfill.resolve(false); } @@ -27467,6 +27274,10 @@ RecorderManager.prototype.shouldLoadRecorder = function() { }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console$1.log('Session recording skipped without consent'); + return PromisePolyfill.resolve(); + } if (!win['MutationObserver']) { console$1.critical('Browser does not support MutationObserver; skipping session recording'); return PromisePolyfill.resolve(); @@ -27475,6 +27286,11 @@ RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, var loadRecorder = _.bind(function(startNewIfInactive) { return new PromisePolyfill(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new win[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); @@ -28004,13 +27820,19 @@ function MixpanelGroup() {} _.extend(MixpanelGroup.prototype, apiActions); -MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { +/** + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate + */ +MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { this._mixpanel = mixpanel_instance; this._group_key = group_key; this._group_id = group_id; + this.consentGate = consentGate; }; -MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** * Set properties on a group. * @@ -28030,15 +27852,20 @@ MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(prop, to, callback) { - var data = this.set_action(prop, to); +MixpanelGroup.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** * Set properties on a group, only if they do not yet exist. * This will not overwrite previous group property values, unlike @@ -28060,15 +27887,20 @@ MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); +MixpanelGroup.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( /** * Unset properties on a group permanently. * @@ -28080,12 +27912,17 @@ MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( * @param {String} prop The name of the property. * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(prop, callback) { +MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( /** * Merge a given list with a list-valued group property, excluding duplicate values. * @@ -28099,15 +27936,20 @@ MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( * @param {Array} values Values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(list_name, values, callback) { +MixpanelGroup.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( /** * Permanently delete a group. * @@ -28118,13 +27960,18 @@ MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( * * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(callback) { +MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } // bracket notation above prevents a minification error related to reserved words var data = this.delete_action(); return this._send_request(data, callback); -}); +}; -MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( /** * Remove a property from a group. The value will be ignored if doesn't exist. * @@ -28137,10 +27984,16 @@ MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( * @param {Object} value Value to remove from the given group property * @param {Function} [callback] If provided, the callback will be called after the tracking event */ -function(list_name, value, callback) { +MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); -}); +}; MixpanelGroup.prototype._send_request = function(data, callback) { data['$group_key'] = this._group_key; @@ -28189,11 +28042,15 @@ function MixpanelPeople() {} _.extend(MixpanelPeople.prototype, apiActions); -MixpanelPeople.prototype._init = function(mixpanel_instance) { +/** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ +MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; + this.consentGate = consentGate; }; -MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( /** * Set properties on a user record. * @@ -28214,11 +28071,17 @@ MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, to, callback) { - var data = this.set_action(prop, to); +MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); // make sure that the referrer info has been updated and saved if (this._get_config('save_referrer')) { this._mixpanel['persistence'].update_referrer_info(document.referrer); @@ -28231,9 +28094,8 @@ function(prop, to, callback) { data[SET_ACTION] ); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( /** * Set properties on a user record, only if they do not yet exist. * This will not overwrite previous people property values, unlike @@ -28256,15 +28118,20 @@ MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( * @param {*} [to] A value to set on the given property name * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, to, callback) { - var data = this.set_once_action(prop, to); +MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -28279,12 +28146,17 @@ MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, callback) { +MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -28311,7 +28183,16 @@ MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(prop, by, callback) { +MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -28325,7 +28206,6 @@ function(prop, by, callback) { } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -28337,9 +28217,8 @@ function(prop, by, callback) { data[ADD_ACTION] = $add; return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -28360,15 +28239,20 @@ MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -28381,15 +28265,20 @@ MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, value, callback) { +MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -28417,15 +28306,20 @@ MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(list_name, values, callback) { +MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); -}); +}; -MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -28447,9 +28341,15 @@ MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ -function(amount, properties, callback) { // eslint-disable-line no-unused-vars +MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console$1.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); -}); +}; /** * Permanently clear all revenue report transactions from the @@ -28663,428 +28563,1340 @@ MixpanelPeople.prototype['toString'] = MixpanelPeople.prototype.toString; /* eslint camelcase: "off" */ -/* - * Constants +/* + * Constants + */ +/** @const */ var SET_QUEUE_KEY = '__mps'; +/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; +/** @const */ var UNSET_QUEUE_KEY = '__mpus'; +/** @const */ var ADD_QUEUE_KEY = '__mpa'; +/** @const */ var APPEND_QUEUE_KEY = '__mpap'; +/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; +/** @const */ var UNION_QUEUE_KEY = '__mpu'; +// This key is deprecated, but we want to check for it to see whether aliasing is allowed. +/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; +/** @const */ var ALIAS_ID_KEY = '__alias'; +/** @const */ var EVENT_TIMERS_KEY = '__timers'; +/** @const */ var RESERVED_PROPERTIES = [ + SET_QUEUE_KEY, + SET_ONCE_QUEUE_KEY, + UNSET_QUEUE_KEY, + ADD_QUEUE_KEY, + APPEND_QUEUE_KEY, + REMOVE_QUEUE_KEY, + UNION_QUEUE_KEY, + PEOPLE_DISTINCT_ID_KEY, + ALIAS_ID_KEY, + EVENT_TIMERS_KEY +]; + +// the store while persistence is off: nothing is read or written +/** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} +}; + +/** + * Mixpanel Persistence Object + * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() + */ +var MixpanelPersistence = function(config, options) { + this['props'] = {}; + this.campaign_params_saved = false; + + if (config['persistence_name']) { + this.name = 'mp_' + config['persistence_name']; + } else { + this.name = 'mp_' + config['token'] + '_mixpanel'; + } + + var storage_type = config['persistence']; + if (storage_type !== 'cookie' && storage_type !== 'localStorage') { + console$1.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); + config['persistence'] = 'cookie'; + } + this.storage_type = config['persistence']; + + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } +}; + +MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; + } else { + this.backend = _.cookie; + } + this.storage = this.backend; +}; + +MixpanelPersistence.prototype.properties = function() { + var p = {}; + + this.load(); + + // Filter out reserved properties + _.each(this['props'], function(v, k) { + if (!_.include(RESERVED_PROPERTIES, k)) { + p[k] = v; + } + }); + return p; +}; + +MixpanelPersistence.prototype.load = function() { + var entry = this.storage.parse(this.name); + + if (entry) { + this['props'] = _.extend({}, entry); + } +}; + +MixpanelPersistence.prototype.upgrade = function() { + var old_cookie, + old_localstorage; + + // if transferring from cookie to localStorage or vice-versa, copy existing + // super properties over to new storage mode + if (this.backend === _.localStorage) { + old_cookie = _.cookie.parse(this.name); + + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + + if (old_cookie) { + this.register_once(old_cookie); + } + } else if (this.backend === _.cookie) { + old_localstorage = _.localStorage.parse(this.name); + + _.localStorage.remove(this.name); + + if (old_localstorage) { + this.register_once(old_localstorage); + } + } +}; + +MixpanelPersistence.prototype.save = function() { + this.storage.set( + this.name, + JSONStringify(this['props']), + this.expire_days, + this.cross_subdomain, + this.secure, + this.cross_site, + this.cookie_domain + ); +}; + +MixpanelPersistence.prototype.load_prop = function(key) { + this.load(); + return this['props'][key]; +}; + +MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } + // remove both domain and subdomain cookies + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); +}; + +// removes the storage entry and deletes all loaded data +// forced name for tests +MixpanelPersistence.prototype.clear = function() { + this.remove(); + this['props'] = {}; +}; + +/** +* @param {Object} props +* @param {*=} default_value +* @param {number=} days +*/ +MixpanelPersistence.prototype.register_once = function(props, default_value, days) { + if (_.isObject(props)) { + if (typeof(default_value) === 'undefined') { default_value = 'None'; } + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + + _.each(props, function(val, prop) { + if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { + this['props'][prop] = val; + } + }, this); + + this.save(); + + return true; + } + return false; +}; + +/** +* @param {Object} props +* @param {number=} days +*/ +MixpanelPersistence.prototype.register = function(props, days) { + if (_.isObject(props)) { + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + _.extend(this['props'], props); + this.save(); + + return true; + } + return false; +}; + +MixpanelPersistence.prototype.unregister = function(prop) { + this.load(); + if (prop in this['props']) { + delete this['props'][prop]; + this.save(); + } +}; + +MixpanelPersistence.prototype.update_search_keyword = function(referrer) { + this.register(_.info.searchInfo(referrer)); +}; + +// EXPORTED METHOD, we test this directly. +MixpanelPersistence.prototype.update_referrer_info = function(referrer) { + // If referrer doesn't exist, we want to note the fact that it was type-in traffic. + this.register_once({ + '$initial_referrer': referrer || '$direct', + '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' + }, ''); +}; + +MixpanelPersistence.prototype.get_referrer_info = function() { + return _.strip_empty_properties({ + '$initial_referrer': this['props']['$initial_referrer'], + '$initial_referring_domain': this['props']['$initial_referring_domain'] + }); +}; + +MixpanelPersistence.prototype.update_config = function(config) { + this.default_expiry = this.expire_days = config['cookie_expiration']; + this.set_disabled(config['disable_persistence']); + this.set_cookie_domain(config['cookie_domain']); + this.set_cross_site(config['cross_site_cookie']); + this.set_cross_subdomain(config['cross_subdomain_cookie']); + this.set_secure(config['secure_cookie']); +}; + +/** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ +MixpanelPersistence.prototype.set_disabled = function(disabled) { + this.disabled = disabled; + this._update_storage(); +}; + +/** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ +MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); +}; + +/** + * Read and write storage again, saving the props in memory to it. + */ +MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); +}; + +/** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ +MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); +}; + +MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; + this.remove(); + } else { + this.storage = this.backend; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { + if (cookie_domain !== this.cookie_domain) { + this.remove(); + this.cookie_domain = cookie_domain; + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_site = function(cross_site) { + if (cross_site !== this.cross_site) { + this.cross_site = cross_site; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { + if (cross_subdomain !== this.cross_subdomain) { + this.cross_subdomain = cross_subdomain; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype.get_cross_subdomain = function() { + return this.cross_subdomain; +}; + +MixpanelPersistence.prototype.set_secure = function(secure) { + if (secure !== this.secure) { + this.secure = secure ? true : false; + this.remove(); + this.save(); + } +}; + +MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { + var q_key = this._get_queue_key(queue), + q_data = data[queue], + set_q = this._get_or_create_queue(SET_ACTION), + set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), + unset_q = this._get_or_create_queue(UNSET_ACTION), + add_q = this._get_or_create_queue(ADD_ACTION), + union_q = this._get_or_create_queue(UNION_ACTION), + remove_q = this._get_or_create_queue(REMOVE_ACTION, []), + append_q = this._get_or_create_queue(APPEND_ACTION, []); + + if (q_key === SET_QUEUE_KEY) { + // Update the set queue - we can override any existing values + _.extend(set_q, q_data); + // if there was a pending increment, override it + // with the set. + this._pop_from_people_queue(ADD_ACTION, q_data); + // if there was a pending union, override it + // with the set. + this._pop_from_people_queue(UNION_ACTION, q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === SET_ONCE_QUEUE_KEY) { + // only queue the data if there is not already a set_once call for it. + _.each(q_data, function(v, k) { + if (!(k in set_once_q)) { + set_once_q[k] = v; + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNSET_QUEUE_KEY) { + _.each(q_data, function(prop) { + + // undo previously-queued actions on this key + _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { + if (prop in enqueued_obj) { + delete enqueued_obj[prop]; + } + }); + _.each(append_q, function(append_obj) { + if (prop in append_obj) { + delete append_obj[prop]; + } + }); + + unset_q[prop] = true; + + }); + } else if (q_key === ADD_QUEUE_KEY) { + _.each(q_data, function(v, k) { + // If it exists in the set queue, increment + // the value + if (k in set_q) { + set_q[k] += v; + } else { + // If it doesn't exist, update the add + // queue + if (!(k in add_q)) { + add_q[k] = 0; + } + add_q[k] += v; + } + }, this); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNION_QUEUE_KEY) { + _.each(q_data, function(v, k) { + if (_.isArray(v)) { + if (!(k in union_q)) { + union_q[k] = []; + } + // Prevent duplicate values + _.each(v, function(item) { + if (!_.include(union_q[k], item)) { + union_q[k].push(item); + } + }); + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === REMOVE_QUEUE_KEY) { + remove_q.push(q_data); + this._pop_from_people_queue(APPEND_ACTION, q_data); + } else if (q_key === APPEND_QUEUE_KEY) { + append_q.push(q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } + + console$1.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); + console$1.log(data); + + this.save(); +}; + +MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { + var q = this['props'][this._get_queue_key(queue)]; + if (!_.isUndefined(q)) { + _.each(data, function(v, k) { + if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { + // list actions: only remove if both k+v match + // e.g. remove should not override append in a case like + // append({foo: 'bar'}); remove({foo: 'qux'}) + _.each(q, function(queued_action) { + if (queued_action[k] === v) { + delete queued_action[k]; + } + }); + } else { + delete q[k]; + } + }, this); + } +}; + +MixpanelPersistence.prototype.load_queue = function(queue) { + return this.load_prop(this._get_queue_key(queue)); +}; + +MixpanelPersistence.prototype._get_queue_key = function(queue) { + if (queue === SET_ACTION) { + return SET_QUEUE_KEY; + } else if (queue === SET_ONCE_ACTION) { + return SET_ONCE_QUEUE_KEY; + } else if (queue === UNSET_ACTION) { + return UNSET_QUEUE_KEY; + } else if (queue === ADD_ACTION) { + return ADD_QUEUE_KEY; + } else if (queue === APPEND_ACTION) { + return APPEND_QUEUE_KEY; + } else if (queue === REMOVE_ACTION) { + return REMOVE_QUEUE_KEY; + } else if (queue === UNION_ACTION) { + return UNION_QUEUE_KEY; + } else { + console$1.error('Invalid queue:', queue); + } +}; + +MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { + var key = this._get_queue_key(queue); + default_val = _.isUndefined(default_val) ? {} : default_val; + return this['props'][key] || (this['props'][key] = default_val); +}; + +MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + timers[event_name] = timestamp; + this['props'][EVENT_TIMERS_KEY] = timers; + this.save(); +}; + +MixpanelPersistence.prototype.remove_event_timer = function(event_name) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + var timestamp = timers[event_name]; + if (!_.isUndefined(timestamp)) { + delete this['props'][EVENT_TIMERS_KEY][event_name]; + this.save(); + } + return timestamp; +}; + +/** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + + +/** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; +/** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + +/** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + +/** @const */ var DECISION_NONE = 'none'; +/** @const */ var DECISION_OPTED_IN = 'opted_in'; +/** @const */ var DECISION_OPTED_OUT = 'opted_out'; +// Do Not Track counts as an objection +/** @const */ var DECISION_OBJECTED = 'objected'; + +/** @const */ var STATE_FULL = 'full'; +/** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; +/** @const */ var STATE_BLOCKED = 'blocked'; + +/** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} +}; + +/** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ +/** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} +}; + +/** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ +function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console$1.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; +} + +/** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ +function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console$1.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console$1.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; +} + +/** + * GDPR utils + * + * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection + * and privacy for all individuals within the European Union. It addresses the export of personal + * data outside the EU. The GDPR aims primarily to give control back to citizens and residents + * over their personal data and to simplify the regulatory environment for international business + * by unifying the regulation within the EU. + * + * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. + * These functions are used internally by the SDK and are not intended to be publicly exposed. + */ + + +/** + * A function used to track a Mixpanel event (e.g. MixpanelLib.track) + * @callback trackFunction + * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. + * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. + * @param {Function} [callback] If provided, the callback function will be called after tracking the event. + */ + +/** Public **/ + +var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; + +/** + * Opt the user in to data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function optIn(token, options) { + _optInOut(true, token, options); +} + +/** + * Opt the user out of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not + */ +function optOut(token, options) { + _optInOut(false, token, options); +} + +/** + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ +function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; +} + +/** + * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function clearOptInOut(token, options) { + options = options || {}; + _getStorage(options).remove( + _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain + ); +} + +/** Private **/ + +/** + * Get storage util + * @param {Object} [options] + * @param {string} [options.persistenceType] + * @returns {object} either _.cookie or _.localstorage + */ +function _getStorage(options) { + options = options || {}; + return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; +} + +/** + * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the name of the cookie for the given opt type + */ +function _getStorageKey(token, options) { + options = options || {}; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; +} + +/** + * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the value of the cookie for the given opt type + */ +function readOptInOutFlag(token, options) { + return _getStorage(options).get(_getStorageKey(token, options)); +} + +/** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ +function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); +} + +/** + * Check whether the user has set the DNT/doNotTrack setting to true in their browser + * @param {Object} [options] + * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests + * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false + * @returns {boolean} whether the DNT setting is true + */ +function hasDoNotTrackFlagOn(options) { + if (options && options.ignoreDnt) { + return false; + } + var win$1 = (options && options.window) || win; + var nav = win$1['navigator'] || {}; + var hasDntOn = false; + + _.each([ + nav['doNotTrack'], // standard + nav['msDoNotTrack'], + win$1['doNotTrack'] + ], function(dntValue) { + if (_.includes([true, 1, '1', 'yes'], dntValue)) { + hasDntOn = true; + } + }); + + return hasDntOn; +} + +/** + * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type + * @param {boolean} optValue - whether to opt the user in or out for the given opt type + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ +function _optInOut(optValue, token, options) { + if (!_.isString(token) || !token.length) { + console$1.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + return; + } + + options = options || {}; + + _getStorage(options).set( + _getStorageKey(token, options), + optValue ? 1 : 0, + _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, + !!options.crossSubdomainCookie, + !!options.secureCookie, + !!options.crossSiteCookie, + options.cookieDomain + ); + + if (options.track && optValue) { // only track event if opting in (optValue=true) + options.track(options.trackEventName || '$opt_in', options.trackProperties, { + 'send_immediately': true + }); + } +} + +/** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. */ -/** @const */ var SET_QUEUE_KEY = '__mps'; -/** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; -/** @const */ var UNSET_QUEUE_KEY = '__mpus'; -/** @const */ var ADD_QUEUE_KEY = '__mpa'; -/** @const */ var APPEND_QUEUE_KEY = '__mpap'; -/** @const */ var REMOVE_QUEUE_KEY = '__mpr'; -/** @const */ var UNION_QUEUE_KEY = '__mpu'; -// This key is deprecated, but we want to check for it to see whether aliasing is allowed. -/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; -/** @const */ var ALIAS_ID_KEY = '__alias'; -/** @const */ var EVENT_TIMERS_KEY = '__timers'; -/** @const */ var RESERVED_PROPERTIES = [ - SET_QUEUE_KEY, - SET_ONCE_QUEUE_KEY, - UNSET_QUEUE_KEY, - ADD_QUEUE_KEY, - APPEND_QUEUE_KEY, - REMOVE_QUEUE_KEY, - UNION_QUEUE_KEY, - PEOPLE_DISTINCT_ID_KEY, - ALIAS_ID_KEY, - EVENT_TIMERS_KEY -]; + /** - * Mixpanel Persistence Object * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges */ -var MixpanelPersistence = function(config) { - this['props'] = {}; - this.campaign_params_saved = false; - - if (config['persistence_name']) { - this.name = 'mp_' + config['persistence_name']; - } else { - this.name = 'mp_' + config['token'] + '_mixpanel'; - } +var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; +}; - var storage_type = config['persistence']; - if (storage_type !== 'cookie' && storage_type !== 'localStorage') { - console$1.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; +/** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ +OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; - } else { - this.storage = _.cookie; + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); }; -MixpanelPersistence.prototype.properties = function() { - var p = {}; - - this.load(); - - // Filter out reserved properties - _.each(this['props'], function(v, k) { - if (!_.include(RESERVED_PROPERTIES, k)) { - p[k] = v; - } - }); - return p; +// opt_out_tracking_by_default applies only without consent_mode, which replaces it +OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); }; -MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } +/** + * @returns {string} + */ +OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; +}; - var entry = this.storage.parse(this.name); +/** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; +}; - if (entry) { - this['props'] = _.extend({}, entry); - } +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ +OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -MixpanelPersistence.prototype.upgrade = function() { - var old_cookie, - old_localstorage; +/** + * @param {Object} [options] opt_in_tracking() options + */ +OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); +}; - // if transferring from cookie to localStorage or vice-versa, copy existing - // super properties over to new storage mode - if (this.storage === _.localStorage) { - old_cookie = _.cookie.parse(this.name); +/** + * @param {Object} [options] opt_out_tracking() options + */ +OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); - _.cookie.remove(this.name); - _.cookie.remove(this.name, true); + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } - if (old_cookie) { - this.register_once(old_cookie); - } - } else if (this.storage === _.cookie) { - old_localstorage = _.localStorage.parse(this.name); + this._writeFlag(optOut, options); + this._updatePersistence(options); +}; - _.localStorage.remove(this.name); +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); +}; - if (old_localstorage) { - this.register_once(old_localstorage); - } +/** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ +OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); } }; -MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - - this.storage.set( - this.name, - JSONStringify(this['props']), - this.expire_days, - this.cross_subdomain, - this.secure, - this.cross_site, - this.cookie_domain - ); -}; +/** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ +OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); -MixpanelPersistence.prototype.load_prop = function(key) { - this.load(); - return this['props'][key]; -}; + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } -MixpanelPersistence.prototype.remove = function() { - // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); }; -// removes the storage entry and deletes all loaded data -// forced name for tests -MixpanelPersistence.prototype.clear = function() { - this.remove(); - this['props'] = {}; +/** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ +OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); }; /** -* @param {Object} props -* @param {*=} default_value -* @param {number=} days -*/ -MixpanelPersistence.prototype.register_once = function(props, default_value, days) { - if (_.isObject(props)) { - if (typeof(default_value) === 'undefined') { default_value = 'None'; } - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ +OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); - this.load(); + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } - _.each(props, function(val, prop) { - if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { - this['props'][prop] = val; - } - }, this); + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); +}; - this.save(); +/** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ - return true; - } - return false; -}; /** -* @param {Object} props -* @param {number=} days -*/ -MixpanelPersistence.prototype.register = function(props, days) { - if (_.isObject(props)) { - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ +var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; +}; - this.load(); - _.extend(this['props'], props); - this.save(); +// delete what an earlier page stored without consent +ConsentDecisions.prototype.init = function() { + this._reconcile(); +}; - return true; +/** + * @returns {string} + */ +ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; } - return false; + return this.appliedState; }; -MixpanelPersistence.prototype.unregister = function(prop) { - this.load(); - if (prop in this['props']) { - delete this['props'][prop]; - this.save(); - } +/** + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; }; -MixpanelPersistence.prototype.update_search_keyword = function(referrer) { - this.register(_.info.searchInfo(referrer)); +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ +ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; -// EXPORTED METHOD, we test this directly. -MixpanelPersistence.prototype.update_referrer_info = function(referrer) { - // If referrer doesn't exist, we want to note the fact that it was type-in traffic. - this.register_once({ - '$initial_referrer': referrer || '$direct', - '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' - }, ''); +/** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ +ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); }; -MixpanelPersistence.prototype.get_referrer_info = function() { - return _.strip_empty_properties({ - '$initial_referrer': this['props']['$initial_referrer'], - '$initial_referring_domain': this['props']['$initial_referring_domain'] - }); +ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); }; -MixpanelPersistence.prototype.update_config = function(config) { - this.default_expiry = this.expire_days = config['cookie_expiration']; - this.set_disabled(config['disable_persistence']); - this.set_cookie_domain(config['cookie_domain']); - this.set_cross_site(config['cross_site_cookie']); - this.set_cross_subdomain(config['cross_subdomain_cookie']); - this.set_secure(config['secure_cookie']); +ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); }; -MixpanelPersistence.prototype.set_disabled = function(disabled) { - this.disabled = disabled; - if (this.disabled) { - this.remove(); - } else { - this.save(); +/** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ +ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } +}; + +ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; }; -MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { - if (cookie_domain !== this.cookie_domain) { - this.remove(); - this.cookie_domain = cookie_domain; - this.save(); +/** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ +ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); } }; -MixpanelPersistence.prototype.set_cross_site = function(cross_site) { - if (cross_site !== this.cross_site) { - this.cross_site = cross_site; - this.remove(); - this.save(); +/** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ +ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; } + this._writeDecisionKey(this._decisionKey(), flag); }; -MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { - if (cross_subdomain !== this.cross_subdomain) { - this.cross_subdomain = cross_subdomain; - this.remove(); - this.save(); +/** + * @param {string} key + * @param {string|null} value null to remove it + */ +ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); } }; -MixpanelPersistence.prototype.get_cross_subdomain = function() { - return this.cross_subdomain; +// the store the persistence uses, chosen without the localStorage support probe, which writes a key +ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); }; -MixpanelPersistence.prototype.set_secure = function(secure) { - if (secure !== this.secure) { - this.secure = secure ? true : false; - this.remove(); - this.save(); - } +ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; }; -MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { - var q_key = this._get_queue_key(queue), - q_data = data[queue], - set_q = this._get_or_create_queue(SET_ACTION), - set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), - unset_q = this._get_or_create_queue(UNSET_ACTION), - add_q = this._get_or_create_queue(ADD_ACTION), - union_q = this._get_or_create_queue(UNION_ACTION), - remove_q = this._get_or_create_queue(REMOVE_ACTION, []), - append_q = this._get_or_create_queue(APPEND_ACTION, []); +ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); +}; - if (q_key === SET_QUEUE_KEY) { - // Update the set queue - we can override any existing values - _.extend(set_q, q_data); - // if there was a pending increment, override it - // with the set. - this._pop_from_people_queue(ADD_ACTION, q_data); - // if there was a pending union, override it - // with the set. - this._pop_from_people_queue(UNION_ACTION, q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === SET_ONCE_QUEUE_KEY) { - // only queue the data if there is not already a set_once call for it. - _.each(q_data, function(v, k) { - if (!(k in set_once_q)) { - set_once_q[k] = v; - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNSET_QUEUE_KEY) { - _.each(q_data, function(prop) { +/** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ +ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); +}; - // undo previously-queued actions on this key - _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { - if (prop in enqueued_obj) { - delete enqueued_obj[prop]; - } - }); - _.each(append_q, function(append_obj) { - if (prop in append_obj) { - delete append_obj[prop]; - } - }); +/** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ +ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); +}; - unset_q[prop] = true; +/** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + +/** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ +function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; }); - } else if (q_key === ADD_QUEUE_KEY) { - _.each(q_data, function(v, k) { - // If it exists in the set queue, increment - // the value - if (k in set_q) { - set_q[k] += v; - } else { - // If it doesn't exist, update the add - // queue - if (!(k in add_q)) { - add_q[k] = 0; - } - add_q[k] += v; - } - }, this); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNION_QUEUE_KEY) { - _.each(q_data, function(v, k) { - if (_.isArray(v)) { - if (!(k in union_q)) { - union_q[k] = []; - } - // Prevent duplicate values - _.each(v, function(item) { - if (!_.include(union_q[k], item)) { - union_q[k].push(item); - } - }); - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === REMOVE_QUEUE_KEY) { - remove_q.push(q_data); - this._pop_from_people_queue(APPEND_ACTION, q_data); - } else if (q_key === APPEND_QUEUE_KEY) { - append_q.push(q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); + if (same) { + answers[capability] = answer; + } + }); + return answers; +} + +/** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ +var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; +}; + +/** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ +ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; } + return CONSENT_STATES[this.state()][capability]; +}; - console$1.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); - console$1.log(data); +/** + * @returns {string} + */ +ConsentManager.prototype.state = function() { + return this.decisions.state(); +}; - this.save(); +/** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ +ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; }; -MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { - var q = this['props'][this._get_queue_key(queue)]; - if (!_.isUndefined(q)) { - _.each(data, function(v, k) { - if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { - // list actions: only remove if both k+v match - // e.g. remove should not override append in a case like - // append({foo: 'bar'}); remove({foo: 'qux'}) - _.each(q, function(queued_action) { - if (queued_action[k] === v) { - delete queued_action[k]; - } - }); - } else { - delete q[k]; - } - }, this); - } +/** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ +ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; }; -MixpanelPersistence.prototype.load_queue = function(queue) { - return this.load_prop(this._get_queue_key(queue)); +/** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ +ConsentManager.prototype.init = function() { + this.decisions.init(); }; -MixpanelPersistence.prototype._get_queue_key = function(queue) { - if (queue === SET_ACTION) { - return SET_QUEUE_KEY; - } else if (queue === SET_ONCE_ACTION) { - return SET_ONCE_QUEUE_KEY; - } else if (queue === UNSET_ACTION) { - return UNSET_QUEUE_KEY; - } else if (queue === ADD_ACTION) { - return ADD_QUEUE_KEY; - } else if (queue === APPEND_ACTION) { - return APPEND_QUEUE_KEY; - } else if (queue === REMOVE_ACTION) { - return REMOVE_QUEUE_KEY; - } else if (queue === UNION_ACTION) { - return UNION_QUEUE_KEY; - } else { - console$1.error('Invalid queue:', queue); - } +/** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); }; -MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { - var key = this._get_queue_key(queue); - default_val = _.isUndefined(default_val) ? {} : default_val; - return this['props'][key] || (this['props'][key] = default_val); +/** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ +ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); }; -MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - timers[event_name] = timestamp; - this['props'][EVENT_TIMERS_KEY] = timers; - this.save(); +/** + * @param {Object} [options] opt_in_tracking() options + */ +ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); }; -MixpanelPersistence.prototype.remove_event_timer = function(event_name) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - var timestamp = timers[event_name]; - if (!_.isUndefined(timestamp)) { - delete this['props'][EVENT_TIMERS_KEY][event_name]; - this.save(); - } - return timestamp; +/** + * @param {Object} [options] opt_out_tracking() options + */ +ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); +}; + +/** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ +ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); }; /* eslint camelcase: "off" */ @@ -29205,6 +30017,7 @@ var DEFAULT_CONFIG = { 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -29271,26 +30084,9 @@ var create_mplib = function(token, config, name) { instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -29385,6 +30181,19 @@ MixpanelLib.prototype._init = function(token, config, name) { 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -29392,6 +30201,7 @@ MixpanelLib.prototype._init = function(token, config, name) { getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -29409,64 +30219,16 @@ MixpanelLib.prototype._init = function(token, config, name) { }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console$1.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console$1.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && win.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - win.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - win.addEventListener('visibilitychange', function() { - if (document$1['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - var uuid = _.UUID(); - if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -29476,12 +30238,52 @@ MixpanelLib.prototype._init = function(token, config, name) { setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); +}; + +MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } +}; + +// the services that store or send on their own; at init, and again on an opt-in under 'require_consent' +MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -29493,21 +30295,174 @@ MixpanelLib.prototype._init = function(token, config, name) { } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } +}; - this.autocapture = new Autocapture(this); - this.autocapture.init(); +/** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ +MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); +}; + +/** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ +MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); +}; + +/** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ +MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); +}; + +MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); +}; + +MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console$1.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console$1.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + consentGate: this._consent, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + + if (sendBeacon && win.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + win.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + win.addEventListener('visibilitychange', function() { + if (document$1['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } + } + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { + this.start_batch_senders(); + } +}; + +MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); }; /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ +MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); +}; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console$1.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console$1.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -29538,9 +30493,12 @@ MixpanelLib.prototype.get_tab_id = function () { return this.tab_id || null; }; -MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { +MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); -}); +}; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -29630,7 +30588,7 @@ MixpanelLib.prototype._dom_loaded = function() { this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -29692,6 +30650,15 @@ MixpanelLib.prototype._prepare_callback = function(callback, data) { MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console$1.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -29849,6 +30816,10 @@ MixpanelLib.prototype._send_request = function(url, data, options, callback) { }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -29986,48 +30957,6 @@ MixpanelLib.prototype.get_batcher_configs = function() { return this._batcher_configs; }; -MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } -}; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -30165,7 +31094,6 @@ MixpanelLib.prototype._track_or_batch = function(options, callback) { return request_enqueued_or_initiated && truncated_data; }; -MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -30190,7 +31118,17 @@ MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(event_name, properties, options, callback) { +MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -30202,10 +31140,6 @@ function(event_name, properties, options, callback) { } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -30296,9 +31230,8 @@ function(event_name, properties, options, callback) { } return ret; -}); +}; -MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -30314,7 +31247,13 @@ MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ -function(group_key, group_ids, callback) { +MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -30322,9 +31261,8 @@ function(group_key, group_ids, callback) { prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); -}); +}; -MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -30337,7 +31275,13 @@ MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -30351,9 +31295,8 @@ function(group_key, group_id, callback) { } } return this['people'].union(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -30366,7 +31309,13 @@ MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(group_key, group_id, callback) { +MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -30380,9 +31329,8 @@ function(group_key, group_id, callback) { } } return this['people'].remove(group_key, group_id, callback); -}); +}; -MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -30396,7 +31344,7 @@ MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ -function(event_name, properties, groups, callback) { +MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -30404,7 +31352,7 @@ function(event_name, properties, groups, callback) { } }); return this.track(event_name, tracking_props, callback); -}); +}; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -30431,13 +31379,12 @@ MixpanelLib.prototype.get_group = function (group_key, group_id) { var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; -MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -30483,7 +31430,7 @@ MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ -function(properties, options) { +MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -30507,7 +31454,7 @@ function(properties, options) { } return this.track(event_name, event_properties); -}); +}; /** * Track clicks on a set of document elements. Selector must be a @@ -30770,6 +31717,10 @@ MixpanelLib.prototype._register_single = function(prop, value) { * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -30782,6 +31733,12 @@ MixpanelLib.prototype.identify = function( // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console$1.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -30846,11 +31803,11 @@ MixpanelLib.prototype.reset = function() { this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -30912,6 +31869,11 @@ MixpanelLib.prototype.get_distinct_id = function() { * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console$1.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -31041,6 +32003,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -31092,6 +32059,11 @@ MixpanelLib.prototype.name_tag = function(name_tag) { */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console$1.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -31220,105 +32192,42 @@ MixpanelLib.prototype._event_is_disabled = function(event_name) { _.include(this.__disabled_events, event_name); }; -// perform some housekeeping around GDPR opt-in/out state -MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } +/** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ +MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ -MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; +MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; -// call a base gdpr function after constructing the appropriate token and options args -MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; +// delete the identified user's profile and charges, which the opt-out about to happen would block +MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); }; /** @@ -31340,6 +32249,10 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -31354,12 +32267,7 @@ MixpanelLib.prototype._gdpr_call_func = function(func, options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -31377,6 +32285,10 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -31389,19 +32301,7 @@ MixpanelLib.prototype.opt_in_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -31413,13 +32313,15 @@ MixpanelLib.prototype.opt_out_tracking = function(options) { * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -31431,13 +32333,16 @@ MixpanelLib.prototype.has_opted_in_tracking = function(options) { * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -31456,6 +32361,11 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -31467,12 +32377,7 @@ MixpanelLib.prototype.has_opted_out_tracking = function(options) { * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -31536,6 +32441,7 @@ MixpanelLibProto['toString'] = MixpanelLibProto.toStri MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; +MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/dist/mixpanel.globals.js b/dist/mixpanel.globals.js index dfd590f1..f9502a5a 100644 --- a/dist/mixpanel.globals.js +++ b/dist/mixpanel.globals.js @@ -3,7 +3,7 @@ var Config = { DEBUG: false, - LIB_VERSION: '2.84.0' + LIB_VERSION: '2.85.0-rc1' }; // Window global names for async modules @@ -11,8 +11,8 @@ var RECORDER_GLOBAL_NAME = '__mp_recorder'; // Constants that are injected at build-time for the names of async modules. - var RECORDER_FILENAME = 'mixpanel-recorder-Cbb3yyAg.js'; - var TARGETING_FILENAME = 'mixpanel-targeting-DVY6oAEA.js'; + var RECORDER_FILENAME = 'mixpanel-recorder-BSb8F2GO.js'; + var TARGETING_FILENAME = 'mixpanel-targeting-SfM6RnV-.js'; // since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file var win; @@ -3947,11 +3947,13 @@ /** * @type {import('./wrapper').StorageWrapper} */ - var IDBStorageWrapper = function (dbName, storeName, versionData) { + var IDBStorageWrapper = function (dbName, storeName, versionData, options) { this.dbName = dbName; this.storeName = storeName; this.version = versionData.version; this.storeNamesInDb = versionData.storeNames; + // false to only open a database the device already has, for cleanup that mustn't create one + this.createIfMissing = !options || options.createIfMissing !== false; /** * @type {Promise|null} */ @@ -3962,25 +3964,47 @@ var dbName = this.dbName; var version = this.version; var storeNamesInDb = this.storeNamesInDb; - return new PromisePolyfill(function (resolve, reject) { - var openRequest = win.indexedDB.open(dbName, version); - openRequest['onerror'] = function () { - reject(openRequest.error); - }; - - openRequest['onsuccess'] = function () { - resolve(openRequest.result); - }; + var createIfMissing = this.createIfMissing; + var open = function () { + return new PromisePolyfill(function (resolve, reject) { + var openRequest = win.indexedDB.open(dbName, version); + openRequest['onerror'] = function () { + reject(openRequest.error); + }; - openRequest['onupgradeneeded'] = function (ev) { - var db = ev.target.result; + openRequest['onsuccess'] = function () { + resolve(openRequest.result); + }; - storeNamesInDb.forEach(function (storeName) { - if (!db.objectStoreNames.contains(storeName)) { - db.createObjectStore(storeName); + openRequest['onupgradeneeded'] = function (ev) { + if (!createIfMissing && ev['oldVersion'] === 0) { + // aborting fails the open; the new database stays at version 0, which + // databases() doesn't list + openRequest['transaction']['abort'](); + return; } - }); - }; + var db = ev.target.result; + + storeNamesInDb.forEach(function (storeName) { + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }); + }; + }); + }; + + // where the browser lists its databases, a missing one isn't even opened + if (createIfMissing || !win.indexedDB['databases']) { + return open(); + } + return win.indexedDB['databases']().then(function (databases) { + for (var i = 0; i < databases.length; i++) { + if (databases[i]['name'] === dbName) { + return open(); + } + } + return PromisePolyfill.reject(dbName + ' does not exist'); }); }; @@ -4229,16 +4253,23 @@ }); }; + /** + * Remove the persisted variants, without creating the database. + * @returns {Promise} + */ FeatureFlagPersistence.prototype.clear = function() { if (this.isGloballyDisabled()) { return Promise.resolve(); } - return this.idb.init().then(_.bind(function() { - return this.idb.removeItem(this.persistedVariantsKey); - }, this)).then(function() { + var variantsKey = this.persistedVariantsKey; + var existingIdb = new IDBStorageWrapper(MIXPANEL_FLAGS_DB_NAME, FLAGS_STORE_NAME, FLAGS_VERSION_DATA, {createIfMissing: false}); + return existingIdb.init().then(function() { + return existingIdb.removeItem(variantsKey); + }).then(function() { logger$5.log('Cleared persisted variants from IndexedDB'); }).catch(function(error) { - logger$5.error('Failed to clear persisted variants from IndexedDB:', error); + // usually the device has no database, so there's nothing to clear + logger$5.log('No persisted variants cleared from IndexedDB:', error); }); }; @@ -4301,11 +4332,15 @@ this.setMpConfig = initOptions.setConfigFunc; this.getMpProperty = initOptions.getPropertyFunc; this.track = initOptions.trackingFunc; + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle || function() {}; this.targetingSrc = initOptions.targetingSrc || ''; }; FeatureFlagManager.prototype.init = function() { + if (!this.consentGate.allowsFetching()) { + return; + } if (!this.minApisSupported()) { logger$4.critical('Feature Flags unavailable: missing minimum required APIs'); return; @@ -4321,7 +4356,7 @@ this.persistence = new FeatureFlagPersistence( this.getConfig(CONFIG_PERSISTENCE), this.getMpConfig('token'), - _.bind(function() { return this.getMpConfig('disable_persistence'); }, this) + _.bind(function() { return !this.consentGate.allowsPersistence(); }, this) ); this.persistenceLoadedPromise = this.persistence.loadFlagsFromStorage(this._buildContext()) @@ -4389,7 +4424,7 @@ }; FeatureFlagManager.prototype.isSystemEnabled = function() { - return !!this.getMpConfig(FLAGS_CONFIG_KEY); + return !!this.getMpConfig(FLAGS_CONFIG_KEY) && this.consentGate.allowsFetching(); }; FeatureFlagManager.prototype.updateContext = function(newContext, options) { @@ -4420,6 +4455,14 @@ return !!this.flags; }; + /** + * Delete this token's persisted variants, also before init() and when persistence isn't allowed. + * @returns {Promise} + */ + FeatureFlagManager.prototype.clearPersistedVariants = function() { + return new FeatureFlagPersistence(null, this.getMpConfig('token')).clear(); + }; + FeatureFlagManager.prototype.fetchFlags = function() { if (!this.isSystemEnabled()) { return Promise.resolve(); @@ -4715,6 +4758,9 @@ }; FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) { + if (!this.consentGate.allowsFetching()) { + return Promise.resolve(); + } var distinctId = this.getMpProperty('distinct_id'); var traceparent = generateTraceparent(); @@ -5037,6 +5083,8 @@ this.getTabId = initOptions.getTabIdFunc; this.reportError = initOptions.reportErrorFunc; this.getDistinctId = initOptions.getDistinctIdFunc; + // recording stores the session before it sends it + this.consentGate = initOptions.consentGate; this.loadExtraBundle = initOptions.loadExtraBundle; this.recorderSrc = initOptions.recorderSrc; this.targetingSrc = initOptions.targetingSrc; @@ -5048,8 +5096,8 @@ }; RecorderManager.prototype.shouldLoadRecorder = function() { - if (this.getMpConfig('disable_persistence')) { - console.log('Load recorder check skipped due to disable_persistence config'); + if (!this.consentGate.allowsPersistence()) { + console.log('Load recorder check skipped without persistence'); return PromisePolyfill.resolve(false); } @@ -5076,6 +5124,10 @@ }; RecorderManager.prototype.checkAndStartSessionRecording = function(force_start, rate) { + if (!this.consentGate.allowsStoring()) { + console.log('Session recording skipped without consent'); + return PromisePolyfill.resolve(); + } if (!win['MutationObserver']) { console.critical('Browser does not support MutationObserver; skipping session recording'); return PromisePolyfill.resolve(); @@ -5084,6 +5136,11 @@ var loadRecorder = _.bind(function(startNewIfInactive) { return new PromisePolyfill(_.bind(function(resolve) { var handleLoadedRecorder = safewrap(_.bind(function() { + // consent can be withdrawn while the bundle loads + if (!this.consentGate.allowsStoring()) { + resolve(); + return; + } this._recorder = this._recorder || new win[RECORDER_GLOBAL_NAME](this.mixpanelInstance); this._recorder['resumeRecording'](startNewIfInactive); resolve(); @@ -5715,6 +5772,7 @@ }); } this.reportError = options.errorReporter || _.bind(logger$1.error, logger$1); + this.consentGate = options.consentGate; this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios @@ -5766,7 +5824,7 @@ 'payload': item }; - if (!this.usePersistence) { + if (!this._persists()) { this.memQueue.push(queueEntry); return PromisePolyfill.resolve(true); } else { @@ -5774,7 +5832,20 @@ } }; + /** + * Whether the queue is kept in storage now: with persistence, and while consent allows storing. + * The lock writes storage keys too, so nothing that takes it runs without this. + * @returns {boolean} + */ + RequestQueue.prototype._persists = function () { + return this.usePersistence && this.consentGate.allowsStoring(); + }; + RequestQueue.prototype._enqueuePersisted = function (queueEntries) { + // a throttled enqueue can run after consent stops storage; its items are dropped + if (!this._persists()) { + return PromisePolyfill.resolve(false); + } var enqueueItem = _.bind(function () { return this.ensureInit() .then(_.bind(function () { @@ -5874,7 +5945,7 @@ }); this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { var removeFromStorage = _.bind(function () { @@ -5962,7 +6033,7 @@ */ RequestQueue.prototype.updatePayloads = function (itemsToUpdate) { this.memQueue = updatePayloads(this.memQueue, itemsToUpdate); - if (!this.usePersistence) { + if (!this._persists()) { return PromisePolyfill.resolve(true); } else { return this.lock @@ -6017,11 +6088,14 @@ RequestQueue.prototype.saveToStorage = function (queue) { return this.ensureInit() .then(_.bind(function () { - return this.queueStorage.setItem(this.storageKey, queue); + // a save that started before consent stopped storage writes nothing + if (!this._persists()) { + return false; + } + return this.queueStorage.setItem(this.storageKey, queue).then(function () { + return true; + }); }, this)) - .then(function () { - return true; - }) .catch(_.bind(function (err) { this.reportError('Error saving queue', err); return false; @@ -6066,7 +6140,8 @@ sharedLockStorage: options.sharedLockStorage, sharedLockTimeoutMS: options.sharedLockTimeoutMS, usePersistence: options.usePersistence, - enqueueThrottleMs: options.enqueueThrottleMs + enqueueThrottleMs: options.enqueueThrottleMs, + consentGate: options.consentGate }); this.libConfig = options.libConfig; @@ -6381,721 +6456,448 @@ } }; - /** - * GDPR utils - * - * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection - * and privacy for all individuals within the European Union. It addresses the export of personal - * data outside the EU. The GDPR aims primarily to give control back to citizens and residents - * over their personal data and to simplify the regulatory environment for international business - * by unifying the regulation within the EU. - * - * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. - * These functions are used internally by the SDK and are not intended to be publicly exposed. - */ + /* eslint camelcase: "off" */ - /** - * A function used to track a Mixpanel event (e.g. MixpanelLib.track) - * @callback trackFunction - * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. - * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. - * @param {Function} [callback] If provided, the callback function will be called after tracking the event. - */ + /** @const */ var SET_ACTION = '$set'; + /** @const */ var SET_ONCE_ACTION = '$set_once'; + /** @const */ var UNSET_ACTION = '$unset'; + /** @const */ var ADD_ACTION = '$add'; + /** @const */ var APPEND_ACTION = '$append'; + /** @const */ var UNION_ACTION = '$union'; + /** @const */ var REMOVE_ACTION = '$remove'; + /** @const */ var DELETE_ACTION = '$delete'; - /** Public **/ + // Common internal methods for mixpanel.people and mixpanel.group APIs. + // These methods shouldn't involve network I/O. + var apiActions = { + set_action: function(prop, to) { + var data = {}; + var $set = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set[k] = v; + } + }, this); + } else { + $set[prop] = to; + } - var GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_'; + data[SET_ACTION] = $set; + return data; + }, - /** - * Opt the user in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ - function optIn(token, options) { - _optInOut(true, token, options); - } + unset_action: function(prop) { + var data = {}; + var $unset = []; + if (!_.isArray(prop)) { + prop = [prop]; + } - /** - * Opt the user out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not - */ - function optOut(token, options) { - _optInOut(false, token, options); - } + _.each(prop, function(k) { + if (!this._is_reserved_property(k)) { + $unset.push(k); + } + }, this); - /** - * Check whether the user has opted in to data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {boolean} whether the user has opted in to the given opt type - */ - function hasOptedIn(token, options) { - return _getStorageValue(token, options) === '1'; - } + data[UNSET_ACTION] = $unset; + return data; + }, - /** - * Check whether the user has opted out of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the user has opted out of the given opt type - */ - function hasOptedOut(token, options) { - if (_hasDoNotTrackFlagOn(options)) { - console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); - return true; - } - var optedOut = _getStorageValue(token, options) === '0'; - if (optedOut) { - console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + set_once_action: function(prop, to) { + var data = {}; + var $set_once = {}; + if (_.isObject(prop)) { + _.each(prop, function(v, k) { + if (!this._is_reserved_property(k)) { + $set_once[k] = v; + } + }, this); + } else { + $set_once[prop] = to; + } + data[SET_ONCE_ACTION] = $set_once; + return data; + }, + + union_action: function(list_name, values) { + var data = {}; + var $union = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $union[k] = _.isArray(v) ? v : [v]; + } + }, this); + } else { + $union[list_name] = _.isArray(values) ? values : [values]; + } + data[UNION_ACTION] = $union; + return data; + }, + + append_action: function(list_name, value) { + var data = {}; + var $append = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $append[k] = v; + } + }, this); + } else { + $append[list_name] = value; + } + data[APPEND_ACTION] = $append; + return data; + }, + + remove_action: function(list_name, value) { + var data = {}; + var $remove = {}; + if (_.isObject(list_name)) { + _.each(list_name, function(v, k) { + if (!this._is_reserved_property(k)) { + $remove[k] = v; + } + }, this); + } else { + $remove[list_name] = value; + } + data[REMOVE_ACTION] = $remove; + return data; + }, + + delete_action: function() { + var data = {}; + data[DELETE_ACTION] = ''; + return data; } - return optedOut; - } + }; - /** - * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method - */ - function addOptOutCheckMixpanelLib(method) { - return _addOptOutCheck(method, function(name) { - return this.get_config(name); - }); - } + /* eslint camelcase: "off" */ /** - * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * Mixpanel Group Object + * @class */ - function addOptOutCheckMixpanelPeople(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); - } + function MixpanelGroup() {} + + _.extend(MixpanelGroup.prototype, apiActions); /** - * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @template {Function} M - * @param {M} method - wrapped method to be executed if the user has not opted out - * @returns {M} the wrapped method + * @param {Object} mixpanel_instance + * @param {string} group_key + * @param {*} group_id + * @param {import('./consent-gate').ConsentGate} consentGate */ - function addOptOutCheckMixpanelGroup(method) { - return _addOptOutCheck(method, function(name) { - return this._get_config(name); - }); - } + MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id, consentGate) { + this._mixpanel = mixpanel_instance; + this._group_key = group_key; + this._group_id = group_id; + this.consentGate = consentGate; + }; /** - * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not - */ - function clearOptInOut(token, options) { - options = options || {}; - _getStorage(options).remove( - _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain - ); - } - - /** Private **/ - - /** - * Get storage util - * @param {Object} [options] - * @param {string} [options.persistenceType] - * @returns {object} either _.cookie or _.localstorage - */ - function _getStorage(options) { - options = options || {}; - return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; - } - - /** - * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the name of the cookie for the given opt type + * Set properties on a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, dates, or lists + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function _getStorageKey(token, options) { - options = options || {}; - return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token; - } + MixpanelGroup.prototype.set = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + return this._send_request(data, callback); + }; /** - * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @returns {string} the value of the cookie for the given opt type + * Set properties on a group, only if they do not yet exist. + * This will not overwrite previous group property values, unlike + * group.set(). + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); + * + * // or set multiple properties at once + * mixpanel.get_group('company', 'mixpanel').set_once({ + * 'Location': '405 Howard', + * 'Founded' : 2009, + * }); + * // properties can be strings, integers, lists or dates + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function _getStorageValue(token, options) { - return _getStorage(options).get(_getStorageKey(token, options)); - } + MixpanelGroup.prototype.set_once = function(prop, to, callback) { + if (_.isObject(prop)) { + callback = to; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); + return this._send_request(data, callback); + }; /** - * Get the persistence type the opt-out check should read. opt_out_tracking() saves the flag - * in localStorage if it can be written, otherwise in a cookie. Read that store first, and - * the other one if no flag is there. - * @param {string} token - Mixpanel project tracking token - * @param {string} persistenceType - configured persistence type - * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name - * @returns {string} the persistence type to read + * Unset properties on a group permanently. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').unset('Founded'); + * ``` + * + * @param {String} prop The name of the property. + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { - if (persistenceType !== 'localStorage') { - return persistenceType; - } - var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; - var hasFlag = _getStorageValue(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; - if (hasFlag) { - return writtenTo; + MixpanelGroup.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; } - return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; - } + var data = this.unset_action(prop); + return this._send_request(data, callback); + }; /** - * Check whether the user has set the DNT/doNotTrack setting to true in their browser - * @param {Object} [options] - * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests - * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false - * @returns {boolean} whether the DNT setting is true + * Merge a given list with a list-valued group property, excluding duplicate values. + * + * @example + * ```js + * // merge a value to a list, creating it if needed + * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Array} values Values to merge with the given property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function _hasDoNotTrackFlagOn(options) { - if (options && options.ignoreDnt) { - return false; + MixpanelGroup.prototype.union = function(list_name, values, callback) { + if (_.isObject(list_name)) { + callback = values; } - var win$1 = (options && options.window) || win; - var nav = win$1['navigator'] || {}; - var hasDntOn = false; - - _.each([ - nav['doNotTrack'], // standard - nav['msDoNotTrack'], - win$1['doNotTrack'] - ], function(dntValue) { - if (_.includes([true, 1, '1', 'yes'], dntValue)) { - hasDntOn = true; + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); } - }); - - return hasDntOn; - } + return; + } + var data = this.union_action(list_name, values); + return this._send_request(data, callback); + }; /** - * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type - * @param {boolean} optValue - whether to opt the user in or out for the given opt type - * @param {string} token - Mixpanel project tracking token - * @param {Object} [options] - * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action - * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action - * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action - * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name - * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires - * @param {string} [options.cookieDomain] - custom cookie domain - * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled - * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not - * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + * Permanently delete a group. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').delete(); + * ``` + * + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function _optInOut(optValue, token, options) { - if (!_.isString(token) || !token.length) { - console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + MixpanelGroup.prototype['delete'] = function(callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } return; } - - options = options || {}; - - _getStorage(options).set( - _getStorageKey(token, options), - optValue ? 1 : 0, - _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, - !!options.crossSubdomainCookie, - !!options.secureCookie, - !!options.crossSiteCookie, - options.cookieDomain - ); - - if (options.track && optValue) { // only track event if opting in (optValue=true) - options.track(options.trackEventName || '$opt_in', options.trackProperties, { - 'send_immediately': true - }); - } - } + // bracket notation above prevents a minification error related to reserved words + var data = this.delete_action(); + return this._send_request(data, callback); + }; /** - * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token - * If the user has opted out, return early instead of executing the method. - * If a callback argument was provided, execute it passing the 0 error code. - * @param {function} method - wrapped method to be executed if the user has not opted out - * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check - * @returns {*} the result of executing method OR undefined if the user has opted out + * Remove a property from a group. The value will be ignored if doesn't exist. + * + * @example + * ```js + * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); + * ``` + * + * @param {String} list_name Name of the property. + * @param {Object} value Value to remove from the given group property + * @param {Function} [callback] If provided, the callback will be called after the tracking event */ - function _addOptOutCheck(method, getConfigValue) { - return function() { - var optedOut = false; - - try { - var token = getConfigValue.call(this, 'token'); - var ignoreDnt = getConfigValue.call(this, 'ignore_dnt'); - var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type'); - var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix'); - var win = getConfigValue.call(this, 'window'); // used to override window during browser tests - - if (token) { // if there was an issue getting the token, continue method execution as normal - optedOut = hasOptedOut(token, { - ignoreDnt: ignoreDnt, - persistenceType: _getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix), - persistencePrefix: persistencePrefix, - window: win - }); - } - } catch(err) { - console.error('Unexpected error when checking tracking opt-out status: ' + err); - } - - if (!optedOut) { - return method.apply(this, arguments); - } - - var callback = arguments[arguments.length - 1]; - if (typeof(callback) === 'function') { + MixpanelGroup.prototype.remove = function(list_name, value, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { callback(0); } - return; - }; - } + } + var data = this.remove_action(list_name, value); + return this._send_request(data, callback); + }; - /* eslint camelcase: "off" */ + MixpanelGroup.prototype._send_request = function(data, callback) { + data['$group_key'] = this._group_key; + data['$group_id'] = this._group_id; + data['$token'] = this._get_config('token'); + var date_encoded_data = _.encodeDates(data); + return this._mixpanel._track_or_batch({ + type: 'groups', + data: date_encoded_data, + endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], + batcher: this._mixpanel.request_batchers.groups + }, callback); + }; - /** @const */ var SET_ACTION = '$set'; - /** @const */ var SET_ONCE_ACTION = '$set_once'; - /** @const */ var UNSET_ACTION = '$unset'; - /** @const */ var ADD_ACTION = '$add'; - /** @const */ var APPEND_ACTION = '$append'; - /** @const */ var UNION_ACTION = '$union'; - /** @const */ var REMOVE_ACTION = '$remove'; - /** @const */ var DELETE_ACTION = '$delete'; - - // Common internal methods for mixpanel.people and mixpanel.group APIs. - // These methods shouldn't involve network I/O. - var apiActions = { - set_action: function(prop, to) { - var data = {}; - var $set = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set[k] = v; - } - }, this); - } else { - $set[prop] = to; - } - - data[SET_ACTION] = $set; - return data; - }, - - unset_action: function(prop) { - var data = {}; - var $unset = []; - if (!_.isArray(prop)) { - prop = [prop]; - } - - _.each(prop, function(k) { - if (!this._is_reserved_property(k)) { - $unset.push(k); - } - }, this); - - data[UNSET_ACTION] = $unset; - return data; - }, - - set_once_action: function(prop, to) { - var data = {}; - var $set_once = {}; - if (_.isObject(prop)) { - _.each(prop, function(v, k) { - if (!this._is_reserved_property(k)) { - $set_once[k] = v; - } - }, this); - } else { - $set_once[prop] = to; - } - data[SET_ONCE_ACTION] = $set_once; - return data; - }, - - union_action: function(list_name, values) { - var data = {}; - var $union = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $union[k] = _.isArray(v) ? v : [v]; - } - }, this); - } else { - $union[list_name] = _.isArray(values) ? values : [values]; - } - data[UNION_ACTION] = $union; - return data; - }, - - append_action: function(list_name, value) { - var data = {}; - var $append = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $append[k] = v; - } - }, this); - } else { - $append[list_name] = value; - } - data[APPEND_ACTION] = $append; - return data; - }, + MixpanelGroup.prototype._is_reserved_property = function(prop) { + return prop === '$group_key' || prop === '$group_id'; + }; - remove_action: function(list_name, value) { - var data = {}; - var $remove = {}; - if (_.isObject(list_name)) { - _.each(list_name, function(v, k) { - if (!this._is_reserved_property(k)) { - $remove[k] = v; - } - }, this); - } else { - $remove[list_name] = value; - } - data[REMOVE_ACTION] = $remove; - return data; - }, + MixpanelGroup.prototype._get_config = function(conf) { + return this._mixpanel.get_config(conf); + }; - delete_action: function() { - var data = {}; - data[DELETE_ACTION] = ''; - return data; - } + MixpanelGroup.prototype.toString = function() { + return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; }; + // MixpanelGroup Exports + // (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would + // make TypeScript type them as `any`, which breaks the generated API docs) + var MixpanelGroupProto = MixpanelGroup.prototype; + MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; + MixpanelGroupProto['set'] = MixpanelGroupProto.set; + MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; + MixpanelGroupProto['union'] = MixpanelGroupProto.union; + MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; + MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; + /* eslint camelcase: "off" */ /** - * Mixpanel Group Object + * Mixpanel People Object * @class */ - function MixpanelGroup() {} + function MixpanelPeople() {} - _.extend(MixpanelGroup.prototype, apiActions); + _.extend(MixpanelPeople.prototype, apiActions); - MixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) { + /** + * @param {Object} mixpanel_instance + * @param {import('./consent-gate').ConsentGate} consentGate + */ + MixpanelPeople.prototype._init = function(mixpanel_instance, consentGate) { this._mixpanel = mixpanel_instance; - this._group_key = group_key; - this._group_id = group_id; + this.consentGate = consentGate; }; - MixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup( /** - * Set properties on a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, dates, or lists - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ - function(prop, to, callback) { - var data = this.set_action(prop, to); + * Set properties on a user record. + * + * @example + * ```js + * mixpanel.people.set('gender', 'm'); + * + * // or set multiple properties at once + * mixpanel.people.set({ + * 'Company': 'Acme', + * 'Plan': 'Premium', + * 'Upgrade date': new Date() + * }); + * // properties can be strings, integers, dates, or lists + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after tracking the event. + */ + MixpanelPeople.prototype.set = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_action(prop, to); + // make sure that the referrer info has been updated and saved + if (this._get_config('save_referrer')) { + this._mixpanel['persistence'].update_referrer_info(document.referrer); + } + + // update $set object with default people properties + data[SET_ACTION] = _.extend( + {}, + _.info.people_properties(), + data[SET_ACTION] + ); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup( /** - * Set properties on a group, only if they do not yet exist. - * This will not overwrite previous group property values, unlike - * group.set(). - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard'); - * - * // or set multiple properties at once - * mixpanel.get_group('company', 'mixpanel').set_once({ - * 'Location': '405 Howard', - * 'Founded' : 2009, - * }); - * // properties can be strings, integers, lists or dates - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ - function(prop, to, callback) { - var data = this.set_once_action(prop, to); + * Set properties on a user record, only if they do not yet exist. + * This will not overwrite previous people property values, unlike + * people.set(). + * + * @example + * ```js + * mixpanel.people.set_once('First Login Date', new Date()); + * + * // or set multiple properties at once + * mixpanel.people.set_once({ + * 'First Login Date': new Date(), + * 'Starting Plan': 'Premium' + * }); + * + * // properties can be strings, integers or dates + * ``` + * + * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. + * @param {*} [to] A value to set on the given property name + * @param {Function} [callback] If provided, the callback will be called after tracking the event. + */ + MixpanelPeople.prototype.set_once = function(prop, to, callback) { if (_.isObject(prop)) { callback = to; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } + var data = this.set_once_action(prop, to); return this._send_request(data, callback); - }); + }; - MixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup( - /** - * Unset properties on a group permanently. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').unset('Founded'); - * ``` - * - * @param {String} prop The name of the property. - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ - function(prop, callback) { - var data = this.unset_action(prop); - return this._send_request(data, callback); - }); - - MixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup( - /** - * Merge a given list with a list-valued group property, excluding duplicate values. - * - * @example - * ```js - * // merge a value to a list, creating it if needed - * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Array} values Values to merge with the given property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ - function(list_name, values, callback) { - if (_.isObject(list_name)) { - callback = values; - } - var data = this.union_action(list_name, values); - return this._send_request(data, callback); - }); - - MixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup( - /** - * Permanently delete a group. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').delete(); - * ``` - * - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ - function(callback) { - // bracket notation above prevents a minification error related to reserved words - var data = this.delete_action(); - return this._send_request(data, callback); - }); - - MixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup( - /** - * Remove a property from a group. The value will be ignored if doesn't exist. - * - * @example - * ```js - * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London'); - * ``` - * - * @param {String} list_name Name of the property. - * @param {Object} value Value to remove from the given group property - * @param {Function} [callback] If provided, the callback will be called after the tracking event - */ - function(list_name, value, callback) { - var data = this.remove_action(list_name, value); - return this._send_request(data, callback); - }); - - MixpanelGroup.prototype._send_request = function(data, callback) { - data['$group_key'] = this._group_key; - data['$group_id'] = this._group_id; - data['$token'] = this._get_config('token'); - - var date_encoded_data = _.encodeDates(data); - return this._mixpanel._track_or_batch({ - type: 'groups', - data: date_encoded_data, - endpoint: this._mixpanel.get_api_host('groups') + '/' + this._get_config('api_routes')['groups'], - batcher: this._mixpanel.request_batchers.groups - }, callback); - }; - - MixpanelGroup.prototype._is_reserved_property = function(prop) { - return prop === '$group_key' || prop === '$group_id'; - }; - - MixpanelGroup.prototype._get_config = function(conf) { - return this._mixpanel.get_config(conf); - }; - - MixpanelGroup.prototype.toString = function() { - return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id; - }; - - // MixpanelGroup Exports - // (assigned through an alias: a second `MixpanelGroup.prototype[...]` declaration of each method would - // make TypeScript type them as `any`, which breaks the generated API docs) - var MixpanelGroupProto = MixpanelGroup.prototype; - MixpanelGroupProto['remove'] = MixpanelGroupProto.remove; - MixpanelGroupProto['set'] = MixpanelGroupProto.set; - MixpanelGroupProto['set_once'] = MixpanelGroupProto.set_once; - MixpanelGroupProto['union'] = MixpanelGroupProto.union; - MixpanelGroupProto['unset'] = MixpanelGroupProto.unset; - MixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString; - - /* eslint camelcase: "off" */ - - /** - * Mixpanel People Object - * @class - */ - function MixpanelPeople() {} - - _.extend(MixpanelPeople.prototype, apiActions); - - MixpanelPeople.prototype._init = function(mixpanel_instance) { - this._mixpanel = mixpanel_instance; - }; - - MixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople( - /** - * Set properties on a user record. - * - * @example - * ```js - * mixpanel.people.set('gender', 'm'); - * - * // or set multiple properties at once - * mixpanel.people.set({ - * 'Company': 'Acme', - * 'Plan': 'Premium', - * 'Upgrade date': new Date() - * }); - * // properties can be strings, integers, dates, or lists - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after tracking the event. - */ - function(prop, to, callback) { - var data = this.set_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - // make sure that the referrer info has been updated and saved - if (this._get_config('save_referrer')) { - this._mixpanel['persistence'].update_referrer_info(document.referrer); - } - - // update $set object with default people properties - data[SET_ACTION] = _.extend( - {}, - _.info.people_properties(), - data[SET_ACTION] - ); - return this._send_request(data, callback); - }); - - MixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople( - /** - * Set properties on a user record, only if they do not yet exist. - * This will not overwrite previous people property values, unlike - * people.set(). - * - * @example - * ```js - * mixpanel.people.set_once('First Login Date', new Date()); - * - * // or set multiple properties at once - * mixpanel.people.set_once({ - * 'First Login Date': new Date(), - * 'Starting Plan': 'Premium' - * }); - * - * // properties can be strings, integers or dates - * ``` - * - * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values. - * @param {*} [to] A value to set on the given property name - * @param {Function} [callback] If provided, the callback will be called after tracking the event. - */ - function(prop, to, callback) { - var data = this.set_once_action(prop, to); - if (_.isObject(prop)) { - callback = to; - } - return this._send_request(data, callback); - }); - - MixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople( /** * Unset properties on a user record (permanently removes the properties and their values from a profile). * @@ -7110,12 +6912,17 @@ * @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names. * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, callback) { + MixpanelPeople.prototype.unset = function(prop, callback) { + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.unset_action(prop); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople( /** * Increment/decrement numeric people analytics properties. * @@ -7142,7 +6949,16 @@ * @param {Number} [by] An amount to increment the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(prop, by, callback) { + MixpanelPeople.prototype.increment = function(prop, by, callback) { + if (_.isObject(prop)) { + callback = by; + } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = {}; var $add = {}; if (_.isObject(prop)) { @@ -7156,7 +6972,6 @@ } } }, this); - callback = by; } else { // convenience: mixpanel.people.increment('property'); will // increment 'property' by 1 @@ -7168,9 +6983,8 @@ data[ADD_ACTION] = $add; return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople( /** * Append a value to a list-valued people analytics property. * @@ -7191,15 +7005,20 @@ * @param {*} [value] value An item to append to the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, value, callback) { + MixpanelPeople.prototype.append = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.append_action(list_name, value); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople( /** * Remove a value from a list-valued people analytics property. * @@ -7212,15 +7031,20 @@ * @param {*} [value] value Item to remove from the list * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, value, callback) { + MixpanelPeople.prototype.remove = function(list_name, value, callback) { if (_.isObject(list_name)) { callback = value; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.remove_action(list_name, value); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople( /** * Merge a given list with a list-valued people analytics property, * excluding duplicate values. @@ -7248,15 +7072,20 @@ * @param {*} [values] Value / values to merge with the given property * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(list_name, values, callback) { + MixpanelPeople.prototype.union = function(list_name, values, callback) { if (_.isObject(list_name)) { callback = values; } + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var data = this.union_action(list_name, values); return this._send_request(data, callback); - }); + }; - MixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople( /** * Record that you have charged the current user a certain amount * of money. Charges recorded with track_charge() will appear in the @@ -7278,9 +7107,15 @@ * @param {Function} [callback] If provided, the callback will be called when the server responds * @deprecated */ - function(amount, properties, callback) { // eslint-disable-line no-unused-vars + MixpanelPeople.prototype.track_charge = function(amount, properties, callback) { // eslint-disable-line no-unused-vars + if (!this.consentGate.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } console.error('mixpanel.people.track_charge() is deprecated and no longer has any effect.'); - }); + }; /** * Permanently clear all revenue report transactions from the @@ -7494,428 +7329,1390 @@ /* eslint camelcase: "off" */ - /* - * Constants + /* + * Constants + */ + /** @const */ var SET_QUEUE_KEY = '__mps'; + /** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; + /** @const */ var UNSET_QUEUE_KEY = '__mpus'; + /** @const */ var ADD_QUEUE_KEY = '__mpa'; + /** @const */ var APPEND_QUEUE_KEY = '__mpap'; + /** @const */ var REMOVE_QUEUE_KEY = '__mpr'; + /** @const */ var UNION_QUEUE_KEY = '__mpu'; + // This key is deprecated, but we want to check for it to see whether aliasing is allowed. + /** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; + /** @const */ var ALIAS_ID_KEY = '__alias'; + /** @const */ var EVENT_TIMERS_KEY = '__timers'; + /** @const */ var RESERVED_PROPERTIES = [ + SET_QUEUE_KEY, + SET_ONCE_QUEUE_KEY, + UNSET_QUEUE_KEY, + ADD_QUEUE_KEY, + APPEND_QUEUE_KEY, + REMOVE_QUEUE_KEY, + UNION_QUEUE_KEY, + PEOPLE_DISTINCT_ID_KEY, + ALIAS_ID_KEY, + EVENT_TIMERS_KEY + ]; + + // the store while persistence is off: nothing is read or written + /** @const */ var NULL_STORAGE = { + parse: function() { return null; }, + set: function() {} + }; + + /** + * Mixpanel Persistence Object + * @constructor + * @param {Object} config + * @param {Object} [options] + * @param {boolean} [options.closed] start closed, keeping props in memory without reading, writing + * or probing storage until open() + */ + var MixpanelPersistence = function(config, options) { + this['props'] = {}; + this.campaign_params_saved = false; + + if (config['persistence_name']) { + this.name = 'mp_' + config['persistence_name']; + } else { + this.name = 'mp_' + config['token'] + '_mixpanel'; + } + + var storage_type = config['persistence']; + if (storage_type !== 'cookie' && storage_type !== 'localStorage') { + console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); + config['persistence'] = 'cookie'; + } + this.storage_type = config['persistence']; + + this.closed = true; + this.storage = NULL_STORAGE; + this.update_config(config); + if (!(options && options.closed)) { + this.open(); + } + }; + + MixpanelPersistence.prototype._choose_backend = function() { + if (this.storage_type === 'localStorage' && _.localStorage.is_supported()) { + this.backend = _.localStorage; + } else { + this.backend = _.cookie; + } + this.storage = this.backend; + }; + + MixpanelPersistence.prototype.properties = function() { + var p = {}; + + this.load(); + + // Filter out reserved properties + _.each(this['props'], function(v, k) { + if (!_.include(RESERVED_PROPERTIES, k)) { + p[k] = v; + } + }); + return p; + }; + + MixpanelPersistence.prototype.load = function() { + var entry = this.storage.parse(this.name); + + if (entry) { + this['props'] = _.extend({}, entry); + } + }; + + MixpanelPersistence.prototype.upgrade = function() { + var old_cookie, + old_localstorage; + + // if transferring from cookie to localStorage or vice-versa, copy existing + // super properties over to new storage mode + if (this.backend === _.localStorage) { + old_cookie = _.cookie.parse(this.name); + + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + + if (old_cookie) { + this.register_once(old_cookie); + } + } else if (this.backend === _.cookie) { + old_localstorage = _.localStorage.parse(this.name); + + _.localStorage.remove(this.name); + + if (old_localstorage) { + this.register_once(old_localstorage); + } + } + }; + + MixpanelPersistence.prototype.save = function() { + this.storage.set( + this.name, + JSONStringify(this['props']), + this.expire_days, + this.cross_subdomain, + this.secure, + this.cross_site, + this.cookie_domain + ); + }; + + MixpanelPersistence.prototype.load_prop = function(key) { + this.load(); + return this['props'][key]; + }; + + MixpanelPersistence.prototype.remove = function() { + // persistence that started closed has no backend until it opens + if (!this.backend) { return; } + // remove both domain and subdomain cookies + this.backend.remove(this.name, false, this.cookie_domain); + this.backend.remove(this.name, true, this.cookie_domain); + }; + + // removes the storage entry and deletes all loaded data + // forced name for tests + MixpanelPersistence.prototype.clear = function() { + this.remove(); + this['props'] = {}; + }; + + /** + * @param {Object} props + * @param {*=} default_value + * @param {number=} days + */ + MixpanelPersistence.prototype.register_once = function(props, default_value, days) { + if (_.isObject(props)) { + if (typeof(default_value) === 'undefined') { default_value = 'None'; } + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + + _.each(props, function(val, prop) { + if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { + this['props'][prop] = val; + } + }, this); + + this.save(); + + return true; + } + return false; + }; + + /** + * @param {Object} props + * @param {number=} days + */ + MixpanelPersistence.prototype.register = function(props, days) { + if (_.isObject(props)) { + this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + + this.load(); + _.extend(this['props'], props); + this.save(); + + return true; + } + return false; + }; + + MixpanelPersistence.prototype.unregister = function(prop) { + this.load(); + if (prop in this['props']) { + delete this['props'][prop]; + this.save(); + } + }; + + MixpanelPersistence.prototype.update_search_keyword = function(referrer) { + this.register(_.info.searchInfo(referrer)); + }; + + // EXPORTED METHOD, we test this directly. + MixpanelPersistence.prototype.update_referrer_info = function(referrer) { + // If referrer doesn't exist, we want to note the fact that it was type-in traffic. + this.register_once({ + '$initial_referrer': referrer || '$direct', + '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' + }, ''); + }; + + MixpanelPersistence.prototype.get_referrer_info = function() { + return _.strip_empty_properties({ + '$initial_referrer': this['props']['$initial_referrer'], + '$initial_referring_domain': this['props']['$initial_referring_domain'] + }); + }; + + MixpanelPersistence.prototype.update_config = function(config) { + this.default_expiry = this.expire_days = config['cookie_expiration']; + this.set_disabled(config['disable_persistence']); + this.set_cookie_domain(config['cookie_domain']); + this.set_cross_site(config['cross_site_cookie']); + this.set_cross_subdomain(config['cross_subdomain_cookie']); + this.set_secure(config['secure_cookie']); + }; + + /** + * Turn persistence off or on for the disable_persistence config. Consent closes it separately, so a + * config change doesn't reopen what consent closed. + * @param {boolean} disabled + */ + MixpanelPersistence.prototype.set_disabled = function(disabled) { + this.disabled = disabled; + this._update_storage(); + }; + + /** + * Stop reading and writing storage, and remove the stored entry. The props stay in memory. + */ + MixpanelPersistence.prototype.close = function() { + if (this.closed) { return; } + this.closed = true; + this._update_storage(); + }; + + /** + * Read and write storage again, saving the props in memory to it. + */ + MixpanelPersistence.prototype.open = function() { + if (!this.closed) { return; } + this.closed = false; + if (!this.backend) { + // what the page set while closed goes on top of what's stored + var memory_props = this['props']; + this['props'] = {}; + this._choose_backend(); + this.load(); + _.extend(this['props'], memory_props); + // nothing is written until _update_storage, which writes nothing while persistence is + // disabled + this.storage = NULL_STORAGE; + this.upgrade(); + // remove any copy an earlier config left at another cookie scope or in the other store + this.remove_stored_entry(); + } + this._update_storage(); + }; + + /** + * Delete the stored entry from both backends at every cookie scope, whether or not storage is + * open: an earlier page load or config may have left one anywhere. + */ + MixpanelPersistence.prototype.remove_stored_entry = function() { + _.cookie.remove(this.name); + _.cookie.remove(this.name, true); + if (this.cookie_domain) { + _.cookie.remove(this.name, false, this.cookie_domain); + } + _.localStorage.remove(this.name); + }; + + MixpanelPersistence.prototype._update_storage = function() { + if (this.disabled || this.closed) { + this.storage = NULL_STORAGE; + this.remove(); + } else { + this.storage = this.backend; + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { + if (cookie_domain !== this.cookie_domain) { + this.remove(); + this.cookie_domain = cookie_domain; + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cross_site = function(cross_site) { + if (cross_site !== this.cross_site) { + this.cross_site = cross_site; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { + if (cross_subdomain !== this.cross_subdomain) { + this.cross_subdomain = cross_subdomain; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype.get_cross_subdomain = function() { + return this.cross_subdomain; + }; + + MixpanelPersistence.prototype.set_secure = function(secure) { + if (secure !== this.secure) { + this.secure = secure ? true : false; + this.remove(); + this.save(); + } + }; + + MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { + var q_key = this._get_queue_key(queue), + q_data = data[queue], + set_q = this._get_or_create_queue(SET_ACTION), + set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), + unset_q = this._get_or_create_queue(UNSET_ACTION), + add_q = this._get_or_create_queue(ADD_ACTION), + union_q = this._get_or_create_queue(UNION_ACTION), + remove_q = this._get_or_create_queue(REMOVE_ACTION, []), + append_q = this._get_or_create_queue(APPEND_ACTION, []); + + if (q_key === SET_QUEUE_KEY) { + // Update the set queue - we can override any existing values + _.extend(set_q, q_data); + // if there was a pending increment, override it + // with the set. + this._pop_from_people_queue(ADD_ACTION, q_data); + // if there was a pending union, override it + // with the set. + this._pop_from_people_queue(UNION_ACTION, q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === SET_ONCE_QUEUE_KEY) { + // only queue the data if there is not already a set_once call for it. + _.each(q_data, function(v, k) { + if (!(k in set_once_q)) { + set_once_q[k] = v; + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNSET_QUEUE_KEY) { + _.each(q_data, function(prop) { + + // undo previously-queued actions on this key + _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { + if (prop in enqueued_obj) { + delete enqueued_obj[prop]; + } + }); + _.each(append_q, function(append_obj) { + if (prop in append_obj) { + delete append_obj[prop]; + } + }); + + unset_q[prop] = true; + + }); + } else if (q_key === ADD_QUEUE_KEY) { + _.each(q_data, function(v, k) { + // If it exists in the set queue, increment + // the value + if (k in set_q) { + set_q[k] += v; + } else { + // If it doesn't exist, update the add + // queue + if (!(k in add_q)) { + add_q[k] = 0; + } + add_q[k] += v; + } + }, this); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === UNION_QUEUE_KEY) { + _.each(q_data, function(v, k) { + if (_.isArray(v)) { + if (!(k in union_q)) { + union_q[k] = []; + } + // Prevent duplicate values + _.each(v, function(item) { + if (!_.include(union_q[k], item)) { + union_q[k].push(item); + } + }); + } + }); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } else if (q_key === REMOVE_QUEUE_KEY) { + remove_q.push(q_data); + this._pop_from_people_queue(APPEND_ACTION, q_data); + } else if (q_key === APPEND_QUEUE_KEY) { + append_q.push(q_data); + this._pop_from_people_queue(UNSET_ACTION, q_data); + } + + console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); + console.log(data); + + this.save(); + }; + + MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { + var q = this['props'][this._get_queue_key(queue)]; + if (!_.isUndefined(q)) { + _.each(data, function(v, k) { + if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { + // list actions: only remove if both k+v match + // e.g. remove should not override append in a case like + // append({foo: 'bar'}); remove({foo: 'qux'}) + _.each(q, function(queued_action) { + if (queued_action[k] === v) { + delete queued_action[k]; + } + }); + } else { + delete q[k]; + } + }, this); + } + }; + + MixpanelPersistence.prototype.load_queue = function(queue) { + return this.load_prop(this._get_queue_key(queue)); + }; + + MixpanelPersistence.prototype._get_queue_key = function(queue) { + if (queue === SET_ACTION) { + return SET_QUEUE_KEY; + } else if (queue === SET_ONCE_ACTION) { + return SET_ONCE_QUEUE_KEY; + } else if (queue === UNSET_ACTION) { + return UNSET_QUEUE_KEY; + } else if (queue === ADD_ACTION) { + return ADD_QUEUE_KEY; + } else if (queue === APPEND_ACTION) { + return APPEND_QUEUE_KEY; + } else if (queue === REMOVE_ACTION) { + return REMOVE_QUEUE_KEY; + } else if (queue === UNION_ACTION) { + return UNION_QUEUE_KEY; + } else { + console.error('Invalid queue:', queue); + } + }; + + MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { + var key = this._get_queue_key(queue); + default_val = _.isUndefined(default_val) ? {} : default_val; + return this['props'][key] || (this['props'][key] = default_val); + }; + + MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + timers[event_name] = timestamp; + this['props'][EVENT_TIMERS_KEY] = timers; + this.save(); + }; + + MixpanelPersistence.prototype.remove_event_timer = function(event_name) { + var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; + var timestamp = timers[event_name]; + if (!_.isUndefined(timestamp)) { + delete this['props'][EVENT_TIMERS_KEY][event_name]; + this.save(); + } + return timestamp; + }; + + /** + * The consent rules as two tables: CONSENT_MODES maps each mode's decisions to a state, and + * CONSENT_STATES says what each state allows: + * 'api_calls' the public tracking, people, group and replay methods run + * 'send' tracking requests go out + * 'fetch' feature flags and remote settings are fetched + * 'store' the services store data about the visitor + */ + + + /** @const */ var CONSENT_MODE_NO_CONSENT_REQUIRED = 'no_consent_required'; + /** @const */ var CONSENT_MODE_REQUIRE_CONSENT = 'require_consent'; + + /** @const */ var CAPABILITIES = ['api_calls', 'send', 'fetch', 'store']; + + /** @const */ var DECISION_NONE = 'none'; + /** @const */ var DECISION_OPTED_IN = 'opted_in'; + /** @const */ var DECISION_OPTED_OUT = 'opted_out'; + // Do Not Track counts as an objection + /** @const */ var DECISION_OBJECTED = 'objected'; + + /** @const */ var STATE_FULL = 'full'; + /** @const */ var STATE_API_CALLS_STOPPED = 'api_calls_stopped'; + /** @const */ var STATE_BLOCKED = 'blocked'; + + /** @const */ var CONSENT_STATES = { + // the SDK works normally, as for a site with no consent rules + 'full': {'api_calls': true, 'send': true, 'fetch': true, 'store': true}, + // an opt-out under 'no_consent_required': the public calls do nothing, flags keep loading, + // and persistence follows the opt-out's clear_persistence and enable_persistence options + 'api_calls_stopped': {'api_calls': false, 'send': true, 'fetch': true, 'store': true}, + // nothing runs, is sent or is stored + 'blocked': {'api_calls': false, 'send': false, 'fetch': false, 'store': false} + }; + + /** + * Each mode's state for each decision. 'no_consent_required' keeps its decisions with + * OptOutFlagDecisions, the other modes with ConsentDecisions. + */ + /** @const */ var CONSENT_MODES = { + 'no_consent_required': {'none': STATE_FULL, 'opted_in': STATE_FULL, 'opted_out': STATE_API_CALLS_STOPPED, 'objected': STATE_API_CALLS_STOPPED}, + 'require_consent': {'none': STATE_BLOCKED, 'opted_in': STATE_FULL, 'opted_out': STATE_BLOCKED, 'objected': STATE_BLOCKED} + }; + + /** + * The mode for a consent_mode config value, by default 'no_consent_required'. An unknown value + * falls back to 'require_consent', so a typo stores and sends nothing before consent. + * @param {string|null|undefined} configuredMode + * @returns {string} + */ + function resolveConsentMode(configuredMode) { + if (!configuredMode) { + return CONSENT_MODE_NO_CONSENT_REQUIRED; + } + if (!CONSENT_MODES.hasOwnProperty(configuredMode)) { + console.critical('Unknown consent_mode ' + configuredMode + '; using \'' + CONSENT_MODE_REQUIRE_CONSENT + '\''); + return CONSENT_MODE_REQUIRE_CONSENT; + } + return configuredMode; + } + + /** + * The visitor's decision: Do Not Track, then the stored opt-out flag. + * @param {boolean} doNotTrack whether Do Not Track is on and not ignored + * @param {string|null} storedFlag '1', '0', or null when there's none + * @returns {string} + */ + function readDecision(doNotTrack, storedFlag) { + if (doNotTrack) { + console.warn('This browser has "Do Not Track" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the "Do Not Track" browser setting, initialize the Mixpanel instance with the config "ignore_dnt: true"'); + return DECISION_OBJECTED; + } + + if (storedFlag === '1') { + return DECISION_OPTED_IN; + } else if (storedFlag === '0') { + console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.'); + return DECISION_OPTED_OUT; + } + return DECISION_NONE; + } + + /** + * What the services ask before they store or send on their own. A ConsentManager is one; a new + * storage write or network send must ask it too. + * @typedef {Object} ConsentGate + * @property {function(): boolean} allowsApiCalls whether the public tracking, people, group and + * replay methods run + * @property {function(): boolean} allowsSending whether tracking requests go out + * @property {function(): boolean} allowsFetching whether feature flags and remote settings are + * fetched + * @property {function(): boolean} allowsStoring whether consent allows storing data about the + * visitor; identify() and alias() ask this, since disable_persistence doesn't stop them + * @property {function(): boolean} allowsPersistence whether the services may write to browser + * storage: consent allows storing, and disable_persistence is off. Without it they keep their data + * in memory. + */ + + + /** + * @param {function(string): boolean} allowsFunc whether consent allows 'api_calls', 'send', + * 'fetch' or 'store' now + * @param {function(string): *} getConfigFunc + * @returns {ConsentGate} + */ + function buildConsentGate(allowsFunc, getConfigFunc) { + var gate = { + // if asking throws, the call runs + allowsApiCalls: function() { + try { + return allowsFunc('api_calls'); + } catch (err) { + console.error('Unexpected error when checking tracking opt-out status: ' + err); + return true; + } + }, + allowsSending: function() { + return allowsFunc('send'); + }, + allowsFetching: function() { + return allowsFunc('fetch'); + }, + allowsStoring: function() { + return allowsFunc('store'); + }, + allowsPersistence: function() { + return gate.allowsStoring() && !getConfigFunc('disable_persistence'); + } + }; + return gate; + } + + /** + * GDPR utils + * + * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection + * and privacy for all individuals within the European Union. It addresses the export of personal + * data outside the EU. The GDPR aims primarily to give control back to citizens and residents + * over their personal data and to simplify the regulatory environment for international business + * by unifying the regulation within the EU. + * + * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK. + * These functions are used internally by the SDK and are not intended to be publicly exposed. + */ + + + /** + * A function used to track a Mixpanel event (e.g. MixpanelLib.track) + * @callback trackFunction + * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc. + * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself. + * @param {Function} [callback] If provided, the callback function will be called after tracking the event. + */ + + /** Public **/ + + var OPT_IN_OUT_FLAG_PREFIX = '__mp_opt_in_out_'; + + /** + * Opt the user in to data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function optIn(token, options) { + _optInOut(true, token, options); + } + + /** + * Opt the user out of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not + */ + function optOut(token, options) { + _optInOut(false, token, options); + } + + /** + * Get the persistence type to read the opt-in/out flag from. OptOutFlagDecisions writes + * the flag to localStorage if it passes the localStorageSupported probe, otherwise to a cookie. + * Read that store first, and the other one if no flag is there. + * @param {string} token - Mixpanel project tracking token + * @param {string} persistenceType - configured persistence type + * @param {string} [persistencePrefix] - custom prefix used in the cookie/localstorage name + * @returns {string} the persistence type to read + */ + function getOptOutCheckPersistenceType(token, persistenceType, persistencePrefix) { + if (persistenceType !== 'localStorage') { + return persistenceType; + } + var writtenTo = localStorageSupported(getLocalStorage()) ? 'localStorage' : 'cookie'; + var hasFlag = readOptInOutFlag(token, {persistenceType: writtenTo, persistencePrefix: persistencePrefix}) !== null; + if (hasFlag) { + return writtenTo; + } + return writtenTo === 'localStorage' ? 'cookie' : 'localStorage'; + } + + /** + * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function clearOptInOut(token, options) { + options = options || {}; + _getStorage(options).remove( + _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain + ); + } + + /** Private **/ + + /** + * Get storage util + * @param {Object} [options] + * @param {string} [options.persistenceType] + * @returns {object} either _.cookie or _.localstorage + */ + function _getStorage(options) { + options = options || {}; + return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie; + } + + /** + * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the name of the cookie for the given opt type + */ + function _getStorageKey(token, options) { + options = options || {}; + return (options.persistencePrefix || OPT_IN_OUT_FLAG_PREFIX) + token; + } + + /** + * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.) + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @returns {string} the value of the cookie for the given opt type + */ + function readOptInOutFlag(token, options) { + return _getStorage(options).get(_getStorageKey(token, options)); + } + + /** + * Whether Do Not Track is on for an instance, unless its config or a call's options ignore it. + * @param {function(string): *} getConfigFunc the instance's get_config + * @param {Object} [options] a call's ignore_dnt option, which overrides the config's + * @returns {boolean} + */ + function doNotTrackApplies(getConfigFunc, options) { + options = _.extend({'ignore_dnt': getConfigFunc('ignore_dnt')}, options); + return hasDoNotTrackFlagOn({ + ignoreDnt: options['ignore_dnt'], + window: getConfigFunc('window') // used to override window during browser tests + }); + } + + /** + * Check whether the user has set the DNT/doNotTrack setting to true in their browser + * @param {Object} [options] + * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests + * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false + * @returns {boolean} whether the DNT setting is true + */ + function hasDoNotTrackFlagOn(options) { + if (options && options.ignoreDnt) { + return false; + } + var win$1 = (options && options.window) || win; + var nav = win$1['navigator'] || {}; + var hasDntOn = false; + + _.each([ + nav['doNotTrack'], // standard + nav['msDoNotTrack'], + win$1['doNotTrack'] + ], function(dntValue) { + if (_.includes([true, 1, '1', 'yes'], dntValue)) { + hasDntOn = true; + } + }); + + return hasDntOn; + } + + /** + * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type + * @param {boolean} optValue - whether to opt the user in or out for the given opt type + * @param {string} token - Mixpanel project tracking token + * @param {Object} [options] + * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action + * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action + * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action + * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name + * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires + * @param {string} [options.cookieDomain] - custom cookie domain + * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled + * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not + * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not + */ + function _optInOut(optValue, token, options) { + if (!_.isString(token) || !token.length) { + console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token'); + return; + } + + options = options || {}; + + _getStorage(options).set( + _getStorageKey(token, options), + optValue ? 1 : 0, + _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, + !!options.crossSubdomainCookie, + !!options.secureCookie, + !!options.crossSiteCookie, + options.cookieDomain + ); + + if (options.track && optValue) { // only track event if opting in (optValue=true) + options.track(options.trackEventName || '$opt_in', options.trackProperties, { + 'send_immediately': true + }); + } + } + + /** + * Decisions under 'no_consent_required', which is what the opt_out_* configs have always done. The + * decision is the opt-out flag in opt_out_tracking_persistence_type, read at every check so another + * tab's decision applies at once. A decision's clear_persistence and enable_persistence options + * turn the instance's persistence off or on, and opt_out_tracking_by_default stores an opt-out at + * init when nothing is stored. */ - /** @const */ var SET_QUEUE_KEY = '__mps'; - /** @const */ var SET_ONCE_QUEUE_KEY = '__mpso'; - /** @const */ var UNSET_QUEUE_KEY = '__mpus'; - /** @const */ var ADD_QUEUE_KEY = '__mpa'; - /** @const */ var APPEND_QUEUE_KEY = '__mpap'; - /** @const */ var REMOVE_QUEUE_KEY = '__mpr'; - /** @const */ var UNION_QUEUE_KEY = '__mpu'; - // This key is deprecated, but we want to check for it to see whether aliasing is allowed. - /** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'; - /** @const */ var ALIAS_ID_KEY = '__alias'; - /** @const */ var EVENT_TIMERS_KEY = '__timers'; - /** @const */ var RESERVED_PROPERTIES = [ - SET_QUEUE_KEY, - SET_ONCE_QUEUE_KEY, - UNSET_QUEUE_KEY, - ADD_QUEUE_KEY, - APPEND_QUEUE_KEY, - REMOVE_QUEUE_KEY, - UNION_QUEUE_KEY, - PEOPLE_DISTINCT_ID_KEY, - ALIAS_ID_KEY, - EVENT_TIMERS_KEY - ]; + /** - * Mixpanel Persistence Object * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function(boolean)} options.setPersistenceDisabledFunc turn the instance's persistence, + * batching and recording off (true) or back on (false) + * @param {function} options.deleteUserFunc delete the identified user's profile and charges */ - var MixpanelPersistence = function(config) { - this['props'] = {}; - this.campaign_params_saved = false; - - if (config['persistence_name']) { - this.name = 'mp_' + config['persistence_name']; - } else { - this.name = 'mp_' + config['token'] + '_mixpanel'; - } + var OptOutFlagDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.setPersistenceDisabled = options.setPersistenceDisabledFunc; + this.deleteUser = options.deleteUserFunc; + }; - var storage_type = config['persistence']; - if (storage_type !== 'cookie' && storage_type !== 'localStorage') { - console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie'); - storage_type = config['persistence'] = 'cookie'; + /** + * Move a cookie flag to localStorage if that's the configured store, then apply a stored opt-out, + * or opt out when nothing is stored and the configs say to. + */ + OptOutFlagDecisions.prototype.init = function() { + var localStorageRequested = this.getConfig('opt_out_tracking_persistence_type') === 'localStorage'; + if (localStorageRequested && _.localStorage.is_supported()) { + if (!this.hasOptedIn({'persistence_type': 'localStorage'}) && this.hasOptedIn({'persistence_type': 'cookie'})) { + this.optIn({'enable_persistence': false}); + } + if (!this.hasOptedOut({'persistence_type': 'localStorage'}) && this.hasOptedOut({'persistence_type': 'cookie'})) { + this.optOut({'clear_persistence': false}); + } + this.clear({ + 'persistence_type': 'cookie', + 'enable_persistence': false + }); } - if (storage_type === 'localStorage' && _.localStorage.is_supported()) { - this.storage = _.localStorage; - } else { - this.storage = _.cookie; + if (this.hasOptedOut()) { + this._updatePersistence({'clear_persistence': true}); + // persistence isn't cleared here by default, since the opt-out default is often an initial + // state while consent is being collected + } else if (!this.hasOptedIn() && (this._optsOutByDefault() || _.cookie.get('mp_optout'))) { + _.cookie.remove('mp_optout'); + this.optOut({ + 'clear_persistence': this.getConfig('opt_out_persistence_by_default') + }); } - - this.load(); - this.update_config(config); - this.upgrade(); - this.save(); }; - MixpanelPersistence.prototype.properties = function() { - var p = {}; - - this.load(); - - // Filter out reserved properties - _.each(this['props'], function(v, k) { - if (!_.include(RESERVED_PROPERTIES, k)) { - p[k] = v; - } - }); - return p; + // opt_out_tracking_by_default applies only without consent_mode, which replaces it + OptOutFlagDecisions.prototype._optsOutByDefault = function() { + return !this.getConfig('consent_mode') && !!this.getConfig('opt_out_tracking_by_default'); }; - MixpanelPersistence.prototype.load = function() { - if (this.disabled) { return; } + /** + * @returns {string} + */ + OptOutFlagDecisions.prototype.state = function() { + return CONSENT_MODES[this.mode][this._readDecision()]; + }; - var entry = this.storage.parse(this.name); + /** + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {boolean} + */ + OptOutFlagDecisions.prototype.hasOptedIn = function(options) { + return this._readFlag(options) === '1'; + }; - if (entry) { - this['props'] = _.extend({}, entry); - } + /** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {boolean} + */ + OptOutFlagDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; - MixpanelPersistence.prototype.upgrade = function() { - var old_cookie, - old_localstorage; + /** + * @param {Object} [options] opt_in_tracking() options + */ + OptOutFlagDecisions.prototype.optIn = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(optIn, options); + this._updatePersistence(options); + }; - // if transferring from cookie to localStorage or vice-versa, copy existing - // super properties over to new storage mode - if (this.storage === _.localStorage) { - old_cookie = _.cookie.parse(this.name); + /** + * @param {Object} [options] opt_out_tracking() options + */ + OptOutFlagDecisions.prototype.optOut = function(options) { + options = _.extend({ + 'clear_persistence': true, + 'delete_user': true + }, options); - _.cookie.remove(this.name); - _.cookie.remove(this.name, true); + // before the opt-out, which blocks the people calls this makes + if (options['delete_user']) { + this.deleteUser(); + } - if (old_cookie) { - this.register_once(old_cookie); - } - } else if (this.storage === _.cookie) { - old_localstorage = _.localStorage.parse(this.name); + this._writeFlag(optOut, options); + this._updatePersistence(options); + }; - _.localStorage.remove(this.name); + /** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ + OptOutFlagDecisions.prototype.clear = function(options) { + options = _.extend({'enable_persistence': true}, options); + this._writeFlag(clearOptInOut, options); + this._updatePersistence(options); + }; - if (old_localstorage) { - this.register_once(old_localstorage); - } + /** + * @param {Object} options a decision's clear_persistence or enable_persistence option + */ + OptOutFlagDecisions.prototype._updatePersistence = function(options) { + if (options['clear_persistence']) { + this.setPersistenceDisabled(true); + } else if (options['enable_persistence']) { + this.setPersistenceDisabled(false); } }; - MixpanelPersistence.prototype.save = function() { - if (this.disabled) { return; } - - this.storage.set( - this.name, - JSONStringify(this['props']), - this.expire_days, - this.cross_subdomain, - this.secure, - this.cross_site, - this.cookie_domain - ); - }; + /** + * Call an opt-out-flag write with the instance's opt-out flag and cookie config, overridden by the + * call's options. + * @param {function} func optIn, optOut or clearOptInOut + * @param {Object} options + */ + OptOutFlagDecisions.prototype._writeFlag = function(func, options) { + var getConfig = this.getConfig; + options = _.extend({ + 'track': this.track, + 'persistence_type': getConfig('opt_out_tracking_persistence_type'), + 'cookie_prefix': getConfig('opt_out_tracking_cookie_prefix'), + 'cookie_expiration': getConfig('cookie_expiration'), + 'cross_site_cookie': getConfig('cross_site_cookie'), + 'cross_subdomain_cookie': getConfig('cross_subdomain_cookie'), + 'cookie_domain': getConfig('cookie_domain'), + 'secure_cookie': getConfig('secure_cookie') + }, options); - MixpanelPersistence.prototype.load_prop = function(key) { - this.load(); - return this['props'][key]; - }; + // check if localStorage can be used for recording opt out status, fall back to cookie if not + if (!_.localStorage.is_supported()) { + options['persistence_type'] = 'cookie'; + } - MixpanelPersistence.prototype.remove = function() { - // remove both domain and subdomain cookies - this.storage.remove(this.name, false, this.cookie_domain); - this.storage.remove(this.name, true, this.cookie_domain); + func(getConfig('token'), { + track: options['track'], + trackEventName: options['track_event_name'], + trackProperties: options['track_properties'], + persistenceType: options['persistence_type'], + persistencePrefix: options['cookie_prefix'], + cookieDomain: options['cookie_domain'], + cookieExpiration: options['cookie_expiration'], + crossSiteCookie: options['cross_site_cookie'], + crossSubdomainCookie: options['cross_subdomain_cookie'], + secureCookie: options['secure_cookie'] + }); }; - // removes the storage entry and deletes all loaded data - // forced name for tests - MixpanelPersistence.prototype.clear = function() { - this.remove(); - this['props'] = {}; + /** + * @param {Object} [options] persistence_type, cookie_prefix and ignore_dnt to read with + * @returns {string} + */ + OptOutFlagDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag(options)); }; /** - * @param {Object} props - * @param {*=} default_value - * @param {number=} days - */ - MixpanelPersistence.prototype.register_once = function(props, default_value, days) { - if (_.isObject(props)) { - if (typeof(default_value) === 'undefined') { default_value = 'None'; } - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * The opt-out flag, from the store that holds it unless options name one. + * @param {Object} [options] persistence_type and cookie_prefix to read + * @returns {string|null} '1', '0', or null when there's none + */ + OptOutFlagDecisions.prototype._readFlag = function(options) { + options = _.extend({ + 'cookie_prefix': this.getConfig('opt_out_tracking_cookie_prefix') + }, options); - this.load(); + var token = this.getConfig('token'); + var persistenceType = options['persistence_type']; + if (!persistenceType) { + persistenceType = getOptOutCheckPersistenceType( + token, this.getConfig('opt_out_tracking_persistence_type'), options['cookie_prefix'] + ); + } else if (!_.localStorage.is_supported()) { + persistenceType = 'cookie'; + } - _.each(props, function(val, prop) { - if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) { - this['props'][prop] = val; - } - }, this); + return readOptInOutFlag(token, { + persistenceType: persistenceType, + persistencePrefix: options['cookie_prefix'] + }); + }; - this.save(); + /** + * Decisions under 'require_consent'. The decision is stored with the persistence, so a subdomain + * sharing the identity cookie shares it. The state is read once, when the instance is built, and + * then changed only by this page's decisions; storage opens and closes when it changes, and without + * consent to store, everything stored about the visitor but the decision is deleted. + * + * The constructor reads the stored decision and writes nothing, so the instance can ask allows() + * while it builds persistence and the services. init() runs once they exist and makes the writes. + */ - return true; - } - return false; - }; /** - * @param {Object} props - * @param {number=} days - */ - MixpanelPersistence.prototype.register = function(props, days) { - if (_.isObject(props)) { - this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days; + * @constructor + * @param {string} mode + * @param {Object} options + * @param {function} options.getConfigFunc the instance's get_config + * @param {function} options.trackFunc the instance's track, for the $opt_in event + * @param {function} options.startTrackingFunc open storage and start the services when the state + * starts allowing storage + * @param {function} options.stopTrackingFunc stop the services and close storage when it stops + * @param {function} options.purgeIdentifiersFunc delete everything stored about the visitor except + * the decision + */ + var ConsentDecisions = function(mode, options) { + this.mode = mode; + this.getConfig = options.getConfigFunc; + this.track = options.trackFunc; + this.startTracking = options.startTrackingFunc; + this.stopTracking = options.stopTrackingFunc; + this.purgeIdentifiers = options.purgeIdentifiersFunc; + // read from storage the first time it's asked for + this.appliedState = null; + }; - this.load(); - _.extend(this['props'], props); - this.save(); + // delete what an earlier page stored without consent + ConsentDecisions.prototype.init = function() { + this._reconcile(); + }; - return true; + /** + * @returns {string} + */ + ConsentDecisions.prototype.state = function() { + if (this.appliedState === null) { + this.appliedState = CONSENT_MODES[this.mode][this._readDecision()]; } - return false; + return this.appliedState; }; - MixpanelPersistence.prototype.unregister = function(prop) { - this.load(); - if (prop in this['props']) { - delete this['props'][prop]; - this.save(); - } + /** + * @returns {boolean} + */ + ConsentDecisions.prototype.hasOptedIn = function() { + return this._readFlag() === '1'; }; - MixpanelPersistence.prototype.update_search_keyword = function(referrer) { - this.register(_.info.searchInfo(referrer)); + /** + * @param {Object} [options] a call's ignore_dnt option + * @returns {boolean} + */ + ConsentDecisions.prototype.hasOptedOut = function(options) { + var decision = this._readDecision(options); + return decision === DECISION_OPTED_OUT || decision === DECISION_OBJECTED; }; - // EXPORTED METHOD, we test this directly. - MixpanelPersistence.prototype.update_referrer_info = function(referrer) { - // If referrer doesn't exist, we want to note the fact that it was type-in traffic. - this.register_once({ - '$initial_referrer': referrer || '$direct', - '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct' - }, ''); + /** + * @param {Object} [options] opt_in_tracking() options; only the track options apply + */ + ConsentDecisions.prototype.optIn = function(options) { + this._decide(DECISION_OPTED_IN, options); }; - MixpanelPersistence.prototype.get_referrer_info = function() { - return _.strip_empty_properties({ - '$initial_referrer': this['props']['$initial_referrer'], - '$initial_referring_domain': this['props']['$initial_referring_domain'] - }); + ConsentDecisions.prototype.optOut = function() { + this._decide(DECISION_OPTED_OUT); }; - MixpanelPersistence.prototype.update_config = function(config) { - this.default_expiry = this.expire_days = config['cookie_expiration']; - this.set_disabled(config['disable_persistence']); - this.set_cookie_domain(config['cookie_domain']); - this.set_cross_site(config['cross_site_cookie']); - this.set_cross_subdomain(config['cross_subdomain_cookie']); - this.set_secure(config['secure_cookie']); + ConsentDecisions.prototype.clear = function() { + this._decide(DECISION_NONE); }; - MixpanelPersistence.prototype.set_disabled = function(disabled) { - this.disabled = disabled; - if (this.disabled) { - this.remove(); - } else { - this.save(); + /** + * Store a decision, move this page's state to match it, and open or close storage when that + * changes whether storage is allowed. + * @param {string} decision + * @param {Object} [options] opt_in_tracking() options + */ + ConsentDecisions.prototype._decide = function(decision, options) { + options = options || {}; + var wasStoring = this._allowsStore(); + this._writeDecision(decision); + + // the state changes before the services start or stop, because they ask it. It follows the + // decision even if storing it failed; Do Not Track still wins. + this.appliedState = CONSENT_MODES[this.mode][doNotTrackApplies(this.getConfig) ? DECISION_OBJECTED : decision]; + var storing = this._allowsStore(); + + if (wasStoring && !storing) { + this.stopTracking(); + } + this._reconcile(); + if (!wasStoring && storing) { + this.startTracking(); } + + // after the services start, so it carries the visitor's ID and a recording it triggers finds + // replay set up + var track = _.isUndefined(options['track']) ? this.track : options['track']; + if (decision === DECISION_OPTED_IN && storing && track) { + track(options['track_event_name'] || '$opt_in', options['track_properties'], {'send_immediately': true}); + } + }; + + ConsentDecisions.prototype._allowsStore = function() { + return CONSENT_STATES[this.state()]['store'] === true; }; - MixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) { - if (cookie_domain !== this.cookie_domain) { - this.remove(); - this.cookie_domain = cookie_domain; - this.save(); + /** + * Make what's stored match the state, whatever an earlier page, SDK version or decision left: + * without consent to store, delete everything about the visitor but the decision. + */ + ConsentDecisions.prototype._reconcile = function() { + if (!this._allowsStore()) { + this.purgeIdentifiers(); } }; - MixpanelPersistence.prototype.set_cross_site = function(cross_site) { - if (cross_site !== this.cross_site) { - this.cross_site = cross_site; - this.remove(); - this.save(); + /** + * Store a decision as the opt-out flag ('1' for an opt-in, '0' for an opt-out), removed at every + * cookie scope first so a copy an earlier config left can't shadow it. + * @param {string} decision + */ + ConsentDecisions.prototype._writeDecision = function(decision) { + var flag = null; + if (decision === DECISION_OPTED_IN) { + flag = '1'; + } else if (decision === DECISION_OPTED_OUT) { + flag = '0'; + } + // a decision that's already stored isn't written again + if (this._readFlag() === flag) { + return; } + this._writeDecisionKey(this._decisionKey(), flag); }; - MixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) { - if (cross_subdomain !== this.cross_subdomain) { - this.cross_subdomain = cross_subdomain; - this.remove(); - this.save(); + /** + * @param {string} key + * @param {string|null} value null to remove it + */ + ConsentDecisions.prototype._writeDecisionKey = function(key, value) { + var getConfig = this.getConfig; + var cookieDomain = getConfig('cookie_domain'); + _.cookie.remove(key); + _.cookie.remove(key, true); + if (cookieDomain) { + _.cookie.remove(key, false, cookieDomain); + } + if (this._decisionInLocalStorage()) { + if (value === null) { + _.localStorage.remove(key); + } else { + _.localStorage.set(key, value); + } + } else if (value !== null) { + _.cookie.set( + key, + value, + getConfig('cookie_expiration'), + getConfig('cross_subdomain_cookie'), + getConfig('secure_cookie'), + getConfig('cross_site_cookie'), + cookieDomain + ); } }; - MixpanelPersistence.prototype.get_cross_subdomain = function() { - return this.cross_subdomain; + // the store the persistence uses, chosen without the localStorage support probe, which writes a key + ConsentDecisions.prototype._decisionInLocalStorage = function() { + return this.getConfig('persistence') === 'localStorage' && !!getLocalStorage(); }; - MixpanelPersistence.prototype.set_secure = function(secure) { - if (secure !== this.secure) { - this.secure = secure ? true : false; - this.remove(); - this.save(); - } + ConsentDecisions.prototype._decisionStore = function() { + return this._decisionInLocalStorage() ? _.localStorage : _.cookie; }; - MixpanelPersistence.prototype._add_to_people_queue = function(queue, data) { - var q_key = this._get_queue_key(queue), - q_data = data[queue], - set_q = this._get_or_create_queue(SET_ACTION), - set_once_q = this._get_or_create_queue(SET_ONCE_ACTION), - unset_q = this._get_or_create_queue(UNSET_ACTION), - add_q = this._get_or_create_queue(ADD_ACTION), - union_q = this._get_or_create_queue(UNION_ACTION), - remove_q = this._get_or_create_queue(REMOVE_ACTION, []), - append_q = this._get_or_create_queue(APPEND_ACTION, []); + ConsentDecisions.prototype._decisionKey = function() { + return (this.getConfig('opt_out_tracking_cookie_prefix') || OPT_IN_OUT_FLAG_PREFIX) + this.getConfig('token'); + }; - if (q_key === SET_QUEUE_KEY) { - // Update the set queue - we can override any existing values - _.extend(set_q, q_data); - // if there was a pending increment, override it - // with the set. - this._pop_from_people_queue(ADD_ACTION, q_data); - // if there was a pending union, override it - // with the set. - this._pop_from_people_queue(UNION_ACTION, q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === SET_ONCE_QUEUE_KEY) { - // only queue the data if there is not already a set_once call for it. - _.each(q_data, function(v, k) { - if (!(k in set_once_q)) { - set_once_q[k] = v; - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNSET_QUEUE_KEY) { - _.each(q_data, function(prop) { + /** + * @param {Object} [options] a call's ignore_dnt option + * @returns {string} + */ + ConsentDecisions.prototype._readDecision = function(options) { + return readDecision(doNotTrackApplies(this.getConfig, options), this._readFlag()); + }; - // undo previously-queued actions on this key - _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) { - if (prop in enqueued_obj) { - delete enqueued_obj[prop]; - } - }); - _.each(append_q, function(append_obj) { - if (prop in append_obj) { - delete append_obj[prop]; - } - }); + /** + * @returns {string|null} the stored opt-out flag: '1', '0', or null when there's none + */ + ConsentDecisions.prototype._readFlag = function() { + return this._decisionStore().get(this._decisionKey()); + }; - unset_q[prop] = true; + /** + * Consent for one instance, and the instance's ConsentGate: the rest of the SDK asks its + * allowsApiCalls(), allowsSending() and so on, and never reads the mode. The mode picks a row of + * CONSENT_MODES (consent-modes.js), which maps the visitor's decision to a state, and + * CONSENT_STATES says what that state allows. Where the decision is stored, and what changes when + * the visitor decides, is up to OptOutFlagDecisions under 'no_consent_required' and + * ConsentDecisions under the other modes. + */ + + /** + * The answers that are the same in every state a mode can reach, which allows() gives without + * reading the decision. + * @param {string} mode + * @returns {Object} + */ + function fixedAnswers(mode) { + var states = _.values(CONSENT_MODES[mode]); + var answers = {}; + _.each(CAPABILITIES, function(capability) { + var answer = CONSENT_STATES[states[0]][capability]; + var same = true; + _.each(states, function(state) { + same = same && CONSENT_STATES[state][capability] === answer; }); - } else if (q_key === ADD_QUEUE_KEY) { - _.each(q_data, function(v, k) { - // If it exists in the set queue, increment - // the value - if (k in set_q) { - set_q[k] += v; - } else { - // If it doesn't exist, update the add - // queue - if (!(k in add_q)) { - add_q[k] = 0; - } - add_q[k] += v; - } - }, this); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === UNION_QUEUE_KEY) { - _.each(q_data, function(v, k) { - if (_.isArray(v)) { - if (!(k in union_q)) { - union_q[k] = []; - } - // Prevent duplicate values - _.each(v, function(item) { - if (!_.include(union_q[k], item)) { - union_q[k].push(item); - } - }); - } - }); - this._pop_from_people_queue(UNSET_ACTION, q_data); - } else if (q_key === REMOVE_QUEUE_KEY) { - remove_q.push(q_data); - this._pop_from_people_queue(APPEND_ACTION, q_data); - } else if (q_key === APPEND_QUEUE_KEY) { - append_q.push(q_data); - this._pop_from_people_queue(UNSET_ACTION, q_data); + if (same) { + answers[capability] = answer; + } + }); + return answers; + } + + /** + * @constructor + * @param {Object} options the options of OptOutFlagDecisions and ConsentDecisions; each uses its + * own + */ + var ConsentManager = function(options) { + this.getConfig = options.getConfigFunc; + this.mode = resolveConsentMode(options.getConfigFunc('consent_mode')); + this.fixedAnswers = fixedAnswers(this.mode); + this.decisions = this.mode === CONSENT_MODE_NO_CONSENT_REQUIRED ? + new OptOutFlagDecisions(this.mode, options) : + new ConsentDecisions(this.mode, options); + _.extend(this, buildConsentGate(_.bind(this.allows, this), this.getConfig)); + // the arguments of the latest identify() made while storage isn't allowed + this.heldIdentify = null; + }; + + /** + * Whether the visitor's current state allows something. The rest of the SDK asks the ConsentGate + * methods built on this. + * @param {string} capability 'api_calls', 'send', 'fetch' or 'store' + * @returns {boolean} + */ + ConsentManager.prototype.allows = function(capability) { + if (this.fixedAnswers.hasOwnProperty(capability)) { + return this.fixedAnswers[capability]; } + return CONSENT_STATES[this.state()][capability]; + }; - console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):'); - console.log(data); + /** + * @returns {string} + */ + ConsentManager.prototype.state = function() { + return this.decisions.state(); + }; - this.save(); + /** + * Keep an identify() made while storage isn't allowed, to apply if the visitor opts in on this page. + * @param {Array} identifyArgs + */ + ConsentManager.prototype.holdIdentify = function(identifyArgs) { + this.heldIdentify = identifyArgs; }; - MixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) { - var q = this['props'][this._get_queue_key(queue)]; - if (!_.isUndefined(q)) { - _.each(data, function(v, k) { - if (queue === APPEND_ACTION || queue === REMOVE_ACTION) { - // list actions: only remove if both k+v match - // e.g. remove should not override append in a case like - // append({foo: 'bar'}); remove({foo: 'qux'}) - _.each(q, function(queued_action) { - if (queued_action[k] === v) { - delete queued_action[k]; - } - }); - } else { - delete q[k]; - } - }, this); - } + /** + * @returns {Array|null} the held identify() arguments, which are then no longer held + */ + ConsentManager.prototype.takeHeldIdentify = function() { + var identifyArgs = this.heldIdentify; + this.heldIdentify = null; + return identifyArgs; }; - MixpanelPersistence.prototype.load_queue = function(queue) { - return this.load_prop(this._get_queue_key(queue)); + /** + * Make the writes the stored decision calls for, once the instance has built the persistence and + * services they touch. allows() already answers before this. + */ + ConsentManager.prototype.init = function() { + this.decisions.init(); }; - MixpanelPersistence.prototype._get_queue_key = function(queue) { - if (queue === SET_ACTION) { - return SET_QUEUE_KEY; - } else if (queue === SET_ONCE_ACTION) { - return SET_ONCE_QUEUE_KEY; - } else if (queue === UNSET_ACTION) { - return UNSET_QUEUE_KEY; - } else if (queue === ADD_ACTION) { - return ADD_QUEUE_KEY; - } else if (queue === APPEND_ACTION) { - return APPEND_QUEUE_KEY; - } else if (queue === REMOVE_ACTION) { - return REMOVE_QUEUE_KEY; - } else if (queue === UNION_ACTION) { - return UNION_QUEUE_KEY; - } else { - console.error('Invalid queue:', queue); - } + /** + * @param {Object} [options] has_opted_in_tracking() options + * @returns {boolean} + */ + ConsentManager.prototype.hasOptedIn = function(options) { + return this.decisions.hasOptedIn(options); }; - MixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) { - var key = this._get_queue_key(queue); - default_val = _.isUndefined(default_val) ? {} : default_val; - return this['props'][key] || (this['props'][key] = default_val); + /** + * @param {Object} [options] has_opted_out_tracking() options + * @returns {boolean} + */ + ConsentManager.prototype.hasOptedOut = function(options) { + return this.decisions.hasOptedOut(options); }; - MixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - timers[event_name] = timestamp; - this['props'][EVENT_TIMERS_KEY] = timers; - this.save(); + /** + * @param {Object} [options] opt_in_tracking() options + */ + ConsentManager.prototype.optIn = function(options) { + this.decisions.optIn(options); }; - MixpanelPersistence.prototype.remove_event_timer = function(event_name) { - var timers = this.load_prop(EVENT_TIMERS_KEY) || {}; - var timestamp = timers[event_name]; - if (!_.isUndefined(timestamp)) { - delete this['props'][EVENT_TIMERS_KEY][event_name]; - this.save(); - } - return timestamp; + /** + * @param {Object} [options] opt_out_tracking() options + */ + ConsentManager.prototype.optOut = function(options) { + this.decisions.optOut(options); + }; + + /** + * @param {Object} [options] clear_opt_in_out_tracking() options + */ + ConsentManager.prototype.clear = function(options) { + this.decisions.clear(options); }; /* eslint camelcase: "off" */ @@ -8036,6 +8833,7 @@ 'opt_out_persistence_by_default': false, 'opt_out_tracking_persistence_type': 'localStorage', 'opt_out_tracking_cookie_prefix': null, + 'consent_mode': null, 'property_blacklist': [], 'xhr_headers': {}, // { header: value, header2: value } 'ignore_dnt': false, @@ -8102,26 +8900,9 @@ instance._init(token, config, name); instance['people'] = new MixpanelPeople(); - instance['people']._init(instance); + instance['people']._init(instance, instance._consent); - if (!instance.get_config('skip_first_touch_marketing')) { - // We need null UTM params in the object because - // UTM parameters act as a tuple. If any UTM param - // is present, then we set all UTM params including - // empty ones together - var utm_params = _.info.campaignParams(null); - var initial_utm_params = {}; - var has_utm = false; - _.each(utm_params, function(utm_value, utm_key) { - initial_utm_params['initial_' + utm_key] = utm_value; - if (utm_value) { - has_utm = true; - } - }); - if (has_utm) { - instance['people'].set_once(initial_utm_params); - } - } + instance._set_first_touch_people_properties(); // if any instance on the page has debug = true, we set the // global debug to be true @@ -8216,6 +8997,19 @@ 'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc' })); + this._consent = new ConsentManager({ + getConfigFunc: _.bind(this.get_config, this), + // looks track up at each call, so a wrapper added after init sees it + trackFunc: _.bind(function() { + return this.track.apply(this, arguments); + }, this), + setPersistenceDisabledFunc: _.bind(this._set_persistence_disabled, this), + deleteUserFunc: _.bind(this._delete_user_for_opt_out, this), + startTrackingFunc: _.bind(this._start_tracking, this), + stopTrackingFunc: _.bind(this._stop_tracking, this), + purgeIdentifiersFunc: _.bind(this._purge_stored_identifiers, this) + }); + this.recorderManager = new RecorderManager({ mixpanelInstance: this, getConfigFunc: _.bind(this.get_config, this), @@ -8223,6 +9017,7 @@ getTabIdFunc: _.bind(this.get_tab_id, this), reportErrorFunc: _.bind(this.report_error, this), getDistinctIdFunc: _.bind(this.get_distinct_id, this), + consentGate: this._consent, recorderSrc: this.get_config('recorder_src'), targetingSrc: this.get_config('targeting_src'), libBasePath: this.get_config('lib_base_path'), @@ -8240,64 +9035,16 @@ }; this._remote_settings_strict_disabled = false; - // set up request queueing/batching this.request_batchers = {}; - this._batch_requests = this.get_config('batch_requests'); - if (this._batch_requests) { - if (!_.localStorage.is_supported(true) || !USE_XHR) { - this._batch_requests = false; - console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); - _.each(this.get_batcher_configs(), function(batcher_config) { - console.log('Clearing batch queue ' + batcher_config.queue_key); - _.localStorage.remove(batcher_config.queue_key); - }); - } else { - this.init_batchers(); - if (sendBeacon && win.addEventListener) { - // Before page closes or hides (user tabs away etc), attempt to flush any events - // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, - // events will not be removed from the persistent store; if the site is loaded again, - // the events will be flushed again on startup and deduplicated on the Mixpanel server - // side. - // There is no reliable way to capture only page close events, so we lean on the - // visibilitychange and pagehide events as recommended at - // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. - // These events fire when the user clicks away from the current page/tab, so will occur - // more frequently than page unload, but are the only mechanism currently for capturing - // this scenario somewhat reliably. - var flush_on_unload = _.bind(function() { - if (!this.request_batchers.events.stopped) { - this.request_batchers.events.flush({unloading: true}); - } - }, this); - win.addEventListener('pagehide', function(ev) { - if (ev['persisted']) { - flush_on_unload(); - } - }); - win.addEventListener('visibilitychange', function() { - if (document$1['visibilityState'] === 'hidden') { - flush_on_unload(); - } - }); - } - } + // without consent to store, the props stay in memory, and batching and the services wait for + // _start_tracking() + var allows_storage = this._consent.allowsStoring(); + if (allows_storage) { + this._init_batching(); } - this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']); + this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config'], {closed: !allows_storage}); this.unpersisted_superprops = {}; - this._gdpr_init(); - - var uuid = _.UUID(); - if (!this.get_distinct_id()) { - // There is no need to set the distinct id - // or the device id if something was already stored - // in the persitence - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); - } this.flags = new FeatureFlagManager({ getFullApiRoute: _.bind(function() { @@ -8307,12 +9054,52 @@ setConfigFunc: _.bind(this.set_config, this), getPropertyFunc: _.bind(this.get_property, this), trackingFunc: _.bind(this.track, this), + consentGate: this._consent, loadExtraBundle: load_extra_bundle, targetingSrc: this.get_config('targeting_src') || (this.get_config('lib_base_path') + TARGETING_FILENAME) }); - this.flags.init(); this['flags'] = this.flags; + this._consent.init(); + if (allows_storage) { + this._start_services(); + } + + this.autocapture = new Autocapture(this); + this.autocapture.init(); + }; + + MixpanelLib.prototype._set_first_touch_people_properties = function() { + if (this.get_config('skip_first_touch_marketing')) { + return; + } + // We need null UTM params in the object because + // UTM parameters act as a tuple. If any UTM param + // is present, then we set all UTM params including + // empty ones together + var utm_params = _.info.campaignParams(null); + var initial_utm_params = {}; + var has_utm = false; + _.each(utm_params, function(utm_value, utm_key) { + initial_utm_params['initial_' + utm_key] = utm_value; + if (utm_value) { + has_utm = true; + } + }); + if (has_utm) { + this['people'].set_once(initial_utm_params); + } + }; + + // the services that store or send on their own; at init, and again on an opt-in under 'require_consent' + MixpanelLib.prototype._start_services = function() { + // There is no need to set the distinct id + // or the device id if something was already stored + // in the persistence + if (!this.get_distinct_id()) { + this._init_device_id(); + } + this.flags.init(); this._init_tab_id(); // Based on remote_settings_mode, fetch remote settings and then start session recording if applicable @@ -8324,21 +9111,174 @@ } else { this.__session_recording_init_promise = this._check_and_start_session_recording(); } + }; - this.autocapture = new Autocapture(this); - this.autocapture.init(); + /** + * Start tracking when consent starts allowing storage: batching, storage and the services, then + * what the page did before consent. + */ + MixpanelLib.prototype._start_tracking = function() { + if (!this._batch_requests) { + this._init_batching(); + } + this['persistence'].open(); + this._start_services(); + + // an identify() held from before consent goes first, so the people updates below go to that user + var held_identify = this._consent.takeHeldIdentify(); + if (held_identify) { + this.identify.apply(this, held_identify); + } + // first-touch and referrer properties were dropped before consent; an init with consent sends + // them from create_mplib and _loaded instead + this._set_first_touch_people_properties(); + this['people'].set_once(this['persistence'].get_referrer_info()); + }; + + /** + * Stop tracking when consent stops allowing storage: stop sending, recording and storing. The + * props stay in memory, so an opt-in later on the page keeps the visitor's ID. + */ + MixpanelLib.prototype._stop_tracking = function() { + this.stop_batch_senders(); + this.flags.reset(); + this['persistence'].close(); + this.recorderManager.stopSessionRecording(); + }; + + /** + * Delete everything stored about the visitor except the decision itself and unsent replay: the + * persistence entry, queued requests, the tab ID and flag variants. Unsent replay stays on the + * device; the recorder only loads, and so only uploads it, once consent allows storage again. Run + * whenever consent doesn't allow storage, at init and after each decision. + */ + MixpanelLib.prototype._purge_stored_identifiers = function() { + this['persistence'].remove_stored_entry(); + _.each(this.get_batcher_configs(), function(batcher_config) { + _.localStorage.remove(batcher_config.queue_key); + }); + this._remove_tab_id(); + this.flags.clearPersistedVariants(); + }; + + MixpanelLib.prototype._remove_tab_id = function() { + this.tab_id = null; + // the support check probes storage by writing a key, which isn't allowed here; removing a key + // the browser doesn't have costs nothing and is handled where storage isn't there at all + var key_suffix = this._tab_id_key_suffix(); + _.sessionStorage.remove('mp_tab_id_' + key_suffix); + _.sessionStorage.remove('mp_gen_new_tab_id_' + key_suffix); + }; + + MixpanelLib.prototype._init_batching = function() { + this._batch_requests = this.get_config('batch_requests'); + if (!this._batch_requests) { + return; + } + if (!_.localStorage.is_supported(true) || !USE_XHR) { + this._batch_requests = false; + console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support'); + _.each(this.get_batcher_configs(), function(batcher_config) { + console.log('Clearing batch queue ' + batcher_config.queue_key); + _.localStorage.remove(batcher_config.queue_key); + }); + return; + } + + if (!this.are_batchers_initialized()) { + var batcher_for = _.bind(function(attrs) { + return new RequestBatcher( + attrs.queue_key, + { + libConfig: this['config'], + errorReporter: this.get_config('error_reporter'), + sendRequestFunc: _.bind(function(data, options, cb) { + var api_routes = this.get_config('api_routes'); + this._send_request( + this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], + this._encode_data_for_request(data), + options, + this._prepare_callback(cb, data) + ); + }, this), + beforeSendHook: _.bind(function(item) { + var ret = this._run_hook('before_send_' + attrs.type, item); + if (ret) { + return ret[0]; + } else { + return null; + } + }, this), + stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), + usePersistence: true, + consentGate: this._consent, + } + ); + }, this); + var batcher_configs = this.get_batcher_configs(); + this.request_batchers = { + events: batcher_for(batcher_configs.events), + people: batcher_for(batcher_configs.people), + groups: batcher_for(batcher_configs.groups) + }; + + if (sendBeacon && win.addEventListener) { + // Before page closes or hides (user tabs away etc), attempt to flush any events + // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure, + // events will not be removed from the persistent store; if the site is loaded again, + // the events will be flushed again on startup and deduplicated on the Mixpanel server + // side. + // There is no reliable way to capture only page close events, so we lean on the + // visibilitychange and pagehide events as recommended at + // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes. + // These events fire when the user clicks away from the current page/tab, so will occur + // more frequently than page unload, but are the only mechanism currently for capturing + // this scenario somewhat reliably. + var flush_on_unload = _.bind(function() { + if (!this.request_batchers.events.stopped) { + this.request_batchers.events.flush({unloading: true}); + } + }, this); + win.addEventListener('pagehide', function(ev) { + if (ev['persisted']) { + flush_on_unload(); + } + }); + win.addEventListener('visibilitychange', function() { + if (document$1['visibilityState'] === 'hidden') { + flush_on_unload(); + } + }); + } + } + // a page that started the senders before consent expects them running once it's given + if (this.get_config('batch_autostart') || this._batchers_were_started) { + this.start_batch_senders(); + } + }; + + MixpanelLib.prototype._init_device_id = function() { + var uuid = _.UUID(); + this.register_once({ + 'distinct_id': DEVICE_ID_PREFIX + uuid, + '$device_id': uuid + }, ''); }; /** * Assigns a unique UUID to this tab / window by leveraging sessionStorage. * This is primarily used for session recording, where data must be isolated to the current tab. */ + MixpanelLib.prototype._tab_id_key_suffix = function() { + return this.get_config('name') + '_' + this.get_config('token'); + }; + MixpanelLib.prototype._init_tab_id = function() { - if (this.get_config('disable_persistence')) { - console.log('Tab ID initialization skipped due to disable_persistence config'); + if (!this._consent.allowsPersistence()) { + console.log('Tab ID initialization skipped without persistence'); } else if (_.sessionStorage.is_supported()) { try { - var key_suffix = this.get_config('name') + '_' + this.get_config('token'); + var key_suffix = this._tab_id_key_suffix(); var tab_id_key = 'mp_tab_id_' + key_suffix; // A flag is used to determine if sessionStorage is copied over and we need to generate a new tab ID. @@ -8369,9 +9309,12 @@ return this.tab_id || null; }; - MixpanelLib.prototype._check_and_start_session_recording = addOptOutCheckMixpanelLib(function(force_start) { + MixpanelLib.prototype._check_and_start_session_recording = function(force_start) { + if (!this._consent.allowsApiCalls()) { + return; + } return this.recorderManager.checkAndStartSessionRecording(force_start); - }); + }; MixpanelLib.prototype._start_recording_on_event = safewrap(function(event_name, properties) { // Wait for recording init to complete before evaluating event triggers. @@ -8461,7 +9404,7 @@ this._track_dom.apply(this, item); }, this); - if (!this.has_opted_out_tracking()) { + if (this._consent.allowsApiCalls()) { _.each(this.__request_queue, function(item) { this._send_request.apply(this, item); }, this); @@ -8523,6 +9466,15 @@ MixpanelLib.prototype._send_request = function(url, data, options, callback) { var succeeded = true; + // event, people and group requests all pass here; flags and replay ask the gate themselves + if (!this._consent.allowsSending()) { + console.log('Request dropped without consent'); + if (_.isFunction(callback)) { + callback(0); + } + return false; + } + if (ENQUEUE_REQUESTS) { this.__request_queue.push(arguments); return succeeded; @@ -8680,6 +9632,10 @@ }; MixpanelLib.prototype._fetch_remote_settings = function(mode) { + if (!this._consent.allowsFetching()) { + return Promise.resolve(); + } + var self = this; var disableRecordingIfStrict = function() { if (mode === 'strict') { @@ -8817,48 +9773,6 @@ return this._batcher_configs; }; - MixpanelLib.prototype.init_batchers = function() { - if (!this.are_batchers_initialized()) { - var batcher_for = _.bind(function(attrs) { - return new RequestBatcher( - attrs.queue_key, - { - libConfig: this['config'], - errorReporter: this.get_config('error_reporter'), - sendRequestFunc: _.bind(function(data, options, cb) { - var api_routes = this.get_config('api_routes'); - this._send_request( - this.get_api_host(attrs.api_name) + '/' + api_routes[attrs.api_name], - this._encode_data_for_request(data), - options, - this._prepare_callback(cb, data) - ); - }, this), - beforeSendHook: _.bind(function(item) { - var ret = this._run_hook('before_send_' + attrs.type, item); - if (ret) { - return ret[0]; - } else { - return null; - } - }, this), - stopAllBatchingFunc: _.bind(this.stop_batch_senders, this), - usePersistence: true, - } - ); - }, this); - var batcher_configs = this.get_batcher_configs(); - this.request_batchers = { - events: batcher_for(batcher_configs.events), - people: batcher_for(batcher_configs.people), - groups: batcher_for(batcher_configs.groups) - }; - } - if (this.get_config('batch_autostart')) { - this.start_batch_senders(); - } - }; - MixpanelLib.prototype.start_batch_senders = function() { this._batchers_were_started = true; if (this.are_batchers_initialized()) { @@ -8996,7 +9910,6 @@ return request_enqueued_or_initiated && truncated_data; }; - MixpanelLib.prototype.track = addOptOutCheckMixpanelLib( /** * Track an event. This is the most important and * frequently used Mixpanel function. @@ -9021,7 +9934,17 @@ * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ - function(event_name, properties, options, callback) { + MixpanelLib.prototype.track = function(event_name, properties, options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var ret; if (!(options && options.skip_hooks)) { ret = this._run_hook('before_track', event_name, properties); @@ -9033,10 +9956,6 @@ } } - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } options = options || {}; var transport = options['transport']; // external API, don't minify 'transport' prop if (transport) { @@ -9127,9 +10046,8 @@ } return ret; - }); + }; - MixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib( /** * Register the current user into one/many groups. * @@ -9145,7 +10063,13 @@ * @param {Function} [callback] If provided, the callback will be called after tracking the event. * */ - function(group_key, group_ids, callback) { + MixpanelLib.prototype.set_group = function(group_key, group_ids, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } if (!_.isArray(group_ids)) { group_ids = [group_ids]; } @@ -9153,9 +10077,8 @@ prop[group_key] = group_ids; this.register(prop); return this['people'].set(group_key, group_ids, callback); - }); + }; - MixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib( /** * Add a new group for this user. * @@ -9168,7 +10091,13 @@ * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(group_key, group_id, callback) { + MixpanelLib.prototype.add_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_values = this.get_property(group_key); var prop = {}; if (old_values === undefined) { @@ -9182,9 +10111,8 @@ } } return this['people'].union(group_key, group_id, callback); - }); + }; - MixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib( /** * Remove a group from this user. * @@ -9197,7 +10125,13 @@ * @param {*} group_id A valid Mixpanel property type * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(group_key, group_id, callback) { + MixpanelLib.prototype.remove_group = function(group_key, group_id, callback) { + if (!this._consent.allowsApiCalls()) { + if (_.isFunction(callback)) { + callback(0); + } + return; + } var old_value = this.get_property(group_key); // if the value doesn't exist, the persistent store is unchanged if (old_value !== undefined) { @@ -9211,9 +10145,8 @@ } } return this['people'].remove(group_key, group_id, callback); - }); + }; - MixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib( /** * Track an event with specific groups. * @@ -9227,7 +10160,7 @@ * @param {Object=} groups An object mapping group name keys to one or more values * @param {Function} [callback] If provided, the callback will be called after tracking the event. */ - function(event_name, properties, groups, callback) { + MixpanelLib.prototype.track_with_groups = function(event_name, properties, groups, callback) { var tracking_props = _.extend({}, properties || {}); _.each(groups, function(v, k) { if (v !== null && v !== undefined) { @@ -9235,7 +10168,7 @@ } }); return this.track(event_name, tracking_props, callback); - }); + }; MixpanelLib.prototype._create_map_key = function (group_key, group_id) { return group_key + '_' + JSON.stringify(group_id); @@ -9262,13 +10195,12 @@ var group = this._cached_groups[map_key]; if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) { group = new MixpanelGroup(); - group._init(this, group_key, group_id); + group._init(this, group_key, group_id, this._consent); this._cached_groups[map_key] = group; } return group; }; - MixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib( /** * Track a default Mixpanel page view event, which includes extra default event properties to * improve page view data. @@ -9314,7 +10246,7 @@ * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object * with the tracking payload sent to the API server is returned; otherwise false. */ - function(properties, options) { + MixpanelLib.prototype.track_pageview = function(properties, options) { if (typeof properties !== 'object') { properties = {}; } @@ -9338,7 +10270,7 @@ } return this.track(event_name, event_properties); - }); + }; /** * Track clicks on a set of document elements. Selector must be a @@ -9601,6 +10533,10 @@ * to the same user identity. If ID Merge is disabled, alias can * be used to connect pre- and post-registration events. * + * With consent_mode 'require_consent', the latest call made before the visitor consents is held in + * memory, without storing or sending anything, and applied if they opt in on the same page. reset() + * discards it. + * * @param {String} [new_distinct_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used. */ MixpanelLib.prototype.identify = function( @@ -9613,6 +10549,12 @@ // _set_once_callback:function A callback to be run if and when the People set_once queue is flushed // _union_callback:function A callback to be run if and when the People union queue is flushed // _unset_callback:function A callback to be run if and when the People unset queue is flushed + if (!this._consent.allowsStoring()) { + this._consent.holdIdentify(Array.prototype.slice.call(arguments)); + console.log('identify() held until consent'); + return; + } + var ret = this._run_hook('before_identify', new_distinct_id); if (ret === null) { @@ -9677,11 +10619,11 @@ this.stop_session_recording(); this['persistence'].clear(); this._flags.identify_called = false; - var uuid = _.UUID(); - this.register_once({ - 'distinct_id': DEVICE_ID_PREFIX + uuid, - '$device_id': uuid - }, ''); + this._consent.takeHeldIdentify(); + // before consent the device ID is minted on opt-in instead + if (this._consent.allowsStoring()) { + this._init_device_id(); + } this._check_and_start_session_recording(); this.flags.reset(); }; @@ -9743,6 +10685,11 @@ * @param {String} [original] The current identifier being used for this user. */ MixpanelLib.prototype.alias = function(alias, original) { + if (!this._consent.allowsStoring()) { + console.log('alias() dropped without consent'); + return; + } + // If the $people_distinct_id key exists in persistence, there has been a previous // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with // this ID, as it will duplicate users. @@ -9872,6 +10819,11 @@ * // customize the name of cookie/localStorage set by opt-in/opt-out methods * opt_out_tracking_cookie_prefix: null * + * // what happens before the visitor decides: 'no_consent_required' (unset) or + * // 'require_consent'. opt_out_tracking_by_default applies only when it's unset. + * // Fixed at init. + * consent_mode: null + * * // type of persistent store for super properties (cookie/ * // localStorage) if set to 'localStorage', any existing * // mixpanel cookie value with the same persistence_name @@ -9923,6 +10875,11 @@ */ MixpanelLib.prototype.set_config = function(config) { if (_.isObject(config)) { + if (this._consent && 'consent_mode' in config && config['consent_mode'] !== this.get_config('consent_mode')) { + console.critical('consent_mode can only be set at init; ignoring the change'); + config = _.extend({}, config); + delete config['consent_mode']; + } _.extend(this['config'], config); var new_batch_size = config['batch_size']; @@ -10051,105 +11008,42 @@ _.include(this.__disabled_events, event_name); }; - // perform some housekeeping around GDPR opt-in/out state - MixpanelLib.prototype._gdpr_init = function() { - var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage'; - - // try to convert opt-in/out cookies to localStorage if possible - if (is_localStorage_requested && _.localStorage.is_supported()) { - if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) { - this.opt_in_tracking({'enable_persistence': false}); - } - if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) { - this.opt_out_tracking({'clear_persistence': false}); - } - this.clear_opt_in_out_tracking({ - 'persistence_type': 'cookie', - 'enable_persistence': false - }); - } - - // check whether the user has already opted out - if so, clear & disable persistence - if (this.has_opted_out_tracking()) { - this._gdpr_update_persistence({'clear_persistence': true}); - - // check whether we should opt out by default - // note: we don't clear persistence here by default since opt-out default state is often - // used as an initial state while GDPR information is being collected - } else if (!this.has_opted_in_tracking() && ( - this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout') - )) { - _.cookie.remove('mp_optout'); - this.opt_out_tracking({ - 'clear_persistence': this.get_config('opt_out_persistence_by_default') - }); - } + /** + * Whether consent allows something now; see ConsentManager.allows. The separately built recorder + * bundle calls this by its quoted name. + * @param {string} capability + * @returns {boolean} + */ + MixpanelLib.prototype._consent_allows = function(capability) { + return this._consent.allows(capability); }; /** - * Enable or disable persistence based on options - * only enable/disable if persistence is not already in this state - * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it - * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence + * Turn persistence, batching and recording off, or back on after an opt-in. Batching only restarts + * if it was running before, so an opt-in doesn't start it for the first time. + * @param {boolean} disabled */ - MixpanelLib.prototype._gdpr_update_persistence = function(options) { - var disabled; - if (options && options['clear_persistence']) { - disabled = true; - } else if (options && options['enable_persistence']) { - disabled = false; + MixpanelLib.prototype._set_persistence_disabled = function(disabled) { + if (disabled) { + this['persistence'].close(); } else { - return; - } - - if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) { - this['persistence'].set_disabled(disabled); + this['persistence'].open(); } if (disabled) { this.stop_batch_senders(); this.stop_session_recording(); - } else { - // only start batchers after opt-in if they have previously been started - // in order to avoid unintentionally starting up batching for the first time - if (this._batchers_were_started) { - this.start_batch_senders(); - } + } else if (this._batchers_were_started) { + this.start_batch_senders(); } }; - // call a base gdpr function after constructing the appropriate token and options args - MixpanelLib.prototype._gdpr_call_func = function(func, options) { - options = _.extend({ - 'track': _.bind(this.track, this), - 'persistence_type': this.get_config('opt_out_tracking_persistence_type'), - 'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'), - 'cookie_expiration': this.get_config('cookie_expiration'), - 'cross_site_cookie': this.get_config('cross_site_cookie'), - 'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'), - 'cookie_domain': this.get_config('cookie_domain'), - 'secure_cookie': this.get_config('secure_cookie'), - 'ignore_dnt': this.get_config('ignore_dnt') - }, options); - - // check if localStorage can be used for recording opt out status, fall back to cookie if not - if (!_.localStorage.is_supported()) { - options['persistence_type'] = 'cookie'; + // delete the identified user's profile and charges, which the opt-out about to happen would block + MixpanelLib.prototype._delete_user_for_opt_out = function() { + if (this['people'] && this['people']._identify_called()) { + this['people'].delete_user(); + this['people'].clear_charges(); } - - return func(this.get_config('token'), { - track: options['track'], - trackEventName: options['track_event_name'], - trackProperties: options['track_properties'], - persistenceType: options['persistence_type'], - persistencePrefix: options['cookie_prefix'], - cookieDomain: options['cookie_domain'], - cookieExpiration: options['cookie_expiration'], - crossSiteCookie: options['cross_site_cookie'], - crossSubdomainCookie: options['cross_subdomain_cookie'], - secureCookie: options['secure_cookie'], - ignoreDnt: options['ignore_dnt'] - }); }; /** @@ -10171,6 +11065,10 @@ * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply, and the track + * options do. + * * @param {Object} [options] A dictionary of config options to override * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method) * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action @@ -10185,12 +11083,7 @@ * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_in_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(optIn, options); - this._gdpr_update_persistence(options); + this._consent.optIn(options); }; /** @@ -10208,6 +11101,10 @@ * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options, clear_persistence and delete_user below don't apply. The + * stored identifiers are deleted instead, and no $delete is sent. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence @@ -10220,19 +11117,7 @@ * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.opt_out_tracking = function(options) { - options = _.extend({ - 'clear_persistence': true, - 'delete_user': true - }, options); - - // delete user and clear charges since these methods may be disabled by opt-out - if (options['delete_user'] && this['people'] && this['people']._identify_called()) { - this['people'].delete_user(); - this['people'].clear_charges(); - } - - this._gdpr_call_func(optOut, options); - this._gdpr_update_persistence(options); + this._consent.optOut(options); }; /** @@ -10244,13 +11129,15 @@ * // use has_opted_in value * ``` * + * With consent_mode 'require_consent' the options don't apply. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-in status */ MixpanelLib.prototype.has_opted_in_tracking = function(options) { - return this._gdpr_call_func(hasOptedIn, options); + return this._consent.hasOptedIn(options); }; /** @@ -10262,13 +11149,16 @@ * // use has_opted_out value * ``` * + * With consent_mode 'require_consent' the options don't apply, and a stored refusal or Do Not Track + * counts as opted out. + * * @param {Object} [options] A dictionary of config options to override - * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable + * @param {string} [options.persistence_type] Persistence mechanism to read - cookie or localStorage - falls back to cookie if localStorage is unavailable. Defaults to opt_out_tracking_persistence_type; for localStorage, whichever store holds the flag * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name * @returns {boolean} current opt-out status */ MixpanelLib.prototype.has_opted_out_tracking = function(options) { - return this._gdpr_call_func(hasOptedOut, options); + return this._consent.hasOptedOut(options); }; /** @@ -10287,6 +11177,11 @@ * }); * ``` * + * With consent_mode 'require_consent', the decision is stored with the instance's persistence and + * cookie config: the storage options and enable_persistence below don't apply. Clearing also + * deletes the device's stored identifiers, and on a page tracking after an opt-in it stops + * tracking. + * * @param {Object} [options] A dictionary of config options to override * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable @@ -10298,12 +11193,7 @@ * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config) */ MixpanelLib.prototype.clear_opt_in_out_tracking = function(options) { - options = _.extend({ - 'enable_persistence': true - }, options); - - this._gdpr_call_func(clearOptInOut, options); - this._gdpr_update_persistence(options); + this._consent.clear(options); }; MixpanelLib.prototype.report_error = function(msg, err) { @@ -10367,6 +11257,7 @@ MixpanelLibProto['opt_out_tracking'] = MixpanelLibProto.opt_out_tracking; MixpanelLibProto['opt_in_tracking'] = MixpanelLibProto.opt_in_tracking; MixpanelLibProto['has_opted_out_tracking'] = MixpanelLibProto.has_opted_out_tracking; + MixpanelLibProto['_consent_allows'] = MixpanelLibProto._consent_allows; MixpanelLibProto['has_opted_in_tracking'] = MixpanelLibProto.has_opted_in_tracking; MixpanelLibProto['clear_opt_in_out_tracking'] = MixpanelLibProto.clear_opt_in_out_tracking; MixpanelLibProto['get_group'] = MixpanelLibProto.get_group; diff --git a/dist/mixpanel.min.js b/dist/mixpanel.min.js index 26882434..23d62ac4 100644 --- a/dist/mixpanel.min.js +++ b/dist/mixpanel.min.js @@ -1,201 +1,213 @@ -(function(){function $b(){function a(){a.done||(gb=a.done=!0,hb=!1,e.h(Y,function(d){d.Me()}))}function b(){try{A.documentElement.doScroll("left")}catch(d){setTimeout(b,1);return}a()}if(A.addEventListener)"complete"===A.readyState?a():A.addEventListener("DOMContentLoaded",a,!1);else if(A.attachEvent){A.attachEvent("onreadystatechange",a);var c=!1;try{c=null===n.frameElement}catch(d){}A.documentElement.doScroll&&c&&b()}e.me(n,"load",a,!0)}function ac(){G.init=function(a,b,c){if(c)return G[c]||(G[c]= -Y[c]=Aa(a,b,c),G[c].rb()),G[c];c=G;Y.mixpanel?c=Y.mixpanel:a&&(c=Aa(a,b,"mixpanel"),c.rb(),Y.mixpanel=c);G=c;1===Ba&&(n.mixpanel=G);bc()}}function bc(){e.h(Y,function(a,b){"mixpanel"!==b&&(G[b]=a)});G._=e}function Ma(a){a=e.l(a)?a:e.m(a)?{}:{days:a};return e.extend({},cc,a)}function Aa(a,b,c){var d="mixpanel"===c?G:G[c];if(d&&0===Ba)var f=d;else{if(d&&!e.isArray(d)){w.error("You have already initialized "+c);return}f=new t}f.ad={};f.Qa(a,b,c);f.people=new F;f.people.Qa(f);if(!f.g("skip_first_touch_marketing")){b= -e.info.Ua(null);var g={},k=!1;e.h(b,function(h,m){(g["initial_"+m]=h)&&(k=!0)});k&&f.people.Fa(g)}Z=Z||f.g("debug");n.dispatchEvent(new n.CustomEvent("$mp_sdk_to_extension_event",{detail:{instance:f,source:0===Ba?"module":"snippet",token:a,name:c,info:e.info}}));!e.m(d)&&e.isArray(d)&&(f.Zb.call(f.people,d.people),f.Zb(d));return f}function Na(a){throw Error(a+" not available in this build.");}function B(a){this.props={};this.name=a.persistence_name?"mp_"+a.persistence_name:"mp_"+a.token+"_mixpanel"; -var b=a.persistence;"cookie"!==b&&"localStorage"!==b&&(w.i("Unknown persistence type "+b+"; falling back to cookie"),b=a.persistence="cookie");"localStorage"===b&&e.localStorage.Ya()?this.storage=e.localStorage:this.storage=e.cookie;this.load();this.Ee(a);this.upgrade();this.save()}function P(a,b){this.va=b.va;this.gb=new S(a,{va:e.bind(this.s,this),ba:b.ba,we:b.we,xe:b.xe,G:b.G,qc:b.qc});this.$=b.$;this.Hg=b.Ig;this.vb=b.vb;this.Xg=b.Yg;this.fa=this.$.batch_size;this.Ab=this.$.batch_flush_interval_ms; -this.stopped=!this.$.batch_autostart;this.nc=0;this.ma={};this.Ed=b.Ed||!1}function ib(a,b){var c=[];e.h(a,function(d){var f=d.id;f in b?(f=b[f],null!==f&&(d.payload=f,c.push(d))):c.push(d)});return c}function jb(a,b){var c=[];e.h(a,function(d){d.id&&!b[d.id]&&c.push(d)});return c}function S(a,b){b=b||{};this.Ga=a;if(this.G=b.G)this.ba=b.ba||new ta,this.lock=new kb(a,{storage:b.we,Uc:b.xe});this.s=b.va||e.bind(lb.error,lb);this.Pb=b.Pb||null;this.S=[];this.Bc=!1;this.vf=b.qc?dc(e.bind(this.cd,this), -b.qc):e.bind(function(c){return this.cd([c])},this)}function ta(a){this.storage=a||Ca()}function kb(a,b){b=b||{};this.Ga=a;this.storage=b.storage||Ca();this.ie=b.ie||100;this.Uc=b.Uc||2E3;this.ke=b.ke||C}function Da(){this.he="submit"}function oa(){this.he="click"}function W(){}function L(a){this.Nb=a.Nb;this.A=a.tc;this.Jf=a.Kf;this.s=a.Bg;this.Fd=a.Cf;this.aa=a.aa;this.Mc=a.Mc;this.oa=a.oa;this.Kb=a.Kb;this.tb=this.C=null}function ec(a,b){if(!e.isArray(a))return a&&b.i("record_allowed_iframe_origins must be an array of origin strings, cross-origin recording will be disabled."), -[];for(var c=[],d=0;dc;){if(Ya(a))return!1;if(a.getRootNode&&a.getRootNode()!==A){var d=a.getRootNode();if(d.host&&Ya(d.host))return!1}a=a.parentElement;c++}return sc[b]?!0:!1}function Fb(a){return"composedPath"in a?a.composedPath():[]}function Gb(a){var b=Fb(a);return b&&0c?"0"+c:c}return a.getUTCFullYear()+"-"+b(a.getUTCMonth()+1)+"-"+b(a.getUTCDate())+"T"+b(a.getUTCHours())+":"+b(a.getUTCMinutes())+":"+b(a.getUTCSeconds())}; -e.Ha=function(a){var b={};e.h(a,function(c,d){e.Cc(c)&&0=h;)f()}function c(){var l,u="",z;if('"'===h)for(;f();){if('"'===h)return f(),u;if("\\"===h)if(f(),"u"===h){for(l=z=0;4>l;l+=1){var x=parseInt(f(),16);if(!isFinite(x))break;z=16*z+x}u+=String.fromCharCode(z)}else if("string"===typeof m[h])u+=m[h];else break;else u+=h}g("Bad string")}function d(){var l="";"-"===h&&(l="-",f("-"));for(;"0"<=h&&"9">=h;)l+=h,f();if("."===h)for(l+=".";f()&&"0"<=h&&"9">=h;)l+=h;if("e"===h||"E"===h){l+=h;f();if("-"===h||"+"===h)l+=h,f();for(;"0"<=h&&"9">=h;)l+=h,f()}l= -+l;if(isFinite(l))return l;g("Bad number")}function f(l){l&&l!==h&&g("Expected '"+l+"' instead of '"+h+"'");h=q.charAt(k);k+=1;return h}function g(l){l=new SyntaxError(l);l.yh=k;l.text=q;throw l;}var k,h,m={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},q;var p=function(){b();switch(h){case "{":a:{var l={};if("{"===h){f("{");b();if("}"===h){f("}");var u=l;break a}for(;h;){u=c();b();f(":");Object.hasOwnProperty.call(l,u)&&g('Duplicate key "'+u+'"');l[u]=p();b();if("}"===h){f("}");u= -l;break a}f(",");b()}}g("Bad object");u=void 0}return u;case "[":a:{u=[];if("["===h){f("[");b();if("]"===h){f("]");break a}for(;h;){u.push(p());b();if("]"===h){f("]");break a}f(",");b()}}g("Bad array");u=void 0}return u;case '"':return c();case "-":return d();default:return"0"<=h&&"9">=h?d():a()}};return function(l){q=l;k=0;h=" ";l=p();b();h&&g("Syntax error");return l}}();e.gf=function(a){var b=0,c=0,d=[];if(!a)return a;a=e.wh(a);do{var f=a.charCodeAt(b++);var g=a.charCodeAt(b++);var k=a.charCodeAt(b++); -var h=f<<16|g<<8|k;f=h>>18&63;g=h>>12&63;k=h>>6&63;h&=63;d[c++]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(f)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(g)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(k)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(h)}while(bk?c++:h=127k?String.fromCharCode(k>>6|192,k&63|128):String.fromCharCode(k>>12|224,k>>6&63|128,k&63|128);null!==h&&(c>f&&(b+=a.substring(f,c)),b+=h,f=c=d+1)}c>f&&(b+=a.substring(f,a.length));return b};e.Ma=function(){try{return n.crypto.randomUUID()}catch(c){for(var a=Array(36),b=0;36>b;b++)a[b]=Math.floor(16*Math.random());a[14]=4;a[19]=a[19]&= --5;a[19]=a[19]|=8;a[8]=a[13]=a[18]=a[23]="-";return e.map(a,function(d){return d.toString(16)}).join("")}};var Tb="ahrefsbot;ahrefssiteaudit;amazonbot;baiduspider;bingbot;bingpreview;chrome-lighthouse;facebookexternal;petalbot;pinterest;screaming frog;yahoo! slurp;yandex;adsbot-google;apis-google;duplexweb-google;feedfetcher-google;google favicon;google web preview;google-read-aloud;googlebot;googleweblight;mediapartners-google;storebot-google".split(";");e.Qd=function(a){var b;a=a.toLowerCase(); -for(b=0;b=f)return this.ta=[],!0}else this.ta=[{x:g,y:a,timestamp:b}];return!1};pa.prototype.Df=function(a){if(this.T)return Gb(a)};pa.prototype.og=function(a){if(this.T){a=Fb(a);for(var b=0;b